$lol = system("sudo gpg --clearsign asd.txt;");
私はgpgのパスワードが必要なのですか?なぜこのコードを使用してファイルにデジタル署名を使用できないのですか?
sudoersファイル:
ルートALL =(ALL)NOPASSWD:ALL
アパッチALL =(ALL)NOPASSWD:ALL
WWWデータALL =(ALL)NOPASSWD:ALL
$lol = system("sudo gpg --clearsign asd.txt;");
私はgpgのパスワードが必要なのですか?なぜこのコードを使用してファイルにデジタル署名を使用できないのですか?
sudoersファイル:
ルートALL =(ALL)NOPASSWD:ALL
アパッチALL =(ALL)NOPASSWD:ALL
WWWデータALL =(ALL)NOPASSWD:ALL
この場合、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;
新しいことがありますか? ルートパスワードが尋ねられましたか?
別のパスワード関連の問題が、GPG側でこの時間:ファイルを復号化する際
GPGプロンプトで、パスワードを要求されます。
我々は、プロンプトでパスを入力することはできませんPHPのように、私たちはこの引数を指定して、コマンドにこのパスを送信する必要があります。
--passphrase 12345
だからあなたのコマンドが正しいパスで、なるものもちろん:
$lol = system("sudo gpg --passphrase 12345 --clearsign asd.txt;");
ようこそスタックオーバーフロー。あなたの投稿したコードを実行している間に遭遇したエラーメッセージは、常にシステム固有のものであるため、必ず提供してください。 – technico
コマンドの戻り値は2です。CENTOS –
を使用しました。このコマンドを次のように変更しました:$ lol = shell_exec( "echo $ passphrase | sudo gpg --passphrase-fd 0 --clearsign asd.txt"); –