繁体   English   中英

在c中重新加载linux服务

[英]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等相同的日志

这里有几件事需要检查:

  1. 确保已编译的程序具有suid root(即程序的所有者是root)。
  2. 确保您正在执行程序的分区没有“noexec”选项。

您需要是root才能成功运行/usr/sbin/service命令。

所以你的问题是你的应用程序如何获得root权限。

如果你的应用程序是你(合法地)不希望提供root访问权限的CGI,你可以编写一个setuid root的包装器程序,它只能从你的CGI运行(或者至少从你的CGI运行)它正在运行)。

但你确定你真的想从CGI运行这样的东西吗? (您可以研究webmin的工作原理)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM