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


10

我通过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?我如何开始?

Answers:


12

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的默认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 Bug#447292。该解决方案可以处理某些用户具有其/etc/passwd外部目录中列出的主目录的/home情况,但不适用于诸如我/home/gilles的符号链接所在的情况。


谢谢。在Ubuntu 16.04中,相关文件为'/etc/apparmor.d/tunables/home.d/ubuntu',建议不要手动编辑,而是运行:'sudo dpkg-reconfigure apparmor'(它将为您提供)机会添加家庭位置)
arr_sea

2

遇到了同样的问题,您的回答为我指明了正确的方向。我找到了另一种解决方案,不需要编辑apparmor配置。不用使用符号链接将访问重定向到/home,而是使用bindon上的选项mount。我将以下行添加到/etc/fstab

/elsewhere/home /home none bind

一旦您执行了此操作,apparmor甚至不会知道其下/home的目录“确实”位于其他位置,因此投诉将消失。

这种方法的优点是,它将适用于所有应用程序,而不必为每个应用程序编辑不同的apparmor配置文件。


1
在我的情况下,这是不适用的:下有home目录,/home而其他目录不在下/home。一种用于这种情况下的变体是结合贴装/elsewhere/home/gilles/home/gilles,或/elsewhere/home/home/elsewhere
吉尔斯(Gilles)'所以
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.