Users

為什麼“註銷”會話會啟動新添加的補充組?

  • October 17, 2013

我問了以下問題 添加了使用者補充組,但今天早些時候“組(1)”沒有顯示變化。現在我想知道為什麼答案有效。執行後

adduser user group

為什麼使用者需要註銷(我什至不確定在沒有視窗管理器的上下文中這意味著什麼),或者為什麼需要呼叫newgrp(1) ?

如果您查看手冊頁,會看到為什麼子程序無法通過adduser實時方式立即反映所做的更改:

摘抄

由 fork(2) 創建的子程序繼承其父使用者和組 ID 的副本。在 execve(2) 期間,保留程序的真實使用者和組 ID 以及補充組 ID;如 execve(2) 中所述,可以更改有效和保存的集合 ID。

那麼這是什麼意思?

註銷會結束所有後續程序從中派生的父程序。您桌面中的所有內容等。這個原始過程中有您的組資訊,它通過閱讀/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也無法以實時方式對文件進行更改。

引用自:https://unix.stackexchange.com/questions/96418