我想在c和cgi代码中重启linux服务,如apache、bind、proftpd等。
我使用 system() 来做到这一点,例如:
system ("service httpd reload");
我还在编译的程序上设置 suid 并运行它。但不工作并返回权限错误。
我该怎么办?
编辑: 我的 Apache 记录错误:
[Wed Dec 21 21:07:13 2011] [error] [client *] cannot remove `/var/run/httpd.pid'
[Wed Dec 21 21:07:13 2011] [error] [client *] : Permission denied
[Wed Dec 21 21:07:13 2011] [error] [client *]
[Wed Dec 21 21:07:13 2011] [error] [client *] touch:
[Wed Dec 21 21:07:13 2011] [error] [client *] cannot touch `/var/lock/subsys/httpd'
[Wed Dec 21 21:07:13 2011] [error] [client *] : Permission denied
以及 named、proftpd 等的相同日志
最佳答案
这里有几件事情要检查:
- 确保编译后的程序有suid root(即程序的属主是root)。
- 确保您正在从中执行程序的分区没有安装“noexec”选项。
关于c - 在c中重新加载linux服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8591595/