我想根据我管理LEMP/LAMP堆栈的经验,开发一个定制的linux主机控制面板。这只是个宠物项目。我想我遇到了一些障碍。
CP是由NginX在端口8000上作为默认服务器用PHP和服务器编写的。我不使用任何框架,只是普通的PHP。
在putty中,以root身份登录,我可以获得如下所示的系统uuid:
[root@localhost ~]# dmidecode -s system-uuid
997C4DE8-213B-4ACC-8E23-01E79D6CC12F当我用以下脚本在PHP中尝试时:
var_dump(shell_exec('dmidecode -s system-uuid 2>&1'));我得到以下信息:
sh: dmidecode:未找到命令
如何执行上面的命令,在PHP中获取输出?
Nginx/PHP作为用户nginx运行。是否需要将nginx用户添加到根组?
我希望能够从我的控制面板执行非常具体的命令,如:/etc/init.d/php-fpm restart (重新启动php网关)。
我怎样才能做到这一点?我有什么选择?如何控制面板如cPanel,DirectAdmin等.做吗?
更新
我也尝试过以下方法。安装了sudo,并使用了sudo visudo命令,并在末尾添加了以下行:
nginx ALL=(ALL) NOPASSWD:/path/to/php_shell.sh
Defaults:nginx !requirettyphp_shell.sh的内容如下:
#!/bin/bash
dmidecode -s system-uuid现在,我试图像这样执行它:
var_dump(shell_exec('sudo sh /path/to/php_shell.sh 2>&1'));我明白了:sudo: no tty present and no askpass program specified
发布于 2015-10-25 18:20:44
我已经修复了它,多亏了以下解决方案:https://stackoverflow.com/a/30284644/2332336
这就是我必须做的:
安装了sudo,并使用了sudo visudo命令,并在末尾添加了以下行:
nginx ALL=(ALL) NOPASSWD:/path/to/php_shell.sh,/bin/bash
Defaults:nginx !requirettyphp_shell.sh的内容如下:
#!/bin/bash
dmidecode -s system-uuid现在,我试图像这样执行它:
var_dump(shell_exec('sudo /bin/bash /path/to/php_shell.sh 2>&1'));我得到的输出:
string(36) "997C4DE8-213B-4ACC-8E23-01E79D6CC12F"既然这是可行的,我只需要知道这是否安全,因为我只执行一组特定的命令,如dmidecode -s system-uuid,而不接受用户输入。或者,我是否通过这样在nginx上添加visudo来打开某种安全漏洞?
https://stackoverflow.com/questions/33330478
复制相似问题