2012-05-02 4 views
1

私はいくつかのシェルスクリプトを使用するPHPフロントエンドを書いています。しかし、問題は、特定のユーザーとして非常に特定のディレクトリ(アクセス可能だがwww-データ所有ではない)でスクリプトを呼び出さなければならないことです。特定のディレクトリにあるPHPの別のユーザとしてシェルスクリプトを呼び出す

$command = './myscript.py 2>&1 | tee /tmp/outputfile.txt';  // set the command 
$cwd = 'cd /home/secondUser/myscript';        // set current working directory 
$wrapper = 'echo "Password" | sudo -u secondUser bash -c';  // add extra wrappers 
$fullCommand = $cwd.';'.$wrapper.' "'.$command.'"';    // combine subcommands 
$output = system($fullCommand); 

私は別の実行コマンド(shell_exec、exec ...)を試していました。しかし、私が見つけるすべての時間は、ログにエラー以下:

sudo: no tty present and no askpass program specified 

問題は、(例えば、編集sudoersファイルによって)シェルスクリプトを実行することではなく、特定のRUSERとしてそれを実行するだけではありません。

これを行うためのヒントやヒントはありますか?

+0

情報のスクリプト?誰かがウェブサイトからあなたのマシンに直接sudoすることができて、私には安全ではないと想像してください... –

答えて

0

1)##見出し##これはPHPに関連するものではありませんが、UNIXに関連しているため、他のスタックエクスチェンジサーバーに移動する必要があります。

また、あなたが言及しているログ行は、問題の内容を正確に伝えています。 Sudoはスクリプトからパスワードを渡すことを許可しません。ローカルエコーをオフにできるように、ターミナル(tty)が必要です(パスワードで入力した文字は使用できません)。それをsudoersファイルで上書きすることができます。しかし、SSHを使って別のユーザーとしてログインするために秘密パスワードなしのキーを使うか、パスワードなしでコマンドを "sudo"できるようにすれば、完全に違った方法で解決するべきでしょう。どちらも、ここで言及されています

2)彼らはすでにで、この問題を解決:あなただけの特定のディレクトリに情報を削除し、cronジョブを経由して、それを収集し、cronであなたの特定を実行しないのはなぜ https://serverfault.com/questions/160524/using-su-inside-of-a-shell-script

+0

あなたのヒントをいただきありがとうございます。私は同じエラーを受け取りましたが、sudoのヘルプが返されます。 – user1192062

+0

あなたは正確に何をしようとしなかったのですか? – kuba

関連する問題