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
。
诸如passwd
or 或su
or 之类的程序mount
可以检查真实 ID 以查看谁在运行它并相应地采取不同的行动。为此passwd
,root
用户可以更改他人的密码;因为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/sr0
或mount /media/cdrom0
尝试挂载 CD/DVD。
这是mount
程序本身内置的逻辑;它检查呼叫者的真实 ID。