使用PHP(Apache)以特定命令的root权限启动linux应用程序

使用PHP(Apache)以特定命令的root权限启动linux应用程序,php,linux,apache,node.js,Php,Linux,Apache,Node.js,我正在运行几个Node实例,它们都在不同的端口上运行 我需要一种方法,能够根据节点正在运行的端口(kill Node instance绑定到端口n)杀死节点的特定实例 从我的终端,我可以很容易地做一个“fuser-kxxxx/tcp”xxxx作为端口 问题是,那是因为我有权这么做。我的问题是:我希望能够有一个PHP文件来关闭在端口n上运行的节点实例,任何人都可以打开它。如何做到这一点而不打开巨大的安全漏洞 谢谢大家! 最好的方法是让php将端口号写入一个文件,然后让cron脚本以root用户(或

我正在运行几个Node实例,它们都在不同的端口上运行

我需要一种方法,能够根据节点正在运行的端口(kill Node instance绑定到端口n)杀死节点的特定实例

从我的终端,我可以很容易地做一个“fuser-kxxxx/tcp”xxxx作为端口

问题是,那是因为我有权这么做。我的问题是:我希望能够有一个PHP文件来关闭在端口n上运行的节点实例,任何人都可以打开它。如何做到这一点而不打开巨大的安全漏洞


谢谢大家!

最好的方法是让php将端口号写入一个文件,然后让cron脚本以root用户(或任何需要的用户)的身份运行,并从该文件中读取端口号。cron脚本中也应该有一些安全措施,比如不停止端口80上运行的任何东西,或者根本不停止节点进程


编辑:为了更安全一点,您可以要求端口号前面加一个需要您输入的“密码”。然后,CRON脚本将验证它是由该密码前缀(或者散列它,并比较散列会更好)

您可以考虑向服务器添加一个更多的端点,例如“代码>/Outlook < /Cord>”,这将调用<代码>进程(EXIT)(< /代码>);p> 结果是即时的,比使用一堆shell命令、跟踪PID等更容易实现


也很容易通过密码、签名请求等进行保护。

可以让php简单地执行一个执行此操作的外部二进制文件,或者生成二进制文件suid(坏主意),或者调用sudo提升此外部应用程序运行的外壳。您能告诉我为什么该实例需要ROOT权限吗?总是一个坏主意,最好是给某个用户足够的权限来完成该任务,并用该用户启动该节点……我在公司做过类似的事情来管理CRON作业。为了不让人们直接调用杀死另一个人的脚本。人们使用的界面只在数据库中设置一个标志,然后“收割者”或杀戮脚本就可以出现并杀掉它。这样,界面就可以位于完全不同的web服务器上。谢谢您的回复。John,这是因为“fuser”无法工作,除非用户具有必要的身份验证。这就是为什么我可以使用我的终端执行它,但是apache在运行任何人都可以启动的PHP脚本时不能执行它。Cillosis,谢谢!对不起,我对Linux不是很熟悉。您的接口在哪个数据库中更改标志?cron脚本每X秒运行一次?文件一经修改,cron作业能否立即运行?它必须几乎是实时的(绝对不到一分钟)。谢谢@rockamic好的,你可以让脚本每分钟运行一次,但是让脚本循环在15秒的睡眠中运行4次,这样它每15秒运行一次。事实上,你可能希望它在13秒的睡眠时间内运行4次,以防止脚本在下一次开始之前无法结束。谢谢Eric。由于我不是系统管理员,所以我最终要做的事情对我们来说太复杂了,因为这个程序将部署在一些机构中,这意味着会弄乱它们的内部配置,如下所示(感谢您的想法):在我要关闭的节点服务器内添加了一个间隔,定期查看其自己的目录中是否存在具有特定文件名的文件。如果是这样,它就退出了。该文件由PHP轻松创建,无需任何身份验证。好了,解决了,谢谢。我刚看到这个。今天早些时候我也做了类似的事情。我在要关闭的节点服务器中添加了一个间隔,定期查看自己的目录中是否存在具有特定文件名的文件。如果是这样,它就退出了。该文件由PHP轻松创建,无需任何身份验证。就这样,解决了。