我正在读关于维基百科上的 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
。此外,维基百科上的示例中提到的默认使用(/usr/bin/passwd
)实际上具有4755
权限。
这个例子是否正确,我是否遗漏了什么,或者这是一个错误?
答案1
你是对的,维基百科的文章是错误的。请参阅下面的示例:
$ 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:
$