LDAP 클라이언트에는 동일한 사용자 이름(예: "abc")을 가진 두 명의 사용자가 있습니다. 하나는 UID 1000을 가진 로컬 사용자이고 다른 하나는 UID 1001을 가진 LDAP 사용자입니다. 을 실행하면 getent passwd 1000
반환되는 출력은 다음과 같습니다.
abc:x:1000:1000:로컬 사용자:/home/abc:/bin/bash
을 실행하면 getent passwd 1001
반환되는 출력은 다음과 같습니다.
abc:x:1001:100:LDAP 사용자:/home/abc:/bin/bash
홈 디렉터리는 NFS 서버에 저장되고 내 홈 디렉터리의 파일은 모두 LDAP 사용자가 생성하므로 기본 파일의 UID는 모두 1001입니다. passwd, group 및 Shadow 필드에서는 "files"가 "ldap" 앞에 옵니다 /etc/nsswitch
. 내가 이해한 바로는 이 순서는 LDAP 클라이언트가 로컬 데이터베이스를 먼저 확인하므로 abc라는 로컬 사용자가 사용된다는 의미입니다. 결과적으로 명령을 실행하면 ls -al ~
기본 파일의 소유자 UID가 1001이고 UID 불일치로 인해 로컬 사용자 "abc"에 매핑될 수 없으므로 위 ls 명령의 소유자 출력은 숫자 1001이어야 합니다. (이것은 LDAP 구성 클라이언트 상황이 없습니다). 그러나 실제 출력은 "abc"가 정확합니다. 그래서 왜 이런 일이 발생하는지 이해하지 못합니다. "ldap" 앞에 "files"를 명시적으로 지정할 때 LDAP 메커니즘은 LDAP 클라이언트에서 중복된 사용자 이름을 어떻게 해결합니까?
LDAP 시스템은 Ubuntu 22.04.3 LTS 서버를 실행하고 있습니다.
답변1
getpwnam(3)
사용자 이름을 입력한 abc
후 숫자로 구문 분석하려면 먼저 uid 1000 및 gid 1000으로 쿼리하고 찾으므로 거기서 중지하세요. 모든 데이터베이스의 모든 그룹이 반복되고(그러나 다시 의 순서를 존중 ) gid는 구성원으로 언급된 각 그룹의 보충 gid 목록에 추가됩니다.login
files
initgroups(3)
nsswitch.conf
abc
ls -l
반대로, uid 번호가 주어진 사용자 이름을 찾습니다. 을 사용했지만 getpwuid(3)
프로세스는 동일합니다. uid 1001에 해당하는 사용자 이름을 찾으려면 먼저 데이터베이스에 쿼리한 files
다음 해당 uid에 해당하는 사용자 이름이 없으면 LDAP에 쿼리합니다. uid 1001에 대한 사용자 이름이 없으면 /etc/passwd
데이터베이스에서 uid 1001에 대한 첫 번째 사용자 이름을 얻게 됩니다.ldap
따라서 귀하의 시스템에서는 다음을 기대합니다.
abc
해결1000
방법files
1000
해결abc
방법files
1001
abc
를 통해 해결되었습니다ldap
.
계정 데이터베이스의 사용자 이름은 기본 키여야 하므로 서로 다른 속성을 가진 두 개의 사용자 이름은 해결해야 하는 병리학적 상황입니다(여기서는 아마도 계정 항목을 삭제하여 /etc/passwd
).
동일한 uid에 대해 두 개의 사용자 이름을 갖는 것은 괜찮지만 요즘은 덜 일반적이고 일부 소프트웨어(예:)는 sudo
잘 작동하지 않으므로 일반적으로 피하는 것이 가장 좋습니다.