LDAP 클라이언트에서 중복된 사용자 이름을 해결하는 LDAP 메커니즘은 무엇입니까?

LDAP 클라이언트에서 중복된 사용자 이름을 해결하는 LDAP 메커니즘은 무엇입니까?

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 목록에 추가됩니다.loginfilesinitgroups(3)nsswitch.confabc

ls -l반대로, uid 번호가 주어진 사용자 이름을 찾습니다. 을 사용했지만 getpwuid(3)프로세스는 동일합니다. uid 1001에 해당하는 사용자 이름을 찾으려면 먼저 데이터베이스에 쿼리한 files다음 해당 uid에 해당하는 사용자 이름이 없으면 LDAP에 쿼리합니다. uid 1001에 대한 사용자 이름이 없으면 /etc/passwd데이터베이스에서 uid 1001에 대한 첫 번째 사용자 이름을 얻게 됩니다.ldap

따라서 귀하의 시스템에서는 다음을 기대합니다.

  • abc해결 1000방법files
  • 1000해결 abc방법files
  • 1001abc를 통해 해결되었습니다 ldap.

계정 데이터베이스의 사용자 이름은 기본 키여야 하므로 서로 다른 속성을 가진 두 개의 사용자 이름은 해결해야 하는 병리학적 상황입니다(여기서는 아마도 계정 항목을 삭제하여 /etc/passwd).

동일한 uid에 대해 두 개의 사용자 이름을 갖는 것은 괜찮지만 요즘은 덜 일반적이고 일부 소프트웨어(예:)는 sudo잘 작동하지 않으므로 일반적으로 피하는 것이 가장 좋습니다.

관련 정보