Evince 無法啟動,因為它無法讀取 .Xauthority

Evince 無法啟動,因為它無法讀取 .Xauthority

我透過 SSH 遠端登錄,並使用 X 轉發到運行 Ubuntu 10.04 的電腦(清晰)。大多數 X11 應用程式(例如 xterm、gnome-terminal)都可以正常運作。但埃文斯並沒有開始。它似乎無法讀取~/.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/passwdexternal中列出的情況/home,但不處理像我這樣的情況,其中/home/gilles是符號連結。

答案2

有同樣的問題,你的回答為我指明了正確的方向。我找到了一個不同的解決方案,不需要編輯 apparmor 配置。不要使用符號連結將存取重定向到/home,而是使用bind上的選項mount。我新增了以下行/etc/fstab

/elsewhere/home /home none bind

一旦你這樣做了,apparmor 甚至不會知道下面的目錄/home「真正」位於其他地方,所以抱怨就會消失。

這種方法的優點是它適用於所有應用程序,而無需為每個應用程式編輯不同的 apparmor 設定檔。

相關內容