如何制作一个通过 Web 服务器接受命令的 Linux 服务?
-
13-09-2019 - |
题
我需要一个应用程序在我的 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
补充:不是setuid位的,我想使用sudo系统弗兰克的建议(在评论)是更好的。
。其他提示
所以,你这里有三部分:
- 您的网络服务器没有 root 权限
- 一个应用程序
- 正在监视应用程序的守护进程
您的问题不是启动守护进程,而是编写守护进程并从 Web 服务器与其通信,而无需 root 权限。
守护进程可以像在后台启动的非交互式应用程序一样简单:
# my_dameon &
我不是 php 开发人员,但是搜索消息队列和 php,我发现 豆茎
查看第一页上的示例,您似乎可以使用它来执行以下操作:
- apache/php 向 beanstalkd 发送一些消息
- 您的守护进程从 beanstalkd 读取消息。根据命令,它启动或终止或重新加载后台应用程序。
您可以创建一个接受以下命令的守护程序:
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
您可以创建你需要的服务