我在/etc/init.d/
中有脚本用于控制游戏服务器,我想构建一个简单的Web界面来调用这些脚本。我的sudoers文件包含类似
www-data ALL=(ALL) NOPASSWD: /etc/init.d/starbound start stop
当我在PHP中执行sudo /etc/init.d/starbound start
时,没有任何反应。我错过了什么吗?尝试访问我的PHP用户不允许访问的路径通常至少会给我相应的警告。
答案 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