从php页面以root身份运行bash脚本

时间:2013-08-08 21:55:38

标签: bash sudo chmod chown

我有一个php页面。

它调用一个验证bash脚本来检查从php页面传递的变量。

然后我调用另一个我需要在root用户下执行的bash脚本。我已按照此处的指南How to run from PHP a bash script under root user仍然无法让脚本以root身份执行。

我有以下内容:

php页面

$bashFile = shell_exec('./Validation.sh "'.$coinName.'" "'.$coinNameAbreviation.'" "'.$blockReward.'" "'.$blockSpacing.'" "'.$targetTimespan.'" "'.$totalCoins.'" "'.$firstBitAddy.'" "'.$seedNode.'" "'.$seedName.'" "'.$headline.'" ');
echo "<pre>$bashFile</pre>";

验证文件:

sudo nohup /bin/bash /usr/sbin/CoinCreationBashFile "$coinName" "$coinNameAbreviation" "$blockReward" "$blockSpacing" "$targetTimespan" "$totalCoins" "$firstAddyBit" "$seedNode" "$nameSeedNode" "$headline" "$blocksPerDay" "$startingDifficulty" >> /tmp/BASH2log.txt 2>&1 &

我添加了

www-data ALL=NOPASSWD /usr/sbin/CoinCreationBashFile

到sudo visudo的结尾

并做了:

chown root:root /usr/sbin/CoinCreationBashFile
chmod 755 /usr/sbin/CoinCreationBashFile

从usr / sbin运行它来自http://ubuntuforums.org/showthread.php?t=1848069的建议 谁能看到我做错了什么?非常感谢 编辑:我可以在没有sudo命令的情况下运行CoinCreationBashFile脚本,并且它运行正常,它需要root priv ...我知道脚本工作,并且从终端执行脚本运行完全按需要。输出在tmp / BASH2log.txt

sudo: no tty present and noaskpass program specified

3 个答案:

答案 0 :(得分:2)

这个问题类似于sudo in php exec(),但他们没有得出结论。

在您的情况下,由于只需要以这种方式执行一个bash脚本,而是考虑using setuid

$ su
[enter password]
chown root:root something.sh
chmod 4755 something.sh
exit

注意:出于安全原因,默认情况下,某些Linux发行版会禁用shell脚本的setuid。

更新:显然是no commonly used Linux distribution today allows setuid on shell scripts。 Perl曾经是例外,但是suid-perl is now deprecated

使用此方法执行bash脚本的唯一方法是从已编译的二进制文件中调用它。有关如何执行此操作,请参阅the example with the C code

答案 1 :(得分:2)

我最近发布了一个允许PHP获取真实Bash shell并与之交互的项目,您可以轻松地获取带有root的shell。在此处获取:https://github.com/merlinthemagic/MTS

下载后,您只需使用以下代码:

SetFile

答案 2 :(得分:1)

你有一个错误的visudo入口。 NOPASSWD中没有R.它应该是:

www-data ALL=NOPASSWD /usr/sbin/CoinCreationBashFile