Permissions

為什麼當執行檔的所有者或組被非特權使用者更改時,S_ISUID 和 S_ISGID 模式位會被清除

  • October 8, 2014

我正在閱讀的man頁面chown。我不明白為什麼函式成功返回S_ISUIDS_ISGID應該清除模式。

我認為您從手冊頁中指出了這一點:

當執行檔的所有者或組被非特權使用者更改時,S_ISUID 和 S_ISGID 模式位將被清除。

那為什麼他們現在被清除了。您會看到它們僅在可執行文件的情況下被清除。因為當設置其中一位(SUID/SGID)時,非特權使用者可以作為文件的新所有者執行文件。那將是一個巨大的安全漏洞。

我認為您誤讀了man 2 chown不必清除S_ISUIDand S_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().

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