【发布时间】:2017-08-23 01:45:38
【问题描述】:
我构建了一个 PHP 应用程序,在其中为 Linux debian Jessie 创建命令行功能。一切正常,但我需要能够使用一些命令,如 root 用户。
有没有办法使用 shell_exec() 或类似的命令通过 PHP 像 root 用户一样访问?
这个命令行的想法是让有权访问该服务器的人可以从任何地方或设备通过互联网处理它。
这是控制台的图像:
【问题讨论】:
我构建了一个 PHP 应用程序,在其中为 Linux debian Jessie 创建命令行功能。一切正常,但我需要能够使用一些命令,如 root 用户。
有没有办法使用 shell_exec() 或类似的命令通过 PHP 像 root 用户一样访问?
这个命令行的想法是让有权访问该服务器的人可以从任何地方或设备通过互联网处理它。
这是控制台的图像:
【问题讨论】:
编辑您的 sudoers 文件
sudo vi /etc/sudoers
放这条线
www-data ALL=(ALL) NOPASSWD: ALL
www-data 是linux中的php默认用户(必要时替换)
使用
$output = shell_exec('sudo XXXX');
【讨论】:
通过 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 并设置了路径
【讨论】:
sudo 用户并且该命令在服务器上不起作用。只有管理员使用自己的su 访问权限。