有一个设定值文件上的位。
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
。
诸如passwd
或su
或 之类的程序mount
可以检查真实ID,看看是谁在运行它,并相应地采取不同的行动。因为passwd
这允许root
用户更改他人的密码;因为su
它允许在不知道密码的情况下切换用户。
为了mount
它允许用户挂载自己的文件系统如果它们被定义在/etc/fstab
和具有user
与它们相关的属性
例如在我的 Debian 中fstab
我有:
/dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0
这意味着非 root 用户可以运行mount /dev/sr0
或mount /media/cdrom0
并将尝试安装 CD/DVD。
这是mount
程序本身内置的逻辑;它会检查呼叫者的真实身份。