我已将用户添加到组中,但是文件的组权限仍然无效


Answers:


28

user2 需要注销并重新登录。组权限的工作方式如下:

  • 登录时,您的流程将具有在中提到的主要组中的组成员身份/etc/passwd,以及在中提到用户的所有组/etc/group。(更精确地,pw_gid在该领域getpw(your_uid),加上所有组,其中用户是一个显式构件。除了/etc/passwd/etc/group,该信息可以来自于其他类型的用户数据库如NIS或LDAP的。),主要组成为进程的有效组ID其他组成为其补充组ID
  • 当进程执行需要某个组成员身份的操作(例如访问文件)时,该组必须是有效组ID或该进程的补充组ID之一。

如您所见,对用户的组成员身份所做的更改仅在用户登录后才生效。对于正在运行的进程,为时已晚。因此,用户需要注销并重新登录。如果这太麻烦了,则用户可以登录到单独的会话(例如,在其他控制台上或使用ssh localhost)。

在后台,进程只能丢失特权(用户ID,组ID,功能)。内核启动init以root用户身份运行的进程(引导后的第一个进程),每个进程最终都从该进程衍生而来。该login进程(或sshd,或您登录的桌面管理器部分)仍以root用户身份运行。它的一部分工作是放弃root特权并切换到适当的用户和组。

有一个例外:执行setuid或setgid程序。该程序将获得其他权限:它可以选择在父进程成员资格的各个子集下以及在拥有setxid可执行文件的用户或组中的其他成员资格下进行操作。特别是,setuid根程序具有root权限,因此可以执行所有操作²;这就是程序喜欢susudo可以完成其工作的方式。

¹ 有时不是从init(initrd,udev)派生的进程,但原理是相同的:以root身份启动并随着时间的流逝失去特权。
² 禁止多层安全框架,例如SELinux。


1
请注意,如果您使用的是桌面GUI,则简单地注销并重新登录到终端窗口将不会重置组成员身份。我遇到了这个问题,我也需要退出GUI会话:
user394 2014年

3
@ user394注销并重新登录确实会重置组成员身份。如果仅关闭终端窗口,则不会注销。
吉尔斯(Gillles)“所以-别再邪恶了”(

10

您可能需要注销user2并重新登录(或尝试ssh'ing来创建新的登录会话)。检查的输出id --groups以显示用户的数字组ID。


1

sudo su $(whoami)

本质上与相同的解决方法ssh localhost,但在未安装ssh服务器的情况下可用。

只要你有根。但是,如果您刚刚添加了新的网上论坛并更改了权限,则可能会这样做。


尽管这在信息上比被接受的答案要差得多,但有时您想知道如何制作一个时钟,有时您只想知道现在几点了。这个答案为我提供了一个技巧,该技巧将一直起作用,直到我下次注销并重新登录为止。谢谢。
本杰明·斯塔顿

0

在某些情况下,用户注销无济于事-如果您对主机使用ControlMaster ssh指令。如果您将帐户添加到组中,然后在同一ControlMaster连接中再次注销并登录,则该会话仍将显示无新成员身份。您将不得不强制断开Master连接

ssh -O exit hostname

在再次登录之前。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.