Ubuntu

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

  • October 4, 2016

我通過 SSH 遠端登錄,X 轉發到執行 Ubuntu 10.04 (lucid) 的機器。大多數 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?我怎樣才能讓它開始?

TL,DR:這是 Apparmor 的錯,並且由於我的主目錄在外部/home

在 Ubuntu 10.04 的預設安裝下,apparmor包作為ubuntu-standard包的間接 Recommends 級依賴項被引入。系統日誌 ( /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 (in /etc/apparmor.d/usr.bin.evince) 的預設 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符號連結。

引用自:https://unix.stackexchange.com/questions/42385