Evince 无法启动,因为它无法读取 .Xauthority

Gil*_*il' 11 ubuntu permissions apparmor xauth evince

我通过 SSH 远程登录,X 转发到运行 Ubuntu 10.04 (lucid) 的机器。大多数 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
Run Code Online (Sandbox Code Playgroud)

Evince 有什么特别之处以至于它无法阅读~/.Xauthority?我怎样才能让它开始?

Gil*_*il' 13

TL,DR:这是 Apparmor 的错,并且由于我的主目录在/home.

在 Ubuntu 10.04 的默认安装下,apparmor包作为ubuntu-standard包的间接推荐级别依赖项被拉入。系统日志 ( /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/
Run Code Online (Sandbox Code Playgroud)

识别主目录的非标准位置(注意最后一个/很重要;请参阅 中的注释/etc/apparmor.d/tunables/home.d/ubuntu),然后运行/etc/init.d/apparmor reload以更新 Apparmor 设置。

如果您没有管理员权限并且系统管理员没有响应,您可以将evince二进制文件复制到其他位置,例如~/bin,它不会被 Apparmor 策略覆盖(因此您将能够启动它,但是将不会获得 Apparmor 提供的非常有限的额外安全性)。

此问题已报告为Ubuntu 错误 #447292。该解决方案处理某些用户将其主目录列在/etc/passwdexternal 中的情况/home,但不处理诸如我的 where/home/gilles是符号链接之类的情况。