我问了以下问题 添加了用户补充组,但“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
它需要它,因为组成员身份是在登录时读取的。所有这些信息都与该会话一起存储并且不会被重新读取。