如何运行 Apache模块具有超级用户权限?

How to run Apache module with superuser privileges?

我在 Ubuntu 上使用 Apache 2.4。我用 C 语言编写了一个模块,并使用 Apache 扩展工具 (apxs) 将它集成到 Apache 服务器中。在我的代码的某些部分,我使用 exec 函数调用可执行文件,但我想以超级用户身份调用该可执行文件。所以我想 运行 我的模块具有超级用户权限,但默认情况下 Apache 运行 宁作为 www-data 用户并要求输入 www-data 的密码。

有什么方法可以运行这个模块使用超级用户权限吗?

否则还有其他方法可以在 Apache 模块中用 C 语言 运行 root 命令吗?

是否可以为此使用 suExec 模块?

不,不可能 运行 Apache 模块在与 Apache 服务器本身不同的用户下。但是有几种策略可以解决该限制。

1) 您可以在要从 Apache 运行 的可执行文件上设置“setuid bit”,如下所示:

chown root:root executable
chmod 06755 executable

然后,当您从 Apache 模块 运行 这个可执行文件(例如,fork + execsystem)时,可执行文件将 运行 来自 root 用户,具有 root 权限。

2) 您可以配置 /etc/sudoers 文件,允许 www-data 在 sudo 命令的帮助下 运行 具有 root 权限的可执行文件。

3) 您可以拥有一个单独的进程 运行 root 权限并使用任何类型的 IPC/RPC.

从 Apache 模块接收命令

请注意,您应该尽可能避免使用 root 权限,因为 运行将您的代码置于 root 下可能会带来安全风险。当然,除非您绝对确定您的代码不会有任何错误。