通过php运行shell脚本(具有root权限)的最佳方式是什么?

通过php运行shell脚本(具有root权限)的最佳方式是什么?,php,bash,scripting,permissions,Php,Bash,Scripting,Permissions,我已经为服务器管理制作了一个简单的bash脚本,我不知道如何在php页面中安全地运行它:我想创建一个php管理页面,但我显然不想硬编码根密码。让我们举个例子(当然,这是一个foo脚本) 如果用户在/ 实际上,脚本添加了apache虚拟主机、ftp用户等等。。。 有什么想法吗? 谢谢使用 sudo /path/to/executable/file 并设置sudo,以便它可以作为root用户为当前用户执行以下命令 -这是sudoers手册,配置文件,您必须修改 zerkms ALL = (ALL)

我已经为服务器管理制作了一个简单的bash脚本,我不知道如何在php页面中安全地运行它:我想创建一个php管理页面,但我显然不想硬编码根密码。让我们举个例子(当然,这是一个foo脚本)

如果用户在/
实际上,脚本添加了apache虚拟主机、ftp用户等等。。。 有什么想法吗?
谢谢使用

sudo /path/to/executable/file
并设置
sudo
,以便它可以作为root用户为当前用户执行以下命令

-这是sudoers手册,配置文件,您必须修改

zerkms ALL = (ALL) NOPASSWD: /sbin/iptables -L FORWARD -n -v -x

这是我的
/etc/sudoers
中的示例。在这里,我允许以
root
身份运行命令
/sbin/iptables-L FORWARD-n-v-x
,而无需询问用户
zerkms

的密码。这听起来不像是您希望从可访问web的脚本调用的东西。我支持Jason的警告。除非脚本写得非常仔细,否则它很可能被用来做。。。想不到的东西。例如,您的示例脚本可以用于触摸/var/db/sudo中的密码验证文件,也可以触摸多个文件(因为
$1
使用时不带双引号,如果它包含空格,它将被视为
触摸的多个参数)。你的真实脚本可能要复杂得多,这意味着它可能会有更多的恶作剧机会。
zerkms ALL = (ALL) NOPASSWD: /sbin/iptables -L FORWARD -n -v -x