1

私はphp-fpmでlighttpdを実行しています。nopasswd sudoer として http ユーザーを sudoers に追加しました。次のスクリプトがあります。

<?php
    echo shell_exec("sudo sh -c 'echo \"wtf3\" > /etc/openvpn/auth.txt'");
?>

私がするとき、それはうまくいきます:

sudo -u http php testsudo.php

しかし、ブラウザから実行すると失敗します。

shell_exec("whoami");

ブラウザで http ユーザーであることを確認します。

何を与える?

4

1 に答える 1

0

コマンドを実行するシェル スクリプトを作成することは問題外でしょうか?

#!/bin/sh
sudo whoami

PHPで:

$retVal = `/path/to/custom/script/myscript.sh &2>1`;
if ($retVal) echo 'SWEET';
else echo 'POOP: ' . $retVal;

{command}shell_exec('{command}')inside `` は、Linux サーバーと同じ意味です。私がここから離れていなければ、あなたの目標は VPN にユーザーを追加することです (特に)。この場合、ユーザー名/パスワードなどのコマンドライン パラメーターをカスタム シェル スクリプトに渡すことができます。

shell_exec()それはあなたの質問に対する純粋な答えではありませんが、 myscript.shsudo を実行せずに実行できるかもしれません。これは、試したすべてがシェルで機能し、パスが で設定されたが、PHP スクリプトでは設定されecho $PATHなかったと言ったという事実に基づいています。sudo echo $PATH何らかの理由で、sudo は php では問題であるが、シェルでは問題ではないように思われるので、sudo をシェルに戻して試してみましょう。

于 2013-07-06T04:13:37.523 に答える