我在 Ubuntu 上使用 Apache 2.4。我用 C 语言编写了一个模块,并使用 Apache 扩展工具 (apxs) 将它集成到 Apache 服务器中。在我的代码的某些部分,我使用 exec 函数调用可执行文件,但我想以 super 用户身份调用该可执行文件。所以我想以 super 用户权限运行我的模块,但默认情况下 Apache 以 www-data 用户身份运行并要求输入 www-data 的密码。
有什么方法可以使用 super 用户权限运行这个模块吗?
否则有没有其他方法可以在 Apache 模块中以 C 语言运行 root 命令?
是否可以为此使用 suExec 模块?
最佳答案
不,不可能在与 Apache 服务器本身不同的用户下运行 Apache 模块。但是有几种策略可以解决该限制。
1) 您可以在要从 Apache 运行的可执行文件上设置“setuid bit”,如下所示:
chown root:root executable
chmod 06755 executable
然后,当您从 Apache 模块运行此可执行文件(例如,使用 fork
+ exec
或使用 system
)时,可执行文件将从 root 用户下运行,具有 root 权限。
2) 您可以配置 /etc/sudoers以允许 www-data 在 sudo 命令的帮助下以 root 权限运行相关可执行文件的方式文件。
3) 您可以让一个单独的进程以 root 权限运行,并使用任何类型的 IPC/RPC 从 Apache 模块接收命令。
请注意,您应该尽可能避免使用 root 权限,因为在 root 下运行您的代码可能会带来安全风险。当然,除非您绝对确定您的代码不会有任何错误。
关于c - 如何以 super 用户权限运行 Apache 模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36389138/