홈 디렉터리에 액세스할 수 없으면 GDM이 중단됩니다.

홈 디렉터리에 액세스할 수 없으면 GDM이 중단됩니다.

KRB5 및 LDAP를 통해 SSO를 사용하는 OpenSUSE 12.3 워크스테이션을 설정했습니다.

이것은 GDM이 실제로 krb5p를 사용하여 nfs 마운트된 사용자의 홈 디렉토리에 액세스할 수 없다는 사실에 약간 불만을 느낄 때까지 꽤 잘 작동했습니다.

GDM은 홈 디렉터리를 설치하지 않아도 잘 작동합니다. 하나 이상의 홈 디렉토리가 마운트된 경우 환영/로그인 화면을 열려고 하면 GDM이 충돌합니다.

LDAP(sss)를 제거하면 /etc/nsswitch.conf홈 디렉터리가 마운트되어 있어도 GDM이 제대로 작동합니다.

처음에는 GDM을 위해 fstab에 nfs를 마운트했는데 /home/users매번 충돌이 발생했습니다. 그런 다음 별도로 마운트하기 위해 autofs로 전환해 보았습니다 /home/users/*. GDM은 처음에는 작동하지만 나중에(사용자가 로그아웃할 때) 충돌이 발생합니다. 이제 사용자가 로그아웃한 후 홈 디렉토리가 마운트 해제되도록 pam_mount를 사용하도록 구성했습니다. 이제 다른 사용자가 시스템에 로그인하지 않는 한 GDM이 작동합니다.

gdm따라서 문제는 GDM 그리터에 사용되는 사용자가 마운트된 홈 디렉토리에 액세스하려고 시도하는 경우 Kerberos 티켓 누락으로 인해 nfs 서버가 해당 권한을 거부한다는 사실과 관련이 있어야 합니다 . 루트도 이 디렉터리에 액세스할 수 없습니다.

해당 사용자가 로그인하기 전에 이러한 디렉터리에 대한 GDM 액세스 권한을 부여하려고 하면 보안 문제가 발생할 수 있습니다.

흥미롭게도 홈 디렉토리가 존재하지 않더라도 GDM에는 아무런 문제가 없습니다. 따라서 GDM은 이를 허용 file does not exist하지만 허용하지는 않습니다 permission denied.

따라서 이는 GDM이 홈 디렉토리에서 액세스하려고 하는 모든 것이 단순히 필요하지 않다는 결론을 내리게 합니다.

그렇다면 GDM은 홈 디렉토리에서 무엇을 얻으려고 합니까? 더 중요한 것은, 이 작업을 시도하는 것을 어떻게 막을 수 있습니까? 매달리는 것을 어떻게 방지할 수 있나요? 추가적인 문제 해결에 대한 아이디어가 있습니까?

아니면 마운트된 홈 디렉토리를 GDM이 볼 수 없도록 만들어서 넘어지지 않도록 하려면 어떻게 해야 합니까?

답변1

/etc/gdm/* 문제

보고그놈 디스플레이 관리자 참조 매뉴얼/etc/gdm아래에 다양한 스크립트 등을 포함하는 여러 디렉터리가 있다는 것을 알았습니다 .

이 디렉토리에는 몇 가지 쌍이 있습니다 $HOME. 나는 그것들을 주석 처리하여 해당 쌍을 제거할 수 있는지 확인하겠습니다 $HOME.

문제를 추가로 디버그하기 위해 set -x이 디렉터리의 다양한 스크립트 상단에 몇 줄을 추가하여 "권한 거부" 메시지가 표시되기 전에 무엇이 실행되고 있는지 확인하는 경향이 있습니다.

디렉토리의 스크립트는 모두 bash내 시스템의 스크립트입니다.

/etc/gdm/custom.conf

디버깅 옵션

하나 있다디버깅 옵션이 파일에서는 기본적으로 비활성화되어 있습니다. 활성화해 보면 메시지가 표시됩니다 /var/log/messages.

[debug]
Enable=true

로그인 시 얼굴 비활성화

나도 해보고 싶다모든 사용자 얼굴 금지얼굴 브라우저에서 gdm 로그인.

[greeter]
IncludeAll=false

비활성화하는 대신 문제의 사용자 중 한 명만 다음 목록에 추가하여 비활성화해 볼 수 있습니다.

Exclude=<some user>

업데이트 #1 - 버그질라 문제

이 문제는 Red Hat 문제 추적기에 제출된 버그와 관련된 것으로 보입니다.

현재 해결책은 없지만 버그의 일부로 이 오류가 발생하는지 확인하는 테스트가 있습니다.

문제가 발생하면 GDM은 여기에 캐시 디렉토리를 생성합니다 /var/run/user/42. 이 디렉터리를 삭제하면 GDM 로그인을 계속할 수 있습니다. OP는 댓글에서 이를 확인했습니다.

업데이트 #2 - 가능한 해결 방법

(I) 문제 해결을 위한 제안과 함께 일부 사이트링크에 두 번째 의견을 남겼습니다. 링크 제목은 다음과 같습니다.

특히 이 섹션에서는 다음을 수행합니다.

PAM 설정을 일부 수정하면 문제가 해결될 수 있습니다.

답변2

gdm이 홈 디렉토리에서 찾을 수 있는 한 가지는 사용자 목록에 사용자 사진을 표시하는 것입니다.

생각하다OpenSUSE는 gdm 3.6.2를 사용합니다. 이것이 맞습니까?

나는 두 가지 일을 하는 것을 추천합니다:

  1. 디버그 로깅 활성화gdm 디버깅 섹션, gdm을 다시 실행하고 시스템 로그에 유용한 내용이 있는지 확인하세요.
  2. 다음과 같이 사용자 목록을 비활성화해 보십시오.간단한 인사말 구성

답변3

.dmrc아마도 사용자 세션 설정 로드와 유사한 것을 찾고 있을 것입니다 . 이를 확인하려면 gdm 프로세스에 연결 strace하고 열려고 하는 파일이 무엇인지(그리고 어디에서 멈추는지) 확인하세요. 다음과 같은 것을 사용하고 싶을 수도 있습니다:

strace -f -o /path/to/logfile PID_OF_GDM

-f또한 -o로그를 파일(stderr 대신)로 리디렉션하여 하위 프로세스를 추적합니다.

이 경우 설치하기 전에 파일을 사용자 디렉터리에 넣으면 문제가 해결됩니다(그러나 사용자는 이를 변경할 수 없습니다).

충돌이 발생하기 전에 GDM에 연결하는 것이 쉽지 않은 경우 실행 프로그램(적절한 시스템 장치 또는 여전히 sysvinit 사용을 고집하는 경우 init 스크립트)을 편집할 수 있습니다.

그러나 이를 포착하는 가장 안전한 방법은 원본 바이너리를 호출하는 gdm래퍼 스크립트(예: 이름 변경)로 바꾸는 것입니다 . gdm.bin그러면 관리자가 어떻게 생성되든 추적됩니다. 출력을 위해 고유한 이름의 파일을 사용할 수도 있습니다. 래퍼 스크립트에서 $$및/또는를 사용하면 됩니다.`date --iso=ns`

#!/bin/bash
strace -f -o /path/to/gdm-${$}-$(date --iso-8601=ns).strace \
    /path/to/original/gdm.bin

관련 정보