서버에서 id alice를 실행했을 때, 계정이 회사 디렉토리에 존재하지만 grep alice /etc/passwd는 아무것도 반환하지 않습니다. 계정이 없다고 결론 내리기 전에 리눅스가 실제로 사용하는 뷰를 확인해보세요.
getent는 NSS에 선언된 데이터베이스를 쿼리하며, 이는 로컬 파일, SSSD, LDAP 혹은 다른 아이덴티티 서비스를 결합할 수 있는 메커니즘입니다. 따라서 시스템이 계정, 그룹 및 그 숫자 식별자를 해결하는지를 구성 변경 없이 확인할 수 있습니다.

왜 /etc/passwd가 항상 답을 주지 않는가
로컬 머신에서 /etc/passwd는 종종 예상되는 모든 계정을 포함하고 있습니다. LDAP 또는 Active Directory와 SSSD를 통해 연결된 서버에서는 이 파일이 로컬 계정을 보유하며, 원격 계정은 NSS를 통해 도착합니다.
getent passwd 명령은 /etc/nsswitch.conf에 정의된 소스와 순서를 사용하여 NSS를 통해 passwd 데이터베이스를 해결합니다.
grep '^passwd:' /etc/nsswitch.conf
grep '^group:' /etc/nsswitch.conf
passwd: files systemd sss와 같은 줄은 리눅스가 먼저 로컬 파일을 조회하고, 그 다음 시스템 서비스를, 마지막으로 SSSD를 참조함을 나타냅니다. 이 순서를 귀하의 구성에 복사하지 마십시오: 배포판과 이미 설정된 통합에 따라 다릅니다.
getent로 계정 찾기
정확한 로그인 이름을 사용하고 전체 데이터베이스를 표시하지 마십시오. 방대한 디렉토리에서는 getent passwd만으로도 긴 불필요한 출력을 생성할 수 있습니다.
getent passwd alice
getent passwd 10542
계정이 해결되면 출력은 일반적인 형식을 따릅니다: 이름, 암호 표시자, UID, GID, 설명 필드, 홈 디렉토리 및 쉘. 따라서 LDAP 또는 SSSD 계정이 여기서 나타날 수 있으며 /etc/passwd에는 없을 수 있습니다.
출력이 없으면 단지 NSS가 현재 구성으로 해당 항목을 찾지 못한 것뿐입니다. 이 결과는 LDAP 중단, SSSD 캐시 문제, 또는 요청된 이름의 오류를 수정하지 않습니다.
그룹과 유효한 아이덴티티 확인하기
보이는 계정이 반드시 올바른 그룹을 보장하는 것은 아닙니다. group 데이터베이스를 확인한 후 id를 사용하여 이 사용자에 대해 계산된 그룹을 표시하게 하십시오.
getent group projet-admin
id alice
id alice는 UID, 기본 GID 및 예상되는 추가 그룹을 표시해야 합니다. getent passwd alice에서 계정이 나오지만 id alice에서는 나오지 않는 경우, 두 출력을 모두 보관하고 SSSD 또는 관련 아이덴티티 서비스의 로그를 확인하십시오.
이 읽기는 NSS가 아이덴티티를 해결하도록 요청하는 도구, 즉 id 또는 디렉토리로 구성된 서비스에 도움을 줍니다.
리눅스에서 사용자 나열을 위한 가이드는 로컬 계정을 목록화하는 데 유용합니다. 여기서 질문은 다릅니다: 시스템이 서비스를 사용할 때 정체성을 인식하는가?
먼저 검색하고 나중에 수정하기
저는 getent를 SSSD를 재시작하거나 캐시를 비우거나 nsswitch.conf를 수정하기 전에 첫 번째 검사로 유지할 것입니다. 이 명령은 읽기 전용이며 많은 리눅스 프로그램과 같은 관점을 제공합니다.
- 요청된 계정을
/etc/nsswitch.conf의passwd:라인과 비교하십시오. getent passwd 사용자와getent group 그룹를 실행하십시오.id 사용자로 계산된 그룹을 확인하십시오.- 항목이 누락된 경우, 구성을 변경하기 전에 아이덴티티 서비스의 로그를 확인하십시오.
완전히 로컬인 머신에서는 getent가 종종 /etc/passwd의 내용을 확인합니다. 디렉토리에 연결된 서버에서는 이 차이가 NSS 측면에서 이미 존재하는 계정을 삭제하거나 재생성하는 것을 방지합니다.
man7의 getent(1) 페이지는 사용 가능한 데이터베이스와 키에 의한 검색을 자세히 설명합니다. 계정을 로컬로 생성해야 하는 경우 먼저 원격 아이덴티티를 배제한 후 리눅스의 Useradd 절차를 사용하십시오.