首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP中的自定义Linux托管控制面板-以root用户身份运行命令

PHP中的自定义Linux托管控制面板-以root用户身份运行命令
EN

Stack Overflow用户
提问于 2015-10-25 13:55:28
回答 1查看 317关注 0票数 0

我想根据我管理LEMP/LAMP堆栈的经验,开发一个定制的linux主机控制面板。这只是个宠物项目。我想我遇到了一些障碍。

CP是由NginX在端口8000上作为默认服务器用PHP和服务器编写的。我不使用任何框架,只是普通的PHP。

在putty中,以root身份登录,我可以获得如下所示的系统uuid:

代码语言:javascript
运行
复制
[root@localhost ~]# dmidecode -s system-uuid
997C4DE8-213B-4ACC-8E23-01E79D6CC12F

当我用以下脚本在PHP中尝试时:

代码语言:javascript
运行
复制
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命令,并在末尾添加了以下行:

代码语言:javascript
运行
复制
nginx    ALL=(ALL)    NOPASSWD:/path/to/php_shell.sh
Defaults:nginx        !requiretty

php_shell.sh的内容如下:

代码语言:javascript
运行
复制
#!/bin/bash
dmidecode -s system-uuid

现在,我试图像这样执行它:

代码语言:javascript
运行
复制
var_dump(shell_exec('sudo sh /path/to/php_shell.sh 2>&1'));

我明白了:sudo: no tty present and no askpass program specified

EN

回答 1

Stack Overflow用户

发布于 2015-10-25 18:20:44

我已经修复了它,多亏了以下解决方案:https://stackoverflow.com/a/30284644/2332336

这就是我必须做的:

安装了sudo,并使用了sudo visudo命令,并在末尾添加了以下行:

代码语言:javascript
运行
复制
nginx    ALL=(ALL)    NOPASSWD:/path/to/php_shell.sh,/bin/bash
Defaults:nginx        !requiretty

php_shell.sh的内容如下:

代码语言:javascript
运行
复制
#!/bin/bash
dmidecode -s system-uuid

现在,我试图像这样执行它:

代码语言:javascript
运行
复制
var_dump(shell_exec('sudo /bin/bash /path/to/php_shell.sh 2>&1'));

我得到的输出:

代码语言:javascript
运行
复制
string(36) "997C4DE8-213B-4ACC-8E23-01E79D6CC12F"

既然这是可行的,我只需要知道这是否安全,因为我只执行一组特定的命令,如dmidecode -s system-uuid,而不接受用户输入。或者,我是否通过这样在nginx上添加visudo来打开某种安全漏洞?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33330478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档