- ベストアンサー
PHPからexecを使ってGnuPGを実行できない
GnuPGをPHPからexec関数を使って実行しようとしていますが、exec関数がエラーになって GnuPGが実行されません。 ただしexec関数に渡すコマンドをコマンドラインから直接打ち込むと正常に実行されます。 具体的には $cmd = "/usr/local/bin/gpg --always-trust --batch --no-secmem-warning -e -a -r ユーザー名 ファイル名のフルパス"; $ret = exec( $cmd, $output, $ret_val ); ここで$retにFALSEが、$ret_valには2が返ってきます。 $cmdのコマンドをコマンドラインから実行すると正常に実行されます。 環境 Apache/1.3.27 (Unix) (Red-Hat/Linux) GnuGP 1.4.6 PHP Version 4.3.11(セーフモードはOff) 以上、よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>すみません、大変厚かましいご相談なのですがapacheユーザーでも >gpgを成功させるには、何が必要なのでしょうか。 とりあえず以下のようにするとうまくいきました(私の環境では)。 (1)XXXさんのpubringを、/tmpにコピー # mkdir /tmp/.gnupg # cp -pi ~XXX/.gnupg/pubring.gpg /tmp/.gnupg/ # chown -R apache:apache /tmp/.gnupg (2)PHPプログラム $cmd = "/usr/local/bin/gpg --homedir /tmp --keyring /tmp/.gnupg/pubring.gpg --always-trust --batch --no-secmem-warning -ea -r 'hoge' -o /tmp/test.asc /tmp/test"; $ret = exec( $cmd, $output, $ret_val ); うまくいかないようならば、$cmdの末尾に 2>&1 をつけて、var_dump($output); すれば、エラーの内容を知ることができます。 #上記の /tmp は、然るべきディレクトリにしてください。
その他の回答 (2)
- yambejp
- ベストアンサー率51% (3827/7415)
セキュリティに気をつける必要がありますが、 コマンドラインでsudoをかますか、suEXECを使うとよいでしょう。 suEXECは以前大きな致命的なバグがちょこちょこあったので 嫌気がさし、私はもっぱらsudo派です。
お礼
こちらも教えていただいた方法で試してみたところ、うまくいきました。 (ただHOME変数の設定をgpgの実行ユーザーのHOME変数と同じにしないといけませんでした) ありがとうございました!!!!
- fdsjaklfjas
- ベストアンサー率81% (96/118)
コマンドライン実行したユーザと、apacheユーザは同一ですか? 同一でないならば、apacheユーザにはkeyringが無いとか、暗号化対象のファイルへのアクセス権限が無い、などが考えられますが。
お礼
ご回答、大変ありがとうございました。 コマンドラインで実行・成功したユーザーとapacheユーザーは異なります。 暗号化対象ファイルへのアクセス権はapacheユーザーにはありますので keyringが無いということかも知れません。 ちなみに以下のGnuPG関係のファイルはパーミッションを変更しております。 chmod 666 trustdb.gpg chmod 604 secring.gpg chmod 604 random_seed chmod 644 pubring.gpg ですが、コマンドラインで実行・成功したユーザー以外のユーザーで コマンドラインから実行してみたところ、public key not found という エラーになりましたので、PHPからexec関数で実行した場合も同じエラーに なっていると思われます。
補足
すみません、大変厚かましいご相談なのですがapacheユーザーでも gpgを成功させるには、何が必要なのでしょうか。 もしお分かりになるようでしたら、ご教示いただければ幸いです。
お礼
教えていただいた方法で試してみたところ、うまくいきました。 ありがとうございました!!!!