为什么“注销”会话会激活新添加的补充组?

为什么“注销”会话会激活新添加的补充组?

我问了以下问题 添加了用户补充组,但“groups(1)”未显示更改今天早些时候。现在我想知道为什么这个答案有效。运行后

adduser user group

为什么用户需要注销(我什至不确定这在没有窗口管理器的上下文中意味着什么),或者为什么新组(1)需要调用吗?

答案1

如果你看一下手册页,证书您将明白为什么子进程无法adduser立即以实时方式反映所做的更改:

摘抄

由 fork(2) 创建的子进程继承其父进程的用户和组 ID 的副本。在 execve(2) 期间,进程的真实用户和组 ID 以及补充组 ID 被保留;有效和保存的集 ID 可能会更改,如 execve(2) 中所述。

那么这是什么意思?

注销会结束所有后续进程所派生的父进程。桌面上的所有内容等。这个原始过程中包含您的组信息,它通过读取/etc/passwd&来填充/etc/group

另一个在您的环境如何获取组信息方面发挥作用的文件是/etc/nsswitch.conf.该文件包含如下行:

passwd:     files
shadow:     files
group:      files

这指示您的系统仅从我刚才提到的文件中读取有关密码、组等的信息。

这些行可以轻松地指示系统使用其他源(例如 NIS、LDAP 等)来获取此信息。

nsswitch.conf

如果您查看nsswitch.conf手册页,您会发现系统如何获取用户名、组和密码的各种“数据库”的内容。

摘抄

FILES
       A service named SERVICE is implemented by a shared object library named 
       libnss_SERVICE.so.X that resides in /lib.

       /etc/nsswitch.conf       configuration file
       /lib/libnss_compat.so.X  implements `compat' source for glibc2
       /lib/libnss_db.so.X      implements `db' source for glibc2
       /lib/libnss_dns.so.X     implements `dns' source for glibc2
       /lib/libnss_files.so.X   implements `files' source for glibc2
       /lib/libnss_hesiod.so.X  implements `hesiod' source for glibc2
       /lib/libnss_nis.so.X     implements `nis' source for glibc2
       /lib/libnss_nisplus.so.2 implements `nisplus' source for glibc 2.1

NOTES
       Within each process that uses nsswitch.conf, the entire file is read only
       once; if the file is later changed, the process will continue using the 
       old  configuration.

如果您注意到此注释,它反映了此文件的类似情况,nsswitch.conf其中也无法以实时方式进行更改。

答案2

它需要它,因为组成员身份是在登录时读取的。所有这些信息都与该会话一起存储并且不会被重新读取。

相关内容