.Xauthority를 ​​읽을 수 없기 때문에 Evince를 시작할 수 없습니다.

.Xauthority를 ​​읽을 수 없기 때문에 Evince를 시작할 수 없습니다.

SSH를 통해 원격으로 로그인하고 Ubuntu 10.04(clear)를 실행하는 시스템에 X 전달을 사용했습니다. 대부분의 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? 어떻게 시작할 수 있나요?

답변1

TL,DR: 내 홈 디렉토리가 .에 있기 때문에 이는 Apparmor의 잘못입니다 /home.

Ubuntu 10.04의 기본 설치에서,아파모어패키지는 간접적인 권장 수준 종속성으로 가져옵니다.우분투 표준팩. 시스템 로그( /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"

Apparmor의 기본 Evince 구성(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)
  • CUPS PDF 인쇄; 테스트하지는 않았지만 ~/PDF.

/etc/apparmor.d/tunables/home.d/local내 해결 방법은 해당 줄을 편집하고 추가하는 것이었습니다.

@{HOMEDIRS}+=/elsewhere/home/

홈 디렉터리의 비표준 위치를 식별하고(마지막 위치가 /중요합니다. 의 설명 참조 /etc/apparmor.d/tunables/home.d/ubuntu) 실행하여 /etc/init.d/apparmor reloadApparmor 설정을 업데이트합니다.

관리자 권한이 없고 시스템 관리자가 응답하지 않는 경우 바이너리를 evince다른 위치(예: )에 복사하면 ~/binApparmor 정책에 의해 재정의되지 않습니다. 추가 보안을 위해 매우 제한된 의류 제안을 얻지 마십시오).

이 문제는 다음과 같이 보고되었습니다.우분투 버그 #447292. 이 솔루션은 /etc/passwd일부 사용자의 홈 디렉터리가 external 에 나열되는 경우를 처리 /home하지만 나와 같은 경우는 /home/gilles심볼릭 링크인 경우는 처리하지 않습니다.

답변2

같은 질문이 있었는데 귀하의 답변이 저에게 올바른 방향을 알려주었습니다. 의류 구성을 편집할 필요가 없는 다른 솔루션을 찾았습니다. 액세스를 으로 리디렉션하는 데 심볼릭 링크를 사용하지 말고 /home대신 bind의 옵션을 사용하십시오 mount. 다음 줄을 추가했습니다 /etc/fstab.

/elsewhere/home /home none bind

그렇게 하면 apparmor는 아래 디렉토리가 /home"실제로" 다른 곳에 있다는 사실조차 알지 못하므로 불만 사항은 사라질 것입니다.

이 접근 방식의 장점은 각 애플리케이션에 대해 서로 다른 의류 구성 파일을 편집할 필요 없이 모든 애플리케이션에서 작동한다는 것입니다.

관련 정보