linux – 为什么setuid不能与mount一起工作?
作者:互联网
文件上有一个setuid位.
user@host:~$ls -l /bin/mount
-rwsr-xr-x 1 root root 40152 May 26 19:31 /bin/mount
为什么操作系统需要root访问才能执行’mount’?
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
解决方法:
Unix具有真实有效的UID(以及GID)的概念.
运行setuid程序时,进程的有效ID将设置为文件的所有者.
因此,在mount的情况下,您具有root的有效ID.但您仍然拥有真实的用户ID.
诸如passwd或su或mount之类的程序可以检查真实ID以查看谁正在运行它并相应地采取不同的行动.对于passwd,这允许root用户更改另一个密码;因为它允许在不知道密码的情况下切换用户.
对于mount,它允许用户安装自己的文件系统(如果它们在/ etc / fstab中定义)并具有与之关联的用户属性
例如,在我的Debian fstab中,我有:
/dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0
这意味着非root用户可以运行mount / dev / sr0或mount / media / cdrom0,它将尝试安装CD / DVD.
这是安装程序本身内置的逻辑;它检查调用者的真实ID.
标签:setuid,linux,mount 来源: https://codeday.me/bug/20190814/1651442.html