Evince gagal memulai karena tidak dapat membaca .Xauthority


10

Saya login jauh dari SSH dengan penerusan X ke mesin yang menjalankan Ubuntu 10.04 (jelas). Sebagian besar aplikasi X11 (mis. Xterm, gnome-terminal) berfungsi dengan baik. Tapi Evince tidak memulai. Tampaknya tidak dapat membaca ~/.Xauthority, meskipun file itu ada, dan jelas dapat dibaca (memiliki izin yang tepat dan aplikasi lain membacanya dengan baik).

$ 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

Apa yang istimewa dari Evince sehingga tidak bisa membaca ~/.Xauthority? Bagaimana saya bisa memulainya?

Jawaban:


12

TL, DR: ini salah Apparmor, dan karena direktori home saya berada di luar /home.

Di bawah instalasi default Ubuntu 10.04, paket apparmor ditarik sebagai dependensi tingkat Rekomendasi tidak langsung dari paket standar ubuntu . Log sistem ( /var/log/syslog) menunjukkan bahwa Apparmor menolak upaya Evince untuk membaca ~/.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"

Konfigurasi Evince default untuk Apparmor (dalam /etc/apparmor.d/usr.bin.evince) sangat permisif: ini memungkinkan membaca dan menulis sewenang-wenang di semua direktori home. Namun, direktori rumah saya di mesin ini adalah tautan simbolis ke lokasi non-standar yang tidak tercantum dalam konfigurasi AppArmor default. Akses diizinkan di bawah /home, tetapi lokasi sebenarnya dari direktori home saya adalah /elsewhere/home/gilles, jadi akses ditolak.

Aplikasi lain yang mungkin terpengaruh oleh masalah ini termasuk:

  • Firefox, tetapi profilnya dinonaktifkan secara default (dengan adanya tautan simbolik /etc/apparmor.d/disable/usr.bin.firefox -> /etc/apparmor.d/usr.bin.firefox).
  • Pencetakan PDF CUPS; Saya belum menguji, tapi saya berharap gagal menulis ~/PDF.

Perbaikan saya adalah mengedit /etc/apparmor.d/tunables/home.d/localdan menambahkan baris

@{HOMEDIRS}+=/elsewhere/home/

untuk mengetahui lokasi direktori home yang tidak standar (perhatikan bahwa final /itu penting; lihat komentar di /etc/apparmor.d/tunables/home.d/ubuntu), kemudian jalankan /etc/init.d/apparmor reloaduntuk memperbarui pengaturan Apparmor.

Jika Anda tidak memiliki hak administrator dan administrator sistem tidak responsif, Anda dapat menyalin evincebiner ke lokasi yang berbeda seperti ~/bin, dan itu tidak akan dicakup oleh kebijakan Apparmor (sehingga Anda dapat memulainya, tetapi tidak akan diberikan keamanan ekstra yang sangat terbatas yang disediakan Apparmor).

Masalah ini telah dilaporkan sebagai bug Ubuntu # 447292 . Resolusi menangani case ketika beberapa pengguna memiliki direktori home mereka seperti yang tercantum di /etc/passwdluar /home, tetapi bukan case seperti milik saya yang /home/gillesmerupakan tautan simbolik.


Terima kasih. Di Ubuntu 16.04, file yang relevan adalah '/etc/apparmor.d/tunables/home.d/ubuntu' dan direkomendasikan bahwa alih-alih mengeditnya secara manual, file berjalan: 'sudo dpkg-reconfigure apparmor' (yang akan memberi Anda kesempatan untuk menambahkan lokasi rumah)
arr_sea

2

Punya masalah yang sama, dan jawaban Anda menunjuk saya ke arah yang benar. Saya menemukan solusi berbeda yang tidak memerlukan pengeditan konfigurasi apparmor. Alih-alih menggunakan symlink untuk mengarahkan kembali akses /home, gunakan bindopsi aktif mount. Saya menambahkan baris berikut ke /etc/fstab:

/elsewhere/home /home none bind

Setelah Anda melakukan ini, apparmor bahkan tidak akan tahu bahwa direktori di bawah /home"benar-benar" terletak di tempat lain, sehingga keluhannya akan hilang.

Keuntungan dari pendekatan ini adalah ia akan bekerja untuk semua aplikasi, tanpa harus mengedit file konfigurasi apparmor yang berbeda untuk masing-masing aplikasi.


1
Itu tidak akan berlaku dalam kasus saya: ada direktori home di bawah /homedan yang lain tidak di bawah /home. Varian untuk kasus ini adalah bind-mount /elsewhere/home/gilleske /home/gilles, atau /elsewhere/homeke /home/elsewhere.
Gilles 'SANGAT berhenti menjadi jahat'
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.