Permissions

為什麼在使用 chmod 6110 執行 less 時“權限被拒絕”?

  • February 7, 2022

假設你是 user x,所以執行id給出

uid=1001(x) gid=1001(x) groups=1001(x)

還有一個y使用者

uid=1002(y) gid=1002(y) groups=1002(y)

現在我們在使用者的主目錄中root創建一個文件,如下所示:readme``x

# cd /home/x
# touch readme
# echo "hello" > readme
# chown root:y readme
# chmod 640 readme

我們製作一份less

# cd /home/x
# cp /usr/bin/less .
# chown y:x less
# chmod 6110 less

**由於 setuid 和 setgid,我希望使用者x能夠readme通過執行./less readme**來閱讀,但我收到“權限被拒絕”錯誤。為什麼?

這是我的邏輯,但可能有問題。

chmod 6110授予所有者 ( y) 和組成員( )執行權x。由於使用者x屬於組x,他可以執行less。然後 setuid 使有效 UID 與 相同y,而 setgid 使有效 GID 與所有者的組相同,再次y。並且由於readme’s group is yless應該具有讀取權限。

錯誤就在這裡:

setgid 再次使有效 GID 與所有者的組相同y

setgid 位使有效 gid 成為二進製文件所有者組的有效 gid,即x此處 ( chmod y:x less)。

less最終以對應於 ’s 的有效 uid 和對應於y’s 的有效 gid執行x。由於readme歸 擁有root:y,因此無法讀取。

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