0

SOAP WebService に送信されるデータを暗号化するために GPG を使用するプロジェクトを展開しようとしています。ファイルを暗号化しようとしたときに、Apache が実行されているユーザーが書き込みできないpython-gnupgロック ファイルをディレクトリに配置しようとしていることがわかりました。gnupghome「誰も」に書き込みアクセスを許可したくないので、ロックファイルを保存するために python-gnupg が使用する場所を変更する方法はありますか?

明確化:オブジェクトを初期化するときに 現在設定していることを明確にしていない可能性があると指摘されましたがgnupghome、ロック ファイルをそこに配置したくありません。その場所への書き込みアクセス。

4

3 に答える 3

3

ロック ファイルは、Python ラッパーではなく gnupg によって作成され、常に GNUPGHOME パスに作成され、デフォルトは~/.gnupghome.

ロックファイルを防ぐことはできませんが、ディレクトリを一時ディレクトリに設定することはできます。欠点は、デフォルトのキーリングをロードできないため、GNUPG にデフォルト ファイルを無視するように明示的に渡す必要があることです (そうしないと、激しく文句を言うでしょう)。

import tempfile
import shutil

home = tempfile.mkdtemp()
try:
    gpg = gnupg.GPG(gnupghome=home, keyring='/path/to/keyring/file',
        options=['--no-default-keyring'])
finally:
    shutil.rmtree(home)

実際、私はキーリングにも一時ファイルを使用しています。関数を使用してtempfile.mkstemp()上記で生成された一時ディレクトリに空のファイルを作成し、(データベースから取得した) キーをそのキーリングにインポートし (を使用.import_keys())、インポートしたキーを使用して暗号化を行い、一時的なホーム全体をクリーンアップします。

于 2012-09-21T17:26:41.603 に答える
0

Python-GnuPG Getting Startedgnupghomeは、次のように設定できることを示しています。

gpg = gnupg.GPG(gnupghome='/path/to/home/directory')
于 2012-09-21T17:17:37.213 に答える
0

python-gnupgバージョン 0.3.1 以降を使用していてoptionsパラメーターがある場合は、必要なキーリングが読み取り可能であれば、このソリューションを使用できます。

>>> g = gnupg.GPG(gnupghome='/path/to/gnupghome', options=['--lock-never'])

私はこれを、検証中のユーザーが への書き込み権限をまったく持っていないシナリオで使用していgnupghomeます。pubring.gpgtrustdb.gpg

>>> v = g.verify(open('message.gpg', 'r').read())
>>> v.valid
True
于 2012-11-14T16:42:43.137 に答える