Функція 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? Як я можу змусити його почати?

Відповіді:


12

TL, DR: це вина Apparmor, і через те, що мій домашній каталог знаходиться зовні /home.

Під встановленням Ubuntu 10.04 за замовчуванням пакет apparmor втягується як непряма Рекомендована залежність рівня стандартного пакету 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"

Конфігурація Evince за замовчуванням для Apparmor (in /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).
  • Друк PDF на CUPS; Я не проходив тестування, але очікую, що це не вдасться написати ~/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/passwdзовні /home, але не такі випадки, як, наприклад, моя, де /home/gillesсимволічне посилання.


Дякую. У Ubuntu 16.04 відповідним файлом є "/etc/apparmor.d/tunables/home.d/ubuntu", і рекомендується замість того, щоб редагувати його вручну, запускати: "sudo dpkg-recfigure apparmor" (що дасть вам можливість додати домашні локації)
arr_sea

2

Була така ж проблема, і ваша відповідь спрямовувала мене в правильному напрямку. Я знайшов інше рішення, яке не потребує редагування конфігурації apparmor. Замість використання символьного посилання для переадресації доступу /homeскористайтеся bindопцією увімкнено mount. Я додав наступний рядок до /etc/fstab:

/elsewhere/home /home none bind

Як тільки ви це зробите, apparmor навіть не дізнається, що каталоги в розділі /home"дійсно" розташовані десь в іншому місці, тому скарги відійдуть.

Перевага такого підходу полягає в тому, що він працюватиме для всіх додатків, не редагуючи для кожного файлу конфігурацію apparmor.


1
Це не було б застосовано в моєму випадку: були домашні каталоги, /homeа інші - не /home. Варіант для цього випадку полягає в зв'язуванні монтажу /elsewhere/home/gillesв /home/gillesабо /elsewhere/homeна /home/elsewhere.
Жил "ТАК - перестань бути злим"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.