これがシナリオです。GnuPGを使用して2つのWebサーバー間でデータを暗号化しています。 1はRHELにあります。 GnuPGは、暗号化および復号化するためにcgiスクリプトを介してアクセスされます。したがって、Apacheユーザーがアクセスできるキーリングが必要です。これはRedHatで私にとって難しいことが証明されており、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.
それで、manページを少し読んだ後(そしてグーグルで)、そのファイルを作成しました
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は実際にはユーザーではないということと関係があると思います。では、ここからどこに行くのでしょうか。
新しいユーザーを作成し、代わりにSudoを使用してコマンドを呼び出してみましたか?これが何らかの権限の問題である可能性があり、より簡単な方法は、エージェントノードを/ var/wwwから、gpgユーザーがアクセスできることがわかっている場所(おそらく/ tmpディレクトリ)に削除することです。環境変数GPG_AGENT_INFOを変更して、エージェントノードの場所を手動で指定できます。
これはおそらくデバイスファイルのアクセス許可の問題です。 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
アカウントにインポートすることもできます。
このバグに関するリグレッションだと思います https://rhn.redhat.com/errata/RHBA-2011-1096.html
正誤表から:
このアップデートでは、次のバグが修正されています。
- この更新の前は、pinentry-cursesユーティリティを使用してパスワードを入力するときに問題がありました。現在のttyを所有しているユーザーとは異なるユーザーでpinentry-cursesが実行された場合、パスワード入力ダイアログの代わりにエラーメッセージが表示されました。このバグはこのアップデートで修正され、エラーメッセージが表示されず、pinentry-cursesが期待どおりにパスワードを要求するようになりました。 (BZ#677665)
問題は、suまたはSudoの場合、ttyがまだttyの元の所有者によって所有されているため、ピンエントリが爆発することです。
昨日、Cent6システムでroot以外のユーザーとしてgpgキーを作成できなかったことに注意します。キーを生成するには、rootとしてログインし、キーを作成し、.gpgディレクトリをユーザーのホームディレクトリにコピーして、所有権を変更する必要がありました。