Linux

setgid 二進製文件沒有權限,掛載是對的,我遺漏了一些東西,但是什麼,拜託?

  • December 16, 2018

我已經檢查了手冊頁、掛載、權限……

(編輯:根據要求將歷史合併為一個序列。開始看起來不是一個簡單的問題。自上次編輯以來沒有什麼新東西,只是把所有漂亮的東西捆綁在一起)

~/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 拼寫)

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