Permissions
我將使用者添加到組中,但文件的組權限仍然無效
我更改了文件 (
chmod g+w testfile
) 的權限並執行ls -l testfile
給出:-rwxrwxr-x 1 user1 user1 0 2011-01-24 20:36 testfile
然後我將一個使用者添加到該組(“ /etc/group ”有
user1:x:1000:user2
行),但未能將該文件編輯為 user2。為什麼會這樣?
user2
需要註銷並重新登錄。組權限以這種方式工作:
- 當您登錄時,您的程序將獲得 中提到的主組中的組成員身份
/etc/passwd
,以及中提到您的使用者的所有組中的組成員身份/etc/group
。(更準確地說,是 中的pw_gid
欄位getpw(your_uid)
,加上您的使用者是其顯式成員的所有組。除和之外,資訊可能來自其他類型的使用者數據庫,例如 NIS 或 LDAP。)主組成為程序的有效組 ID其他組成為其補充組 ID。/etc/passwd``/etc/group
- 當程序執行需要某個組成員身份的操作時,例如訪問文件,該組必須是有效組 ID 或程序的補充組 ID 之一。
如您所見,您對使用者組成員身份的更改僅在使用者登錄時生效。對於正在執行的程序,為時已晚。所以使用者需要註銷並重新登錄。如果這太麻煩了,使用者可以登錄到一個單獨的會話(例如在不同的控制台上,或使用
ssh localhost
)。在幕後,一個程序只能失去特權(使用者 ID、組 ID、能力)。核心啟動
init
以 root 身份執行的程序(啟動後的第一個程序),並且每個程序最終都來自該程序¹。該login
程序(或sshd
,或您登錄的桌面管理器的一部分)仍以 root 身份執行。它的部分工作是刪除 root 權限並切換到正確的使用者和組。有一個例外:執行setuid 或 setgid程序。該程序獲得額外的權限:它可以選擇在父程序成員資格的各種子集以及擁有 setxid 執行檔的使用者或組中的額外成員資格下進行操作。特別是,setuid root 程序具有 root 權限,因此可以做任何事情²;這就是程序喜歡
su
並且sudo
可以完成工作的方式。¹偶爾會有一些程序不是從 init (initrd, udev) 派生的,但原理是一樣的:以 root 身份啟動並隨著時間的推移失去特權。
²禁止使用 SELinux 等多級安全框架。