Evince は .Xauthority を読み取れないため起動に失敗します

Evince は .Xauthority を読み取れないため起動に失敗します

Ubuntu 10.04 (lucid) を実行しているマシンに、X 転送を使用して SSH 経由でリモート ログインしています。ほとんどの X11 アプリケーション (xterm、gnome-terminal など) は正常に動作します。しかし、Evince は起動しません。~/.Xauthorityファイルが存在し、明らかに読み取り可能であるにもかかわらず (適切な権限があり、他のアプリケーションは問題なく読み取ることができる)、読み取ることができないようです。

$ evince
X11 connection rejected because of wrong authentication.
Cannot parse arguments: Cannot open display:
$ echo DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY
DISPLAY=localhost:10.0 XAUTHORITY=
$ strace evince
access("/home/gilles/.Xauthority", R_OK) = 0
open("/home/gilles/.Xauthority", O_RDONLY) = -1 EACCES (Permission denied)
$ ls -l ~/.Xauthority
-rw------- 1 gilles gilles 496 Jul  5 13:34 /home/gilles/.Xauthority

Evince が読み取れないのはなぜですか~/.Xauthority? どうすれば起動できますか?

答え1

TL、DR: これは Apparmor のせいで、ホーム ディレクトリが外部にあるためです/home

Ubuntu 10.04のデフォルトインストールでは、装甲パッケージは、間接的な推奨レベルの依存関係として取り込まれます。Ubuntu 標準パッケージ。システム ログ ( /var/log/syslog) は、Apparmor が Evince の読み取りを拒否していることを示しています~/.Xauthority

Jul 5 17:58:31 darkstar kernel: [15994724.481599] type=1503 audit(13415 03911.542:168): operation="open" pid=9806 parent=9805 profile="/usr/bin/evince" requested_mask="r::" denied_mask="r::" fsuid=1001 ouid=1001 name="/elsewhere/home/gilles/.Xauthority"

Apparmor のデフォルトの Evince 構成 ( /etc/apparmor.d/usr.bin.evince) は非常に寛容です。つまり、すべてのホーム ディレクトリで任意の読み取りと書き込みが許可されます。ただし、このマシンのホーム ディレクトリは、デフォルトの AppArmor 構成にリストされていない非標準の場所へのシンボリック リンクです。 ではアクセスが許可されています/homeが、ホーム ディレクトリの実際の場所は である/elsewhere/home/gillesため、アクセスは拒否されます。

この問題の影響を受ける可能性がある他のアプリケーションは次のとおりです。

  • Firefoxですが、そのプロファイルはデフォルトでは無効(シンボリックリンクの存在によって/etc/apparmor.d/disable/usr.bin.firefox -> /etc/apparmor.d/usr.bin.firefox)。
  • CUPS PDF 印刷。テストしていませんが、書き込みに失敗すると予想されます~/PDF

/etc/apparmor.d/tunables/home.d/local私の修正方法は、編集して行を追加することでした

@{HOMEDIRS}+=/elsewhere/home/

ホーム ディレクトリの非標準の場所を認識させるには (最後が/重要であることに注意してください。 のコメントを参照してください/etc/apparmor.d/tunables/home.d/ubuntu)、/etc/init.d/apparmor reloadを実行して Apparmor 設定を更新します。

管理者権限がなく、システム管理者が応答しない場合は、バイナリevinceを などの別の場所にコピーできます。その場合~/bin、そのバイナリは Apparmor ポリシーの対象にはなりません (したがって、起動することはできますが、Apparmor が提供する非常に限定された追加のセキュリティは提供されません)。

この問題は次のように報告されていますUbuntu バグ #447292この解決策は、一部のユーザーが/etc/passwdoutsideにリストされているホーム ディレクトリを持っているケースを処理しますが、がシンボリック リンクである/home私のケースは処理しません。/home/gilles

答え2

私も同じ問題を抱えていましたが、あなたの回答が正しい方向を示してくれました。apparmor 設定を編集する必要のない別の解決策を見つけました。 へのアクセスをリダイレクトするためにシンボリックリンクを使用する代わりに/homebindの オプションを使用しますmount。 に次の行を追加しました/etc/fstab:

/elsewhere/home /home none bind

これを実行すると、apparmor は、その下のディレクトリが「実際には」別の場所に配置されていることさえ認識しなくなる/homeため、問題は解消されます。

このアプローチの利点は、アプリケーションごとに異なる apparmor 構成ファイルを編集する必要がなく、すべてのアプリケーションで機能することです。

関連情報