0

私はphpページを持っています。

これは、php ページから渡された変数をチェックする検証 bash スクリプトを呼び出します。

次に、root ユーザーで実行する必要がある別の bash スクリプトを呼び出します。ここのガイドに従いましたroot ユーザーの下で PHP から bash スクリプトを実行する方法ですが、スクリプトを 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スクリプトを実行でき、ルート権限が必要なポイントまで問題なく実行できます...スクリプトが機能していることを知っており、ターミナルからスクリプトを実行すると、必要に応じて完全に実行されます。tmp/BASH2log.txt に出力

sudo: no tty present and noaskpass program specified
4

3 に答える 3

2

この質問はphp exec() の sudo に似ており、結論には達していません。

あなたの場合、この方法で実行する必要がある bash スクリプトは 1 つだけなので、代わりにsetuid を使用することを検討してください。

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

: 一部の Linux ディストリビューションでは、セキュリティ上の理由から、デフォルトでシェル スクリプトの setuid が無効になっています。

更新:現在一般的に使用されている Linux ディストリビューションでは、シェル スクリプトで setuid を許可していないようです。以前は Perl が例外でしたが、suid-perl は非推奨になりました。

このメソッドを使用して bash スクリプトを実行する唯一の方法は、コンパイル済みのバイナリから呼び出すことです。これを行う方法については、C コードの例を参照してください。

于 2013-08-08T22:17:25.653 に答える
2

私は最近、PHP が実際の Bash シェルを取得して対話できるようにするプロジェクトを公開しました。root で簡単にシェルを取得できます。ここから入手してください: https://github.com/merlinthemagic/MTS

ダウンロードしたら、次のコードを使用するだけです。

$shell    = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true);

$strCmd = "/usr/sbin/CoinCreationBashFile ".$coinName." ".$coinNameAbreviation." ".$blockReward." ".$blockSpacing." ".$targetTimespan." ".$totalCoins." ".$firstAddyBit." ".$seedNode." ".$nameSeedNode." ".$headline." ".$blocksPerDay." ".$startingDifficulty." >> /tmp/BASH2log.txt 2>&1 &";
$return1  = $shell->exeCmd($strCmd);

//if there is any return from the script you can wait for the return
//or you can trigger like you have it now and get no return.
于 2016-05-20T09:29:25.470 に答える
1

visudo エントリにタイプミスがあります。NOPASSWD に R はありません。そのはず:

www-data ALL=NOPASSWD /usr/sbin/CoinCreationBashFile
于 2013-08-08T22:11:59.457 に答える