维基百科的 setuid 示例:4700

维基百科的 setuid 示例:4700

我正在读关于维基百科上的 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: 
$ 

相关内容