Evince ล้มเหลวในการเริ่มต้นเนื่องจากไม่สามารถอ่าน. Xauthority


10

ฉันลงชื่อเข้าใช้ SSH จากระยะไกลด้วยการส่งต่อ X ไปยังเครื่องที่ใช้ Ubuntu 10.04 (ชัดเจน) แอปพลิเคชั่น X11 ส่วนใหญ่ (เช่น xterm, gnome-terminal) ทำงานได้ดี แต่ Evince ไม่เริ่ม ดูเหมือนว่าจะไม่สามารถอ่าน~/.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 (ใน/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 มอบให้)

ปัญหานี้ได้รับรายงานว่าอูบุนตูข้อผิดพลาด # ความละเอียดจะจัดการกรณีและปัญหาเมื่อผู้ใช้บางรายมีโฮมไดเร็กตอรี่ของตนตามที่ระบุไว้ใน/etc/passwdภายนอก/home, แต่ไม่ใช่กรณีเช่นเหมืองที่ซึ่ง/home/gillesเป็นลิงค์สัญลักษณ์


ขอบคุณ. ใน Ubuntu 16.04 ไฟล์ที่เกี่ยวข้องคือ '/etc/apparmor.d/tunables/home.d/ubuntu' และขอแนะนำให้แทนที่การแก้ไขด้วยตนเองหนึ่งครั้งจะทำงาน: 'sudo dpkg-reconfigure apparmor' (ซึ่งจะทำให้คุณ โอกาสที่จะเพิ่มสถานที่บ้าน)
arr_sea

2

มีปัญหาเดียวกันและคำตอบของคุณชี้ให้ฉันในทิศทางที่ถูกต้อง ฉันพบโซลูชันอื่นที่ไม่ต้องการแก้ไขการกำหนดค่า apparmor แทนการใช้ symlink เพื่อเปลี่ยนเส้นทางการเข้าถึงการ/homeใช้ตัวเลือกbind mountฉันเพิ่มบรรทัดต่อไปนี้ใน/etc/fstab:

/elsewhere/home /home none bind

เมื่อคุณทำสิ่งนี้ผู้ครอบครองจะไม่รู้ด้วยซ้ำว่าไดเรกทอรีภายใต้/homeนั้น "จริง" ตั้งอยู่ที่อื่นดังนั้นข้อร้องเรียนจะหายไป

ข้อดีของวิธีนี้คือมันจะทำงานได้กับทุกแอปพลิเคชันโดยไม่ต้องแก้ไขไฟล์การกำหนดค่า apparmor ที่แตกต่างกันสำหรับแต่ละอัน


1
ที่จะไม่ได้รับการบังคับในกรณีของฉัน: มีไดเรกทอรีบ้านภายใต้/homeและอื่น ๆ /homeไม่อยู่ภายใต้ ความแตกต่างสำหรับกรณีนี้คือการผูกติด/elsewhere/home/gillesไป/home/gillesหรือเพื่อ/elsewhere/home /home/elsewhere
Gilles 'หยุดความชั่วร้าย' ใน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.