我想知道为什么我的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)
答案 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以确定您可以执行的操作。