
本文共 1007 字,大约阅读时间需要 3 分钟。
Linux 的用户和组权限机制到底是如何工作的?这个问题在我的工作中贯穿了很久,直到有一天,我在阅读《Linux 编程接口》(Linux Programming Interface, LPI)第九章“进程资格”时,彻底改变了我的认知。这一部分内容简明扼要地解释了我之前理解上的诸多偏差。
在 Unix-like 系统中,每个进程都有一个用户和一组组成的属性。这些组的成员hip不是在进程执行某个特定的操作时实时查询 /etc/group 文件,而是在进程的属性中预置( тисленно由 login shell 初始化)。正确理解这一机制对于 Admin 卿种与权限管理至关重要。
一个进程的组ID 和 补充组 ID 是决定其访问权限的关键因素。文件系统根据这两个 ID 和文件的访问控制列表(ACE)来判断进程是否有权限访问该文件。例如,当 julia 运行一个进程,该进程的真实用户 ID 是 julia,有效用户 ID 可能为 julia 或其他拥有权限的用户,而组 ID 则取决于它所属的组(如 awesome 组)。
值得注意的是,当我们通过命令(如 addgroup 和 adduser 命令)将一个用户添加到组中时,只会更新用户的组成员hip。原有进程不会因为此更变。例如,在之前的测试中,增加 bork 到 panda 组后,他的进程并没有立即继承这个组ID。这是因为,进程的组属性是由 login shell 初始化好的。
因此,要让所有提供给 bork 的进程都获得 panda 组的权限,我们必须重启他的 session。这可以通过使用 sudo login bork 来完成。新登录会话生成的进程会继承最新的组属性并访问指定文件。
此外,通过 newgrp panda 命令可以获得一种快速更新组属性的方法,而无需启动新的 shell。类似的,sg panda bash 也是一个常用的技巧。
关于 setuid 设置,理解其背后的机制尤为重要。setuid 只会设置文件的有效用户 ID,而不会改变进程的真实用户 ID。这意味着即使程序被授权在根权限下运行,其操作仍会基于当前用户的身份进行介质。
总结而言,Linux 的用户组权限机制以预置组成分和文件系统的访问控制模型为核心。这种设计保证了用户权限的保护同时维持了系统的稳定性。通过深入理解这些机制,可以更有效地进行系统管理和开发。
发表评论
最新留言
关于作者
