gpgで「ジョブがキャンセルされました」と報告します。

gpgで「ジョブがキャンセルされました」と報告します。

GPGを使用してファイルを暗号化しようとしています。私は初めてGPGを使います。 RHEL 7.4のバージョン2.0.22にインストールされます。

実行しようとするたびに、ユーザーが操作をキャンセルしたというエラーメッセージが表示されます。

sh-4.2$ gpg --output ~/test.gpg --symmetric --cipher-algo AES256 test.html
gpg: cancelled by user
gpg: error creating passphrase: Operation cancelled
gpg: symmetric encryption of `test.html' failed: Operation cancelled
sh-4.2$

~からこの回答私はこれがTTY権限のためである可能性があることを発見しました。

GnuPG は (例えば) パイプを介して標準入力からパスワードを読み取るのではなく、端末から直接パスワードを読み取ろうとします。これを行うには、ttyを直接開こうとします。残念ながら、ファイル権限が邪魔になります。 ttyデバイスはログインしたユーザーが所有します。したがって、このユーザーとルートのみがそれを開くことができます。 GnuPGはキャンセルしたとエラーを誤って報告しているようです(実際には権限が拒否されました)。

私のコンピュータでは、TTYはルートグループが所有しており、g+rwルートではありませんが、ルートグループにあります。

sh-4.2$ stat /dev/tty
  File: '/dev/tty'
  Size: 0               Blocks: 0          IO Block: 4096   character special file
Device: 100076h/1048694d        Inode: 221356338   Links: 1     Device type: 5,0
Access: (0666/crw-rw-rw-)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2018-05-17 14:08:51.809798450 +0100
Modify: 2018-05-17 14:08:51.809798450 +0100
Change: 2018-05-17 14:08:51.809798450 +0100
 Birth: -
sh-4.2$ id -g
0
sh-4.2$

だからこれは問題にならないようです。残念ながら、このコンピュータにrootアクセス権がないため、rootとして機能しているかどうかをテストすることはできません(コンピュータの起動時にrootとしてコマンドを実行するように要求できますが、デーモンなどは要求できません)。

ユーザーが操作をキャンセルしたと思われるので(完全に間違った内容です)、デバッグ方法がわかりません。

rootアクセス権がなくてもこの問題を解決できますか?ルートアクセスなしでGPGを使用できませんか?

答え1

私は、screen自宅でオフィスのコンピュータに接続し、以前にオフィスで開いていたセッションに接続すると、このようなことが起こります。

調査の結果、pinentryd-busソケットに接続できず、エラーが発生したことがわかりました。根本的な原因は、DBUS_SESSION_BUS_ADDRESS環境に変数が設定され、存在しないソケットを指すことです。私unset DBUS_SESSION_BUS_ADDRESSまたはdbus-launch gpg <arguments>それは素晴らしい作品です。

gpg-agentpinentryのGUI入力を強制的に使用して完全に無効にすることも便利ですpinentry-tty~/.gnupg/gpg-agent.conf1行を編集して追加しますpinentry-program /usr/bin/pinentry-tty

これが役に立つことを願っています。それとも、次回このようなことが起こり、解決策を忘れた場合、少なくとも私は直接答えを見つけるでしょう。 :)

関連情報