[英]Reload linux services in c
我想在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
和命名,proftpd等相同的日志
这里有几件事需要检查:
您需要是root才能成功运行/usr/sbin/service
命令。
所以你的问题是你的应用程序如何获得root权限。
如果你的应用程序是你(合法地)不希望提供root访问权限的CGI,你可以编写一个setuid root的包装器程序,它只能从你的CGI运行(或者至少从你的CGI运行)它正在运行)。
但你确定你真的想从CGI运行这样的东西吗? (您可以研究webmin的工作原理)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.