誰可以更改檔案/目錄的權限?

誰可以更改檔案/目錄的權限?

我相信(不確定)文件/目錄的所有者和根用戶是唯一允許更改文件/目錄權限的用戶。我是否正確,或者是否有其他使用者也可以更改權限?

答案1

只有擁有者和root(超級使用者)才被允許更改檔案或目錄的權限。這意味著擁有者和超級使用者可以設定讀( r)、寫( w) 和執行( x) 權限。但chown僅允許使用該命令更改檔案和目錄的使用者所有權root。如果使用者是新群組的成員,則chgrp允許變更群組所有權和檔案的擁有者。root

答案2

為了正常操作,只有 root 和擁有者可以chmod。此外,root 可以chownchgrp,此外,chgrp只要所有者是目標群組的成員,所有者就可以。

出於安全考慮,還有另一種情況:任何對包含該文件的目錄具有寫入權限的使用者都可以用副本替換該文件,從而成為所有者,獲得修改權限和內容的能力。

就像這樣:

14:14 mybox:~ mkdir mydir
14:14 mybox:~ cd mydir/
14:14 mybox:mydir echo foo | sudo tee yourfile
foo
14:14 mybox:mydir ls -ld . yourfile 
drwxr-xr-x  3 me    staff  102 Apr 11 14:14 .
-rw-r--r--  1 root  staff    4 Apr 11 14:14 yourfile

我們建立了一個目錄,並以 root 身分寫入了一個檔案。由於 root 擁有該文件,因此我們無法寫入它,也無法 chmod:

14:15 mybox:mydir echo bar > yourfile 
-bash: yourfile: Permission denied
14:15 mybox:mydir chmod a+x yourfile
chmod: Unable to change file mode on yourfile: Operation not permitted

但是,我們確實對該目錄具有寫入權限,因此我們可以替換該檔案以獲得所有權:

14:15 mybox:mydir mv yourfile yourfile2
14:15 mybox:mydir cp yourfile2 yourfile
14:15 mybox:mydir ls -ld . yourfile 
drwxr-xr-x  4 me   staff  136 Apr 11 14:15 .
-rw-r--r--  1 me   staff    4 Apr 11 14:15 yourfile

現在我們是所有者,我們當然可以對該文件執行我們想要的操作:

14:15 mybox:mydir echo bar > yourfile 
14:15 mybox:mydir chmod a+x yourfile
14:16 mybox:mydir cat yourfile
bar

同樣,任何具有寫入權限的用戶任何指向該檔案的完整路徑中的目錄可以替換該點之後的目錄結構,從而獲得具有給定名稱的檔案的所有權。當然,實際原始檔案(我們將其重新命名為“yourfile2”)的所有權或權限不會更改。

14:17 mybox:mydir ls -l yourfile2
-rw-r--r--  1 root  staff  4 Apr 11 14:14 yourfile2

答案3

chmod命令相當直接地調用同名的系統調用;系統呼叫的手冊頁chmod(2)(在 Linux 4.10 上)顯示:

呼叫進程的有效UID必須與檔案的擁有者匹配,或者該進程必須具有特權(Linux:它必須具有該CAP_FOWNER能力)。

如果呼叫進程沒有特權(Linux:不具備該CAP_FSETID能力),且檔案的群組與進程的有效群組ID或其補充群組ID之一不匹配,則該 S_ISGID位元將關閉,但是這不會導致返回錯誤。

所以,是的,以 root 身分執行的進程可以更改任何檔案的權限(如果它沒有放棄該CAP_FOWNER功能)。


同樣令人感興趣的是chown;手冊頁chown(2)說:

只有特權程序(Linux:具有該CAP_CHOWN能力的程序)才能更改檔案的擁有者。文件的擁有者可以將文件的群組變更為該所有者所屬的任何群組。特權程序(Linux:with CAP_CHOWN)可以任意更改群組。

相關內容