1

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

有没有办法使用超级用户权限运行这个模块?

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

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

4

1 回答 1

0

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

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

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 下运行代码可能会带来安全风险。当然,除非您绝对确定您的代码不会有任何错误。

于 2016-04-26T17:53:23.590 回答