我需要一个应用程序在我的 Web 服务器后台运行,但我需要能够使用 root 权限启动/停止该应用程序。

为了做到这一点,我希望运行一个具有 root 权限的服务,以便它可以终止该应用程序,并在需要时再次启动它。

最后,我需要能够通过 Apache/PHP 向服务发送启动和终止命令,以便可以通过 Web 间接控制它。

如何创建 Linux 服务?
我如何以这种方式与 Linux 服务通信?

提前致谢!

有帮助吗?

解决方案

在你的PHP脚本使用exec命令调用外壳文件。外壳文件可以用“SETUSER”位设置,以便它将运行(与Web服务器的权限运行,而不是)作为其所有者。

当然,你需要非常小心 - 大量的测试,监控等

最后,认为关于服务运行的专用的用户,而不是根。例如,如Apache和大多数其他做得好的服务做的。

添加了:回复:运行在Linux中的服务。取决于你的Linux的味道。如果你想确保你的应用程序服务将自动重新启动,如果失败的话,再加上记录,结账Runit:

HTTPS: //web.archive.org/web/1/http://blogs.techrepublic%2ecom%2ecom/opensource/?p=202

http://smarden.org/runit

补充:不是setuid位的,我想使用sudo系统弗兰克的建议(在评论)是更好的。

其他提示

所以,你这里有三部分:

  • 您的网络服务器没有 root 权限
  • 一个应用程序
  • 正在监视应用程序的守护进程

您的问题不是启动守护进程,而是编写守护进程并从 Web 服务器与其通信,而无需 root 权限。

守护进程可以像在后台启动的非交互式应用程序一样简单:

# my_dameon &

我不是 php 开发人员,但是搜索消息队列和 php,我发现 豆茎
查看第一页上的示例,您似乎可以使用它来执行以下操作:

  • apache/php 向 beanstalkd 发送一些消息
  • 您的守护进程从 beanstalkd 读取消息。根据命令,它启动或终止或重新加载后台应用程序。

你可以用 php 编写你的守护进程,因为有 多种语言的客户端
您还可以检查 这个问题

您可以创建一个接受以下命令的守护程序:

  • daemon_name start
  • daemon_name stop
  • daemon_name restart
  • deamon_name reload

启动守护进程应该不难。刚刚执行 daemon_name start 从 PHP 脚本应该运行它。启动后,您可以将进程的PID写入锁定文件(以便稍后停止、重新启动或重新加载)。守护进程应该处理信号。

在 PHP 脚本中,您可以调用 daemon_name stop. 。这应该启动一个新的守护进程,它将检查锁定文件并获取正在运行的守护进程的 PID,并发送一个由正在运行的守护进程处理的信号。应删除/清除锁定文件,然后 stop 启动守护进程/进程可以退出。

我觉得你应该看看inetd,它可以被配置为运行各种服务,并以root身份运行。然后,你可以当root身份运行做你需要完成的任务写一个比较简单的程序,它本身不具有root权限的,但是。

至于你没有说是什么类型的服务的服务进行通信,但是假设你自己写它最常用的方法是通过Unix套接字或MMAP到comunicate。取决于你的需要真的。

噢,应该指出,目前已经有Linux系统的网络管理应用程序。 Webmin的是一个非常好的一个可配置,因为你需要让尽可能多或尽可能少的控制。

作为@shodanex表明,使用Beanstalkd将断开的行驶作为根命令线工人一个web的前端的好方法。它可以平凡设定为只在需要什么运行。

要运行工人,梨的System_Daemon 可以生成并运行一个守护进程运行的脚本,与开始/停止/重启。

在做这个是非常非常小心。不要使用从网络中exec命令提交的数据的任何用户。这可以让别人在你的机器上执行任意指令。

另外,我第二弗兰克使用sudo的规则,这样你就可以运行你所需要的权限,但没有别的特定命令。这将是更安全的方式。

当然具有

sudo apt-get install openbsd-inetd

您可以创建你需要的服务

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top