以 root 用户身份运行 PHP shell_exec()

4
我正在开发一个PHP应用程序,在其中为Linux debian Jessie创建命令行功能。所有工作都很好,但我需要能够像root用户一样使用一些命令。

有没有办法使用shell_exec()或类似的命令通过PHP访问像root用户一样的权限?

这个命令行的想法是让那些有权访问该服务器的人可以从任何地方或设备上处理它。

这里是控制台的图像:

enter image description here

2个回答

4

通过PHP以root身份执行命令将使您自己暴露于各种恶意黑客攻击之下。

请查看“sudo”文档。

您应该能够将所有所需的命令设置为可"sudo"脚本。编写具有有限功能的特定脚本比公开底层的特权命令要好得多。

例如:

exec ('sudo getCurrentUser.sh')

首先,您需要将PHP正在使用的用户(大多数情况下是www-data)添加到sudo组中,以便运行,如果还未分配,请注意。

然后,在您的php文件中:
使用sudo -S,这样您就可以通过echo传递密码。
$exec = "echo your_passwd | /usr/bin/sudo -S your command";
exec($exec,$out,$rcode);

如果您在路径方面遇到问题,请使用

"bash -lc 'echo your_passwd | /usr/bin/sudo -S your command'"

所以你得到了一个新的bash,它像登录shell一样运行,并设置了路径。

太好了!我知道这会很开放,但这就是我们的目的,因为这个服务器是我们网站开发团队的本地公司服务器,他们都可以通过SSH客户端访问,但是通过这个AP,我将设置一些用户只能使用非root权限,而我们的团队领导将拥有完全控制台的权限。谢谢! - Ivijan Stefan Stipić
有一件事我忘了提,没有人是sudoer。我们没有设置sudo用户,那个命令在服务器上不起作用。只有管理员使用自己的su权限。 - Ivijan Stefan Stipić

4

编辑sudoers文件

sudo vi /etc/sudoers

将这行代码放置在

www-data ALL=(ALL) NOPASSWD: ALL

www-data是Linux中PHP的默认用户(如有必要,请更换)。

用法:

$output = shell_exec('sudo XXXX');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接