1

PHPを使用してpgp暗号化コマンドを「実行」したいと思います。コマンドラインに関係なく、エラー64(パーサーエラー)または162(エンコード中の完全な失敗)のいずれかが発生します。そこで、PHPプログラム内のコマンドラインをこの単純な指紋表示に減らしましたが、それでもエラーが発生します。

exec("/opt/pgp/bin/pgp --fingerprint", $results);

コマンドラインで「/opt/ pgp / bin / pgp--fingerprint」を実行すると、「2つのキーが見つかりました」と期待どおりの表示が得られます。しかし、PHPで同じexecを実行すると、パーサーエラー64が発生します。文字列コマンドに対して「\ n」を試しましたが、違いはありません。ユーザーは、pgpの実行権限を持つブラウザで「nobody」として実行されます。(pgpが少なくとも起動していなかった場合は、「パーサーエラー」も表示されません。)

PHPでpgpを実行するために特別なことをする必要がありますか?


データファイルを実際に暗号化する試みに戻りました。これは、pgpが作成する「status-file」出力です。「test.txt」を暗号化しようとしているファイルの「permissiondenied」の最後の行にエラーがはっきりと示されています。それは偽物です。私はそのファイルに全世界のr/wを付与しましたが、ステータスがコンテンツを暗号化したと言っているため、ファイルに明確にアクセスします。それで、本当に問題は、許可が拒否されているのは何ですか?

その他の情報:pgpを呼び出すこのPHPスクリプトに対してコマンドラインからPHPを実行すると、正常に機能します。ファイルは暗号化されます。また、PERLは、ブラウザーから呼び出されたときに同じコマンドを実行します(SYSTEM()を使用)。ただし、ブラウザを使用してこのPHPスクリプトを呼び出すと、失敗します。明らかに、「誰も」として実行されているいくつかの許可の問題があります。

/export/home/pgphome/.pgp/pubring.pkr:open keyrings(1006:public keyring)/export/home/pgphome/.pgp/secring.skr:open keyrings(1007:private keyring)0x221DC947:encrypt(1030:キーが受信者リストに追加されました)/export/home/eckankar/dev/www/info/test.txt:encrypt(3048:暗号AES-128で暗号化されたデータ)/ export / home / eckankar / dev / www / info/test。 txt:encrypt(3124:許可が拒否されました)

背景として、PHP exec()コマンドの引数があります。/opt/pgp/bin/pgp--encrypt /export/home/eckankar/dev/inc/test.txt --output / export / home / eckankar / dev /www/info/test.xxx -r membership --overwrite remove --home-dir /export/home/pgphome/.pgp -v --status-file /export/home/eckankar/dev/inc/test.txt .err

このコマンドのフォルダ/ディレクトリはすべて、「rwx」をワールドに付与しています。

ブラウザからではなくコマンドライン(/opt/csw/php5/bin/php test.php)から実行した場合と同様に、暗号化が成功した場合のステータス出力ファイルは次のようになります。

pgp:encrypt(3157:現在の現地時間2009-06-30T11:51:17-05:00)/export/home/pgphome/.pgp/pubring.pkr:open keyrings(1006:public keyring)/ export / home / pgphome / .pgp / secring.skr:open keyrings(1007:private keyring)0x221DC947:encrypt(1030:keyが受信者リストに追加されました)/export/home/eckankar/dev/inc/test.txt:encrypt(3048:data暗号化暗号AES-128を使用)/export/home/eckankar/dev/inc/test.txt:encrypt(0:出力ファイル/export/home/eckankar/dev/inc/test.txt.pgp)

4

3 に答える 3

1

答えは: コマンドラインで --temp-dir を指定する必要があります。

于 2009-06-30T23:17:26.767 に答える
0

このPHPスクリプトはどの実行コンテキストで実行されていますか?インタラクティブなコマンドライン、cronジョブ、Webサーバー(私は望んでいません)?

その答えによっては、PGPがこのスクリプトから実行するときに設定されていない、PGPが依存する環境変数を調べ始める場合があります。

于 2009-06-29T18:30:07.687 に答える
0

私はこれが古いことを知っていますが、私はそれに少し慣れました。(pgp 8.5)

Jim Thomas が言ったように、これはディレクトリのパーミッションの問題です。しかし、少なくともpgp 8.5では、私が見ることができる方法でtmpdirを設定することはできません.

私の解決策(疑似コード):

save cwd
chdir(/tmp/)
system()/exec() pgp command
chdir(saved_cwd)

pgp が強制的に tmp dir を cwd で作成するのは奇妙ですが、場所に影響を与えるフラグは見当たりませんでした。

于 2015-05-21T20:05:04.017 に答える