• ベストアンサー

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) 以上、よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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 は、然るべきディレクトリにしてください。

_hat_
質問者

お礼

教えていただいた方法で試してみたところ、うまくいきました。 ありがとうございました!!!!

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

セキュリティに気をつける必要がありますが、 コマンドラインでsudoをかますか、suEXECを使うとよいでしょう。 suEXECは以前大きな致命的なバグがちょこちょこあったので 嫌気がさし、私はもっぱらsudo派です。

_hat_
質問者

お礼

こちらも教えていただいた方法で試してみたところ、うまくいきました。 (ただHOME変数の設定をgpgの実行ユーザーのHOME変数と同じにしないといけませんでした) ありがとうございました!!!!

回答No.1

コマンドライン実行したユーザと、apacheユーザは同一ですか? 同一でないならば、apacheユーザにはkeyringが無いとか、暗号化対象のファイルへのアクセス権限が無い、などが考えられますが。

_hat_
質問者

お礼

ご回答、大変ありがとうございました。 コマンドラインで実行・成功したユーザーと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関数で実行した場合も同じエラーに なっていると思われます。

_hat_
質問者

補足

すみません、大変厚かましいご相談なのですがapacheユーザーでも gpgを成功させるには、何が必要なのでしょうか。 もしお分かりになるようでしたら、ご教示いただければ幸いです。

関連するQ&A