シナリオは次のとおりです。 GnuPGを使用して2つのWebサーバー間のデータを暗号化します。 RHELでは1つです。 GnuPGはcgiスクリプトアクセスを介して暗号化と復号化を実行します。したがって、Apacheユーザーがアクセスできるキーリングが必要です。 Red Hatではこれが難しいことが判明しましたが、Ubuntuでは簡単に設定できました。私が試したことは次のとおりです。たぶん、誰かがこれを達成するより良い/簡単な方法を持っているかもしれません。
Apacheユーザーになりました
su -s /bin/bash apache
走っている間
gpg --gen-key
/var/wwwに.gnupgディレクトリを作成できなかったため、ディレクトリを作成し、所有者をapache.apacheに設定しました。これでキーを生成すると
can't connect to `/var/www/.gnupg/S.gpg-agent': No such file or directory
gpg-agent[26949]: command get_passphrase failed: Operation cancelled
gpg: cancelled by user
gpg: Key generation canceled.
それで、いくつかのマニュアルページ(そしてインターネット検索)を読んだ後、このファイルを作成しました。
mknod -m 700 S.gpg-agent p
今は理解
can't connect to `/var/www/.gnupg/S.gpg-agent': Connection refused
gpg-agent[26949]: command get_passphrase failed: Operation cancelled
gpg: cancelled by user
gpg: Key generation canceled.
私はよく知らない領域に入っていたので、それ以来どこにも行くことができませんでした。私はこれがbash設定ファイルなどを持っているので、実際にはユーザーではなくApacheに関連していると仮定します。では、どこから始めるべきですか?
答え1
これはデバイスファイル権限の問題かもしれません。pinentry
継承されたファイル記述子を使用する代わりに、渡されたTTYに直接アクセスしようとしましたが、機能しませんでした。
tty
シェルで実行して結果ls -l /dev/pts/1
を見ると、apache
アクセスできないことがわかります。
また、実行することができます
strace -o gpg.strace -f -e trace=open gpg --gen-key
そして、次のようなものを見つけることもできます
open("/dev/pts/1", O_RDONLY) = -1 EACCES (Permission denied)
危険な解決策は、(一時的に)コンソールapache
へのroot
アクセスを許可することです...(chown apache /dev/pts/1
)。より良い解決策は実際のログインをすることですapache
。
これはキー生成にのみ影響します。他のユーザーとしてキーペアを作成、エクスポートし、アカウントにインポートすることもできますapache
。
答え2
新しいユーザーを作成し、sudoを使用してコマンドを呼び出しましたか?これがいくつかの権限の問題かもしれないと心配している場合は、/ var / wwwでgpgユーザーがアクセスできることが知られている場所(/tmpディレクトリなど)にエージェントノードを削除する方が簡単です。環境変数 GPG_AGENT_INFO を変更して、エージェント・ノードの場所を手動で指定できます。
答え3
私はこれがこのバグに対する回帰だと思います。https://rhn.redhat.com/errata/RHBA-2011-1096.html
正誤表から:
このアップデートは次のバグを修正します。
- このアップデート以前は、pinentry-cursesユーティリティを使用してパスワードを入力する際に問題がありました。 pinentry-cursesが現在ttyを所有しているユーザー以外のユーザーとして実行されている場合は、パスワード入力ダイアログボックスの代わりにエラーメッセージが表示されました。このバグは今回のアップデートで修正されたので、エラーメッセージは表示されなくなり、pinentry-cursesは期待どおりにパスワードを要求します。 (BZ#677665)
問題は、suまたはsudoを実行すると、ttyがまだttyの元の所有者によって所有され、pinentryが破損することです。
昨日は、root以外のユーザーとしてCent 6システムでgpgキーを生成できなかったことを指摘したいと思います。キーを生成するには、rootとしてログインしてキーを生成し、.gpgディレクトリをユーザーのホームディレクトリにコピーして、所有権を変更する必要があります。