繁体   English   中英

以非root用户身份调用mount()系统调用

[英]calling mount() system call as a non-root user

我正在编写一个C / C ++程序,该程序需要能够以普通用户身份挂载磁盘(不能与sudo运行)。 通常,此类问题与在shell中使用mount命令有关,答案是在/etc/fstab条目中使用与该磁盘相对应的“ user”选项。 但是,当在程序中使用mount系统调用时, /etc/fstab中的列表根本不重要。

但是,由于很明显mount命令能够允许非root用户装载磁盘(假设/etc/fstab设置正确),并且大概mount命令调用了mount系统调用,那么我认为应该是可能实现我想要的。

如何在不使用sudo运行程序的情况下成功调用mount()系统调用?

解决此难题的有效方法是将mount / umount调用打包到shell脚本中,向应用程序用户提供sudo权限,然后从应用程序中调用它,例如,使用system() 确保该脚本进行了足够的错误处理,并且可能记录了日志,并在您可以在调用应用程序中处理的错误或成功情况下返回了适当的退出代码。

/etc/sudoers.d/myApplication

<appUser> <host> = (root) NOPASSWD: /usr/local/bin/myMountScript.sh

在您的应用程序中:

const int result = system("sudo /usr/local/bin/myMountScript.sh <options>");
//Error handling on result follows below

另一种可能性是使用功能,如上面的注释中所述,然后将其设置为二进制文件,但这有点复杂,因此在此不做详细介绍。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM