我想在c和cgi代码中重新启动apache,bind,proftpd等linux服务。
我使用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运行的包装程序(或者至少从下面的uid它正在运行)。
但是你确定你确实想从CGI上运行这样的东西吗? (你可以学习webmin的工作方式)。