Answers:
user2
需要注销并重新登录。组权限的工作方式如下:
/etc/passwd
,以及在中提到用户的所有组/etc/group
。(更精确地,pw_gid
在该领域getpw(your_uid)
,加上所有组,其中用户是一个显式构件。除了/etc/passwd
和/etc/group
,该信息可以来自于其他类型的用户数据库如NIS或LDAP的。),主要组成为进程的有效组ID其他组成为其补充组ID。如您所见,对用户的组成员身份所做的更改仅在用户登录后才生效。对于正在运行的进程,为时已晚。因此,用户需要注销并重新登录。如果这太麻烦了,则用户可以登录到单独的会话(例如,在其他控制台上或使用ssh localhost
)。
在后台,进程只能丢失特权(用户ID,组ID,功能)。内核启动init
以root用户身份运行的进程(引导后的第一个进程),每个进程最终都从该进程衍生而来。该login
进程(或sshd
,或您登录的桌面管理器部分)仍以root用户身份运行。它的一部分工作是放弃root特权并切换到适当的用户和组。
有一个例外:执行setuid或setgid程序。该程序将获得其他权限:它可以选择在父进程成员资格的各个子集下以及在拥有setxid可执行文件的用户或组中的其他成员资格下进行操作。特别是,setuid根程序具有root权限,因此可以执行所有操作²;这就是程序喜欢su
并sudo
可以完成其工作的方式。
¹
有时不是从init(initrd,udev)派生的进程,但原理是相同的:以root身份启动并随着时间的流逝失去特权。
²
禁止多层安全框架,例如SELinux。
您可能需要注销user2并重新登录(或尝试ssh'ing来创建新的登录会话)。检查的输出id --groups
以显示用户的数字组ID。