我在Ubuntu上使用Apache 2.4。我用C语言编写了一个模块,并使用Apache Extension工具(apxs)将其集成到Apache服务器中。我的代码中有一部分我使用exec函数调用可执行文件,但我想将该可执行文件称为超级用户。所以我想以超级用户权限运行我的模块,但默认情况下,Apache作为www-data用户运行并要求输入www-data的密码。
有没有办法使用超级用户权限运行此模块?
否则在Apache模块中有没有其他方法在C中运行root命令?
是否可以使用suExec模块?
答案 0 :(得分:0)
不,不可能在与Apache服务器本身不同的用户下运行Apache模块。但是有几种策略可以解决这个限制。
1)您可以设置" setuid bit"在您要从Apache运行的可执行文件中,如下所示:
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下运行代码可能会带来安全风险。当然,除非您完全确定您的代码没有任何错误。