Linux
setgid 二進製文件沒有權限,掛載是對的,我遺漏了一些東西,但是什麼,拜託?
我已經檢查了手冊頁、掛載、權限……
(編輯:根據要求將歷史合併為一個序列。開始看起來不是一個簡單的問題。自上次編輯以來沒有什麼新東西,只是把所有漂亮的東西捆綁在一起)
~/sandbox/6$ editfunc doit ~/sandbox/6$ -x doit + doit + find . + cp /bin/ln /bin/id . + sudo chown jthill:jthill id ln + chmod g+s id ln + mkdir protected + chmod 770 protected + touch data + set +xv ~/sandbox/6$ ls -A data id ln protected ~/sandbox/6$ ls -Al total 92 -rw-r--r-- 1 jthill jthill 0 Nov 8 02:39 data -rwxr-sr-x 1 jthill jthill 31432 Nov 8 02:39 id -rwxr-sr-x 1 jthill jthill 56112 Nov 8 02:39 ln drwxrwx--- 2 jthill jthill 4096 Nov 8 02:39 protected ~/sandbox/6$ sudo su nobody [nobody@home 6]$ ./id uid=619(nobody) gid=617(nobody) egid=1000(jthill) groups=617(nobody) [nobody@home 6]$ ./ln ln protected ./ln: failed to create hard link ‘protected/ln’ => ‘ln’: Operation not permitted [nobody@home 6]$ ./ln data protected ./ln: failed to create hard link ‘protected/data’ => ‘data’: Operation not permitted [nobody@home 6]$ ln ln protected ln: failed to create hard link ‘protected/ln’ => ‘ln’: Permission denied [nobody@home 6]$ ln data protected ln: failed to create hard link ‘protected/data’ => ‘data’: Permission denied [nobody@home 6]$ exit ~/sandbox/6$
找到了:
如果
sysctl fs/protected_hardlinks
設置,非所有者(並且沒有 CAP_FOWNER)的硬連結必須是:
- 不特別
- 不是setuid
- 不可執行 setgid
- 可讀可寫
根據
fs/namei.c
. SO上的一些人想要一個人們可以添加但看不到的保管箱文件夾(我認為這是Windows功能),我認為這是setgid很好的少數幾個地方之一,並且smoketest將我帶到了這裡。感謝所有人,尤其是建議檢查原始碼的Anthon 。
(編輯:sysctl 拼寫)