Permissions
為什麼當執行檔的所有者或組被非特權使用者更改時,S_ISUID 和 S_ISGID 模式位會被清除
我正在閱讀的
man
頁面chown
。我不明白為什麼函式成功返回S_ISUID
時S_ISGID
應該清除模式。
我認為您從手冊頁中指出了這一點:
當執行檔的所有者或組被非特權使用者更改時,S_ISUID 和 S_ISGID 模式位將被清除。
那為什麼他們現在被清除了。您會看到它們僅在可執行文件的情況下被清除。因為當設置其中一位(SUID/SGID)時,非特權使用者可以作為文件的新所有者執行文件。那將是一個巨大的安全漏洞。
我認為您誤讀了
man 2 chown
:您不必清除S_ISUID
andS_ISGID
,當您以非特權使用者身份使用該功能時,它們將自動被清除。如果您的程序正在執行,root
其行為(在 Linux 上)取決於核心版本。如果您需要設置這些位,只需重新應用它們(假設嘗試設置它們的帳戶有權這樣做)。
從手冊頁:
When the owner or group of an executable file are changed by an unprivileged user the S_ISUID and S_ISGID mode bits are cleared. POSIX does not specify whether this also should happen when root does the chown(); the Linux behavior depends on the kernel version. In case of a non-group-executable file (i.e., one for which the S_IXGRP bit is not set) the S_ISGID bit indicates mandatory locking, and is not cleared by a chown().