我有一个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
答案 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