为什么挂载会忽略有效的用户ID

时间:2018-08-06 21:25:31

标签: linux

我想知道为什么我的mount版本似乎忽略了有效的用户ID ...

我的这个C程序由root拥有,并具有u + s许可:

int main() {
    execl("/bin/mount", "/bin/mount", "/mnt/abc", (char *)0);
}

当普通用户运行它时,它会抱怨自己不是root用户。我可以这样解决:

int main() {
    setuid(0);
    execl("/bin/mount", "/bin/mount", "/mnt/abc", (char *)0);
}

我读到bash作为安全功能将有效uid更改为实际uid。 (请参阅Calling a script from a setuid root C program - script does not run as root)但是,我不明白为什么mount应该这样做。有人知道吗?

我的安装版本是:

  

从util-linux 2.29.2挂载(libmount 2.29.2:selinux,btrfs,assert,debug)

1 个答案:

答案 0 :(得分:0)

之所以会这样,是因为mount被设计为以suid root身份运行。

$ ls -l /bin/mount
-rwsr-xr-x 1 root root 44200 Mar  6 13:31 /bin/mount
   ^

CD或软盘驱动器通常会在fstab中设置user选项,以允许非root用户访问可移动介质。 mount已成为SUID的根目录来支持此操作,因此它会检查真实的UID以确定您可以执行的操作。