Permissions為什麼在使用 chmod 6110 執行
為什麼在使用 chmod 6110 執行 less
時“權限被拒絕”?
假設你是 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 isy
,less
應該具有讀取權限。
錯誤就在這裡:
setgid 再次使有效 GID 與所有者的組相同
y
。setgid 位使有效 gid 成為二進製文件所有者組的有效 gid,即
x
此處 (chmod y:x less
)。
less
最終以對應於 ’s 的有效 uid 和對應於y
’s 的有效 gid執行x
。由於readme
歸 擁有root:y
,因此無法讀取。