Evince başlatılamıyor çünkü okuyamıyor.


10

Uzaktan Ubuntu 10.04 (lucid) çalıştıran bir makineye yönlendirme ile SSH üzerinden uzaktan oturum açtım. Çoğu X11 uygulaması (örn. Xterm, gnome-terminal) iyi çalışır. Ama Evince başlamıyor. ~/.XauthorityDosya var olmasına rağmen okunamıyor gibi görünüyor ve açıkça okunabilir (doğru izinlere sahip ve diğer uygulamalar dosyayı iyi okuyor).

$ 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'nin okuyamayacağı kadar özel olan nedir ~/.Xauthority? Nasıl başlatabilirim?

Yanıtlar:


12

TL, DR: Apparmor'un hatası ve ana dizinimin dışarıda olması nedeniyle /home.

Ubuntu 10.04'ün varsayılan yüklemesi altında, apparmor paket ubuntu standart paketinin dolaylı Tavsiye düzeyi bağımlılığı olarak alınır . Sistem günlükleri ( /var/log/syslog), Apparmor'un Evince'nin okuma girişimini reddettiğini gösterir ~/.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) için varsayılan Evince yapılandırması çok izin vericidir : tüm ev dizinleri altında keyfi okuma ve yazma işlemlerine izin verir. Ancak, bu makinedeki ana dizinim, varsayılan AppArmor yapılandırmasında listelenmeyen standart olmayan bir konuma sembolik bir bağlantıdır. Erişime izin verilir /home, ancak giriş dizinimin gerçek konumu izin verildiğinden /elsewhere/home/gilleserişim reddedildi.

Bu sorundan etkilenebilecek diğer uygulamalar şunlardır:

  • Firefox, ancak profili varsayılan olarak devre dışı (sembolik bir bağlantının varlığıyla /etc/apparmor.d/disable/usr.bin.firefox -> /etc/apparmor.d/usr.bin.firefox).
  • CUPS PDF yazdırma; Test etmedim, ancak yazmanın başarısız olmasını bekliyorum ~/PDF.

Benim düzeltmem /etc/apparmor.d/tunables/home.d/localsatırı düzenlemek ve eklemekti

@{HOMEDIRS}+=/elsewhere/home/

giriş dizinlerinin standart dışı konumunun tanınmasını sağlamak için (finalin /önemli olduğunu unutmayın ; yorumlara bakın /etc/apparmor.d/tunables/home.d/ubuntu), ardından /etc/init.d/apparmor reloadApparmor ayarlarını güncellemek için çalıştırın .

Yönetici ayrıcalıklarınız yoksa ve sistem yöneticisi yanıt vermiyorsa, evinceikili dosyayı aşağıdaki gibi farklı bir konuma kopyalayabilirsiniz ~/binve Apparmor politikası kapsamında olmayacaktır (bu nedenle başlatabilirsiniz, ancak Apparmor'un sağladığı çok sınırlı ekstra güvenlik sağlanmayacaktır).

Bu sorun # 447292 Ubuntu hatası olarak bildirildi . Çözünürlük, bazı kullanıcıların giriş dizinlerini /etc/passwddışarıda listelendikleri halde ele alır /home, ancak benimki gibi /home/gillessembolik bir bağ olduğu durumlar için geçerli değildir .


Teşekkür ederim. Ubuntu 16.04'te ilgili dosya '/etc/apparmor.d/tunables/home.d/ubuntu' şeklindedir ve manuel olarak düzenlemek yerine aşağıdakilerin çalıştırılması önerilir: 'sudo dpkg-reconfigure apparmor' ( ev konumlarını ekleme fırsatı)
arr_sea

2

Aynı sorun vardı ve cevabınız bana doğru yönü gösterdi. Görünür yapılandırmayı düzenlemeyi gerektirmeyen farklı bir çözüm buldum. Erişimi yeniden yönlendirmek için bir sembolik bağlantı /homekullanmak yerine açık bindseçeneğini kullanın mount. Aşağıdaki satırı ekledim /etc/fstab:

/elsewhere/home /home none bind

Bunu yaptıktan sonra, apparmor altındaki dizinlerin /homebaşka bir yerde "gerçekten" bulunduğunu bile bilmeyecektir , bu yüzden şikayetler gider.

Bu yaklaşımın avantajı, her biri için farklı bir apparmor yapılandırma dosyasını düzenlemek zorunda kalmadan tüm uygulamalar için çalışmasıdır.


1
Benim durumumda bu geçerli olmazdı: altında ev dizinleri /homeve altında olmayan diğerleri vardı /home. Bu durumda mahsus bir değişken bağlama monte etmektir /elsewhere/home/gillesiçin /home/gilles, ya /elsewhere/homehiç /home/elsewhere.
Gilles 'SO- kötü olmayı bırak'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.