通过PHP用sudo执行命令

时间:2016-06-07 18:23:29

标签: php sudo

我在/etc/init.d/中有脚本用于控制游戏服务器,我想构建一个简单的Web界面来调用这些脚本。我的sudoers文件包含类似

的内容
www-data ALL=(ALL) NOPASSWD: /etc/init.d/starbound start stop

当我在PHP中执行sudo /etc/init.d/starbound start时,没有任何反应。我错过了什么吗?尝试访问我的PHP用户不允许访问的路径通常至少会给我相应的警告。

2 个答案:

答案 0 :(得分:1)

使用sudo要求您在运行命令时输入密码。通过使用sudo运行exec(),您无法向sudo提供密码,并且无法以root级别权限运行该命令。

Ubuntu.SE provides a way to pass the password to sudo in a single command,但是当使用PHP实现时结果有点混乱,因为Password:提示将在调用时发送到STDOUT,但是可以通过将输出发送到{来沉默{1}}。命令的结果仍然可以像您期望的那样存储在变量中。

/dev/null

答案 1 :(得分:0)

似乎问题出在sudoers文件中。如果我删除了start stop,它就可以了。

所以正确的sudoers看起来像这样:

Cmnd_Alias GAMES = /etc/init.d/ark_thecenter start, \
                   /etc/init.d/ark_thecenter stop, \
                   /etc/init.d/ark_theisland start, \
                   /etc/init.d/ark_theisland stop, \
                   /etc/init.d/starbound start, \
                   /etc/init.d/starbound stop

www-data ALL=(ALL) NOPASSWD: GAMES