我问了以下问题 添加了用户补充组,但“组(1)”今天早些时候没有显示更改。现在我想知道为什么这个答案有效。运行后
adduser user group
Run Code Online (Sandbox Code Playgroud)
为什么用户需要注销(我什至不确定这在没有窗口管理器的上下文中意味着什么),或者为什么需要调用newgrp(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
Run Code Online (Sandbox Code Playgroud)
这指示您的系统仅从我刚才提到的文件中读取有关密码、组等的信息。
这些行可以轻松地指示系统使用其他源(例如 NIS、LDAP 等)来获取此信息。
如果您查看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.
Run Code Online (Sandbox Code Playgroud)
如果您注意到此注释,它反映了此文件的类似情况,其中nsswitch.conf也无法以实时方式进行更改。
| 归档时间: |
|
| 查看次数: |
312 次 |
| 最近记录: |