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/passwd
outsideにリストされているホーム ディレクトリを持っているケースを処理しますが、がシンボリック リンクである/home
私のケースは処理しません。/home/gilles
答え2
私も同じ問題を抱えていましたが、あなたの回答が正しい方向を示してくれました。apparmor 設定を編集する必要のない別の解決策を見つけました。 へのアクセスをリダイレクトするためにシンボリックリンクを使用する代わりに/home
、bind
の オプションを使用しますmount
。 に次の行を追加しました/etc/fstab
:
/elsewhere/home /home none bind
これを実行すると、apparmor は、その下のディレクトリが「実際には」別の場所に配置されていることさえ認識しなくなる/home
ため、問題は解消されます。
このアプローチの利点は、アプリケーションごとに異なる apparmor 構成ファイルを編集する必要がなく、すべてのアプリケーションで機能することです。