Evince no se inicia porque no puede leer .Xauthority

10

He iniciado sesión de forma remota a través de SSH con X reenviando a una máquina que ejecuta Ubuntu 10.04 (lúcido). La mayoría de las aplicaciones X11 (por ejemplo, xterm, gnome-terminal) funcionan bien. Pero Evince no comienza. Parece incapaz de leer ~/.Xauthority, aunque el archivo existe, y es evidentemente legible (tiene los permisos correctos y otras aplicaciones lo leen bien).

$ 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

¿Qué tiene de especial Evince que no puede leer ~/.Xauthority? ¿Cómo puedo hacer que comience?

Gilles 'SO- deja de ser malvado'
fuente

Respuestas:

12

TL, DR: es culpa de Apparmor, y debido a que mi directorio de inicio está fuera /home.

En una instalación predeterminada de Ubuntu 10.04, el paquete apparmor se incorpora como una dependencia indirecta de nivel de recomendación del paquete ubuntu-standard . Los registros del sistema ( /var/log/syslog) muestran que Apparmor está rechazando el intento de Evince de leer ~/.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"

La configuración predeterminada de Evince para Apparmor (in /etc/apparmor.d/usr.bin.evince) es muy permisiva: permite lecturas y escrituras arbitrarias en todos los directorios de inicio. Sin embargo, mi directorio de inicio en esta máquina es un enlace simbólico a una ubicación no estándar que no figura en la configuración predeterminada de AppArmor. El acceso está permitido debajo /home, pero la ubicación real de mi directorio de inicio es /elsewhere/home/gilles, por lo que el acceso es denegado.

Otras aplicaciones que podrían verse afectadas por este problema incluyen:

  • Firefox, pero su perfil está deshabilitado de forma predeterminada (por la presencia de un enlace simbólico /etc/apparmor.d/disable/usr.bin.firefox -> /etc/apparmor.d/usr.bin.firefox).
  • TAZAS de impresión de PDF; No lo he probado, pero espero que no pueda escribir ~/PDF.

Mi solución fue editar /etc/apparmor.d/tunables/home.d/localy agregar la línea

@{HOMEDIRS}+=/elsewhere/home/

para que se reconozca la ubicación no estándar de los directorios de inicio (tenga en cuenta que la final /es importante; vea los comentarios en /etc/apparmor.d/tunables/home.d/ubuntu), luego ejecute /etc/init.d/apparmor reloadpara actualizar la configuración de Apparmor.

Si no tiene privilegios de administrador y el administrador del sistema no responde, puede copiar el evincebinario en una ubicación diferente, por ejemplo ~/bin, y no estará cubierto por la política de Apparmor (por lo que podrá iniciarlo, pero no se le otorgará la seguridad adicional muy limitada que proporciona Apparmor).

Este problema se ha informado como error de Ubuntu # 447292 . La resolución maneja el caso cuando algunos usuarios tienen su directorio de inicio como aparece en el /etc/passwdexterior /home, pero no casos como el mío donde /home/gilleshay un enlace simbólico.

Gilles 'SO- deja de ser malvado'
fuente
Gracias. En Ubuntu 16.04, el archivo relevante es '/etc/apparmor.d/tunables/home.d/ubuntu' y se recomienda que en lugar de editarlo manualmente, se ejecute: 'sudo dpkg-reconfigure apparmor' (que le dará la oportunidad de agregar ubicaciones de casas)
arr_sea
2

Tuve el mismo problema, y ​​su respuesta me señaló en la dirección correcta. Encontré una solución diferente que no requiere editar la configuración de apparmor. En lugar de usar un enlace simbólico para redirigir el acceso /home, use la bindopción activado mount. Agregué la siguiente línea a /etc/fstab:

/elsewhere/home /home none bind

Una vez que haga esto, apparmor ni siquiera sabrá que los directorios debajo /homeestán "realmente" ubicados en otro lugar, por lo que las quejas desaparecerán.

La ventaja de este enfoque es que funcionará para todas las aplicaciones, sin tener que editar un archivo de configuración de apparmor diferente para cada una.

Dan Menes
fuente
1
Eso no habría sido aplicable en mi caso: había directorios de inicio debajo /homey otros no debajo /home. Una variante para este caso es unir-montar /elsewhere/home/gillesa /home/gilles, o /elsewhere/homea /home/elsewhere.
Gilles 'SO- deja de ser malvado'