Evince không bắt đầu vì không thể đọc .Xmasterity


10

Tôi đã đăng nhập từ xa qua SSH với X chuyển tiếp đến một máy chạy Ubuntu 10.04 (sáng suốt). Hầu hết các ứng dụng X11 (ví dụ xterm, gnome-terminal) đều hoạt động tốt. Nhưng Evince không bắt đầu. Dường như không thể đọc được ~/.Xauthority, mặc dù tệp tồn tại và rõ ràng là có thể đọc được (nó có quyền và các ứng dụng khác đọc nó vẫn ổn).

$ 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

Điều gì đặc biệt về Evince mà nó không thể đọc được ~/.Xauthority? Làm thế nào tôi có thể làm cho nó bắt đầu?

Câu trả lời:


12

TL, DR: đó là lỗi của Apparmor và do thư mục nhà của tôi ở bên ngoài /home.

Theo cài đặt mặc định của Ubuntu 10.04, gói apparmor được kéo vào dưới dạng phụ thuộc cấp độ Khuyến nghị gián tiếp của gói tiêu chuẩn Ubuntu . Nhật ký hệ thống ( /var/log/syslog) cho thấy Apparmor đang từ chối nỗ lực đọc của 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"

Cấu hình Evince mặc định cho Apparmor (in /etc/apparmor.d/usr.bin.evince) rất dễ cho phép: nó cho phép đọc và ghi tùy ý trong tất cả các thư mục chính. Tuy nhiên, thư mục chính của tôi trên máy này là một liên kết tượng trưng đến vị trí không chuẩn không được liệt kê trong cấu hình AppArmor mặc định. Quyền truy cập được cho phép theo /home, nhưng vị trí thực sự của thư mục nhà của tôi là /elsewhere/home/gilles, vì vậy quyền truy cập bị từ chối.

Các ứng dụng khác có thể bị ảnh hưởng bởi vấn đề này bao gồm:

  • Firefox, nhưng hồ sơ của nó bị tắt theo mặc định (bởi sự hiện diện của một liên kết tượng trưng /etc/apparmor.d/disable/usr.bin.firefox -> /etc/apparmor.d/usr.bin.firefox).
  • CUPS in PDF; Tôi đã không thử nghiệm, nhưng tôi hy vọng nó sẽ thất bại trong việc viết ~/PDF.

Cách khắc phục của tôi là chỉnh sửa /etc/apparmor.d/tunables/home.d/localvà thêm dòng

@{HOMEDIRS}+=/elsewhere/home/

để nhận biết vị trí không chuẩn của các thư mục chính (lưu ý rằng cuối cùng /là quan trọng; xem các bình luận trong /etc/apparmor.d/tunables/home.d/ubuntu), sau đó chạy /etc/init.d/apparmor reloadđể cập nhật cài đặt Apparmor.

Nếu bạn không có đặc quyền của quản trị viên và quản trị viên hệ thống không phản hồi, bạn có thể sao chép evincetệp nhị phân sang một vị trí khác ~/bin, và nó sẽ không được chính sách Apparmor bảo vệ (vì vậy bạn sẽ có thể bắt đầu nó, nhưng sẽ không được cung cấp bảo mật bổ sung rất hạn chế mà Apparmor cung cấp).

Vấn đề này đã được báo cáo là lỗi Ubuntu # 447292 . Nghị quyết xử lý trường hợp khi một số người dùng có thư mục chính của họ như được liệt kê ở /etc/passwdbên ngoài /home, nhưng không phải là trường hợp như của tôi, nơi /home/gillescó một liên kết tượng trưng.


Cảm ơn bạn. Trong Ubuntu 16.04, tệp có liên quan là '/etc/apparmor.d/tunables/home.d/ubfox' và chúng tôi khuyên bạn thay vì chỉnh sửa thủ công, người ta sẽ chạy: 'sudo dpkg-cấu hình lại apparmor' (sẽ cung cấp cho bạn cơ hội để thêm các vị trí nhà)
Array_sea

2

Có cùng một vấn đề, và câu trả lời của bạn chỉ cho tôi đi đúng hướng. Tôi tìm thấy một giải pháp khác không yêu cầu chỉnh sửa cấu hình apparmor. Thay vì sử dụng symlink để chuyển hướng truy cập /home, hãy sử dụng bindtùy chọn trên mount. Tôi đã thêm dòng sau vào /etc/fstab:

/elsewhere/home /home none bind

Khi bạn thực hiện việc này, apparmor thậm chí sẽ không biết rằng các thư mục bên dưới /home"thực sự" nằm ở một nơi khác, vì vậy các khiếu nại sẽ biến mất.

Ưu điểm của phương pháp này là nó sẽ hoạt động cho tất cả các ứng dụng, mà không phải chỉnh sửa tệp cấu hình apparmor khác nhau cho mỗi ứng dụng.


1
Điều đó sẽ không được áp dụng trong trường hợp của tôi: có thư mục nhà /homevà những người khác không theo /home. Một biến thể cho trường hợp này là để ràng buộc-mount /elsewhere/home/gillesđể /home/gilles, hoặc /elsewhere/homeđể /home/elsewhere.
Gilles 'SO- đừng trở nên xấu xa'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.