为什么 setuid 不能与 mount 一起使用?

为什么 setuid 不能与 mount 一起使用?

有一个设定值文件上的位。

user@host:~$ ls -l /bin/mount
-rwsr-xr-x 1 root root 40152 May 26 19:31 /bin/mount

为什么操作系统需要 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

我的/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

答案1

Unix 有一个概念真实的有效的UID(以及与此相关的 GID)。

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

所以在这种情况下mount你有一个有效的身份证号root。但你还有一个真实的的 ID user

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

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

例如在我的 Debian 中fstab我有:

/dev/sr0        /media/cdrom0   udf,iso9660 user,noauto     0       0

这意味着非 root 用户可以运行mount /dev/sr0mount /media/cdrom0并将尝试安装 CD/DVD。

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

相关内容