【发布时间】:2018-02-02 02:21:21
【问题描述】:
我正在编写一个 C/C++ 程序,它需要能够以普通用户身份挂载磁盘(不能使用sudo 运行)。通常,此类问题与在 shell 中使用 mount 命令有关,答案是使用与相关磁盘对应的 /etc/fstab 条目中的“用户”选项。但是,我认为在程序中使用 mount 系统调用时,/etc/fstab 中的列表根本不重要。
但是,由于很明显mount 命令能够允许非root 用户挂载磁盘(假设/etc/fstab 设置正确),并且推测该挂载命令调用mount 系统调用,那我觉得应该可以实现我想要的。
如何在不使用sudo 运行程序的情况下成功调用mount() 系统调用?
【问题讨论】:
-
mount之所以能做到,是因为mount是一个setuid 根程序。您的“C/C++ 程序”必须以 root 权限执行。从技术上讲,作为 Linux man pages specifies,需要CAP_SYS_ADMIN权限。普通用户进程无法挂载文件系统。 -
没有C/C++语言,有C就有C++。
-
但是因为
mount是一个setuid根程序,你可以直接运行,不用 sudo,只要/etc/fstab设置正确,就可以了你想要什么。 -
@Pablo 虽然有很多 C/C++ 程序,但使用的就是这个短语。
标签: c++ c linux permissions mount