![홈 디렉터리에 액세스할 수 없으면 GDM이 중단됩니다.](https://linux55.com/image/31920/%ED%99%88%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%EC%97%90%20%EC%95%A1%EC%84%B8%EC%8A%A4%ED%95%A0%20%EC%88%98%20%EC%97%86%EC%9C%BC%EB%A9%B4%20GDM%EC%9D%B4%20%EC%A4%91%EB%8B%A8%EB%90%A9%EB%8B%88%EB%8B%A4..png)
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를 사용합니다. 이것이 맞습니까?
나는 두 가지 일을 하는 것을 추천합니다:
- 디버그 로깅 활성화gdm 디버깅 섹션, gdm을 다시 실행하고 시스템 로그에 유용한 내용이 있는지 확인하세요.
- 다음과 같이 사용자 목록을 비활성화해 보십시오.간단한 인사말 구성
답변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