Permissions

來自維基百科的 setuid 範例:4700

  • December 21, 2015

我在 Wikipedia 上閱讀有關setuid 的資訊。其中一個例子如下:

4700

“root”擁有的執行檔上的 SUID

名為“tails”的使用者嘗試執行該文件。文件所有者是“root”,並且所有者的權限是可執行的——因此文件以 root 身份執行。

如果沒有 SUID,使用者“tails”將無法執行該文件,因為不允許該文件上的組或其他人擁有任何權限。/usr/bin/passwd在二進製文件中可以看到它的預設用法。

我不明白這個。使用者“tails”怎麼能執行這個文件,因為他不是文件的所有者,並且組和其他權限不可用?

我試圖重新創建這個場景,並且確實:

$ su -c 'install -m 4700 /dev/null suidtest'
$ ls -l suidtest
-rws------ 1 root root 0 21 dec 07:48 suidtest*
$ ./suidtest
bash: ./suidtest: Permission denied

我只有使用4755. 此外,Wikipedia 上的範例中提到的預設用法(the /usr/bin/passwd)實際上具有4755權限。

該範例是否正確,我是否遺漏了什麼,或者這是一個錯誤?

你是對的,維基百科的文章是錯誤的。請參閱下面的範例:

$ ls -l /usr/bin/passwd 
-rwsr-xr-x. 1 root root 30768 Feb 22  2012 /usr/bin/passwd
$ sudo cp /usr/bin/passwd /tmp/
$ cd /tmp
$ ls -l passwd
-rwxr-xr-x 1 root root 30768 Dec 21 07:43 passwd
$ sudo chmod 4700 passwd
$ ls -l passwd
-rws------ 1 root root 30768 Dec 21 07:43 passwd
$ ./passwd
bash: ./passwd: Permission denied
$ sudo chmod 4701 passwd
$ ./passwd 
Changing password for user vagrant.
Changing password for vagrant.
(current) UNIX password: 
$ 

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