为什么 setuid 不适用于 mount?

Rep*_*tet 4 linux setuid mount

文件中有一个setuid位。

user@host:~$ ls -l /bin/mount
-rwsr-xr-x 1 root root 40152 May 26 19:31 /bin/mount
Run Code Online (Sandbox Code Playgroud)

为什么操作系统需要 root 访问权限才能执行“挂载”?

user@host:~$ /bin/mount /dev/sdb1 /mnt
mount: only root can do that
user@host:~$ sudo /bin/mount /dev/sdb1 /mnt
user@host:~$ lsblk  | grep sdb

sdb      8:16   0  102M  0 disk
??sdb1   8:17   0  101M  0 part /mnt
Run Code Online (Sandbox Code Playgroud)

我的 /etc/fstab

# / was on /dev/sda1 during installation
UUID=026bb2d9-1c0c-4163-85a1-f83b2221eb34 /               ext4    errors=remount-ro 0       1

# swap was on /dev/sda5 during installation
UUID=aec6b039-13b1-4568-abb1-2be1f3429325 none            swap    sw              0       0
Run Code Online (Sandbox Code Playgroud)

Ste*_*ris 11

Unix有这个概念真正的有效的UID(并为此事的GID)。

当您运行 setuid 程序时,进程的有效ID 将设置为文件的所有者。

因此,如果mount您的有效ID 为root. 但是你仍然有一个真实的ID user

诸如passwdor 或suor 之类的程序mount可以检查真实 ID 以查看谁在运行它并相应地采取不同的行动。为此passwdroot用户可以更改他人的密码;因为su它允许在不知道密码的情况下切换用户。

因为mount它允许用户挂载他们自己的文件系统,如果它们被定义/etc/fstab 具有user与之关联的属性

例如,在我的 Debian 中,fstab我有:

/dev/sr0        /media/cdrom0   udf,iso9660 user,noauto     0       0
Run Code Online (Sandbox Code Playgroud)

这意味着非 root 用户可以运行mount /dev/sr0mount /media/cdrom0尝试挂载 CD/DVD。

这是mount程序本身内置的逻辑;它检查呼叫者的真实 ID。