2016-08-06 4 views
-1
$lol = system("sudo gpg --clearsign asd.txt;"); 

私はgpgのパスワードが必要なのですか?なぜこのコードを使用してファイルにデジタル署名を使用できないのですか?

sudoersファイル:

ルートALL =(ALL)NOPASSWD:ALL

アパッチALL =(ALL)NOPASSWD:ALL

WWWデータALL =(ALL)NOPASSWD:ALL

+2

ようこそスタックオーバーフロー。あなたの投稿したコードを実行している間に遭遇したエラーメッセージは、常にシステム固有のものであるため、必ず提供してください。 – technico

+0

コマンドの戻り値は2です。CENTOS –

+0

を使用しました。このコマンドを次のように変更しました:$ lol = shell_exec( "echo $ passphrase | sudo gpg --passphrase-fd 0 --clearsign asd.txt"); –

答えて

0

この場合、sudoはパスワードを要求するので使用できません。 sudoersを使用すると、パスワードの必要を避けることができます。いくつかの選択されたコマンドに対してのみ、セキュリティのために一部のユーザーを選択するためにのみ使用できます。

ここにいくつかのサンプルdocumentationがあります。お使いのOSを探してください。

他の問題がこの背後に隠れる可能性があるため、発生した可能性があるエラーを提供してください(Apacheとbashの両方のエラーログを参照)。

編集:あなたのケースでは 、あなたがパスを要求しなくてsudoedしたいコマンドが「GPG --clearsign」 ある

実際には、このコマンドを起動するユーザーは、「WWWデータ」です、 apacheではなく、あなたのsudoersを更新してください。これはうまくいくでしょう。

Edit2: PHPの動作をシミュレートしましょう。 PHP(実際にはApache、www-データユーザー)はsudoコマンドを実行する必要があります。 bashでこれをやりましょう:

su www-data 
sudo gpg --clearsign asd.txt; 

新しいことがありますか? ルートパスワードが尋ねられましたか?

0

別のパスワード関連の問題が、GPG側でこの時間:ファイルを復号化する際

GPGプロンプトで、パスワードを要求されます。

我々は、プロンプトでパスを入力することはできませんPHPのように、私たちはこの引数を指定して、コマンドにこのパスを送信する必要があります。

--passphrase 12345 

だからあなたのコマンドが正しいパスで、なるものもちろん:

$lol = system("sudo gpg --passphrase 12345 --clearsign asd.txt;"); 
関連する問題