PAM 및 NSS 이해


21

마지막 날에는 LDAP 인증을 사용하는 Linux 시스템을 설정했지만 모든 것이 제대로 작동하지만 많은 연구를 거친 후에도 NSS 및 PAM에 대해 실제로 이해할 수없는 것이 있습니다.

인용 :

NSS를 통해 관리자는 인증 파일, 호스트 이름 및 기타 정보를 저장하고 검색 할 소스 목록을 지정할 수 있습니다.

PAM은 응용 프로그램 및 기본 운영 체제에 구성 가능한 인증 플랫폼을 제공하는 라이브러리 세트입니다.

내가 이해하지 못하는 것은 PAM과 NSS의 작동 방식과 상호 작용 방식입니다. 에서 이 책 아키텍처는 꽤 잘 설명 : 사용에 I의 구성 PAM pam_ldapLDAP 계정과 pam_unix로컬 계정에 대한, 나는 구성 nsswitch.conf로컬 파일 및 LDAP에서 정보를 가져올 수 있습니다.

내가 올바르게 이해했다면 LDAP가 두 번 사용됩니다. 먼저 pam_ldapNSS가 호출 pam_unix합니다. 맞습니까? LDAP는 실제로 두 번 사용됩니까? 그러나 왜 NSS와 PAM을 모두 구성해야합니까? PAM은 NSS와 다른 작업을 수행하며 다른 프로그램에서 사용한다고 설명합니다. 그러나이 페이지 에서 읽은 것처럼 NSS 또는 PAM 만 사용할 수 있어야합니다 .

그래서 조금 실험 해 보았고 먼저 LDAP에서 LDAP를 삭제하려고했습니다 nsswitch.conf(그리고 pam_ldap만으로는 작업을 수행하기에 충분 하지 않은 것처럼 인증이 중지되었습니다 ). 그럼 난 NSS에서 LDAP을 다시 활성화와 나는 PAM 구성에서 삭제 (이 시간 다, 벌금을 일한 것처럼 pam_ldap쓸모 및 NSS가 충분한 사용자를 인증하기).

이것을 명확히하는 데 도움을 줄 수있는 사람이 있습니까? 미리 감사드립니다.

최신 정보

방금 뭔가를 시도했습니다. pam_ldap모든 pam 구성 필드에서 모든 항목을 다시 제거 shadow: ldap했으며 에서도 제거 했습니다 nsswitch.conf. 지금처럼 모든 시스템이 단지 라인은 다음과 같습니다 passwd: ldap filesgroup: ldap files에서 nsswitch.conf. 글쎄 ... LDAP 사용자로 로그인하면 완벽하게 작동합니다.이 두 줄 (+ /etc/ldap.conf)은 LDAP 인증을 구성하기에 충분합니다.

내 지식에서 NSS와 독립적 인 PAM이지만 테스트 결과 그렇지 않았습니다. 그래서 NSS를 완전히 비활성화하고 PAM 만 사용할 수 있습니까?


업데이트 내용이 없습니다. 다음 명령을 실행하고 결과를보고하여 LDAPUSER를 LDAP에서만 구성된 것으로 생각하는 사용자로 바꾸십시오. getent shadow | grep LDAPUSER grep LDAPUSER /etc/shadow
Andrew B

답변:


25

그것은 당신의 머리에 다음과 같은 것들을 분해하는 데 도움이됩니다.

  • NSS- 다양한 OS 레벨 데이터베이스가 메모리에 어셈블되는 방식을 제어하기위한 모듈 기반 시스템. 여기에는 다음이 포함 (이에 제한되지 않음) passwd, group, shadow(이 중요하다), 그리고 hosts. UID 조회는 passwd데이터베이스를 사용 하고 GID 조회는 group데이터베이스를 사용 합니다.

  • PAM- 서비스 기반 인증 및 계정을 허용하기위한 모듈 기반 시스템. NSS와 달리 기존 데이터베이스를 확장하지 않습니다. 쉘 로그인은 여전히 NSS의 데이터베이스 passwdgroup데이터베이스에 의존하지만 PAM 모듈은 원하는 로직을 사용할 수 있습니다 . (항상 UID / GID 조회가 필요합니다)

중요한 차이점은 PAM이 자체적으로 아무것도하지 않는다는 것입니다. 응용 프로그램이 PAM 라이브러리에 연결되지 않고 호출하면 PAM이 사용되지 않습니다. NSS는 운영 체제의 핵심이며 데이터베이스는 OS의 정상적인 작동에 상당히 보편적입니다.

이제 우리는 그 길을 벗어났습니다. 커브 볼은 다음과 같습니다. pam_ldap은 LDAP에 대해 인증 하는 일반적인 방법이지만 유일한 방법 은 아닙니다 .

  • shadow의 ldap 서비스를 가리키는 경우 /etc/nsswitch.conf섀도우 데이터베이스 매핑 (특히 암호화 된 비밀번호 필드)의 속성이 LDAP에 있고 로그인을 허용하면 섀도우 데이터베이스에 대해 실행되는 인증이 성공합니다.
    • 이는 pam_unix.so섀도 데이터베이스에 대해 인증 할 때 LDAP에 대한 인증이 발생할 수 있음 을 의미 합니다. (NSS에서 관리하며 LDAP를 가리킬 수 있음)
  • PAM 모듈이 데몬에 대한 호출을 수행하여 LDAP 데이터베이스를 쿼리하는 경우 (예 : pam_sss.so후크 sssd) LDAP가 참조 될 수 있습니다.

많은 감사, nsswitch.conf + pam_unix는 모든 작업을 스스로 수행 할 수 있습니다. 그러나 PAM은 독자가 작성했기 때문에 독립적이기 때문에 동일한 작업을 수행 할 수 있어야합니다. 내 이해는 pam_ldap 모듈이 ldap 서버에 대해 사용자를 인증하기에 충분해야한다는 것입니다. 그렇지 않습니까?
ColOfAbRiX

6
yes를 인증하지만 사용자 정보 (로컬 / etc / passwd 등)를 얻는 다른 방법이 없다면 그룹 구성원, 홈 디렉토리 등을 찾는 방법이 여전히 필요합니다. 여전히 인증 및 권한 부여 / 속성 열거를 혼동하고 있습니다.
TheFiddlerWins 2009 년

1
@ColOfAbRiX TheFIddlerWins가 정확합니다. 인증하는 것으로 충분 하지만 앞에서 언급했듯이 여전히 UID + GID 멤버십을 조회 할 수있는 방법이 필요합니다. 이는 데이터베이스 passwdgroup데이터베이스 (NSS) 에서 가져옵니다. 즉, 로컬 시스템 ( /etc/passwd+ /etc/group)에 있거나 ldapNSS 모듈을 통해 얻어야 합니다.
앤드류 B

3
다음을 이해하는 데 도움이되는 방법이 있습니다 . 에서 두 데이터베이스 모두에 대해 LDAP를 실행 getent passwd하고 실행하십시오 . 그런 다음 해당 파일에서 LDAP를 비활성화하고 두 명령을 다시 실행하십시오. NSS 데이터베이스를 덤프하는 명령입니다. getent group/etc/nsswitch.confgetent
Andrew B

마침내 나는 조금 더 많은 일로 모든 것을 이해할 수 있었다. 고마워요!
ColOfAbRiX

1

NSS는 서비스 / 사용자에 대한 정보 (귀하가 속한 그룹, 홈 디렉토리 등)를 열거합니다. PAM은 해당 정보에 대해 수행 할 작업을 결정합니다.

인증에 LDAP를 사용 하려면 pam_ldap 이 필요합니다 . 다른 것을 사용하고 있다면 (로컬 계정, Kerberos 등) 그렇지 않을 수 있습니다.

그래서 그들은 다른 일을합니다. NSS는 정보를 얻습니다. PAM은 해당 정보를 얻은 후 누가 무엇을 할 수 있는지 결정합니다.


고마워하지만 문제는 적어도 내 시스템에서는 그런 식으로 작동하지 않는다는 것입니다. 캐시 비활성화). 이것은 나의 혼란을 증가시켰다 :)
ColOfAbRiX

pam_ldap를 제거한 후 인증하고 있는지 어떻게 확인합니까? 공통 인증 내용을 게시하십시오. 이 NSS에 의해 제공됩니다 - 당신은 당신이 누군지 알고 시스템에 대한 몇 가지 방법이 필요합니다 작업도 pam_ldap의로, 반드시 세 번째 질문의 첫 번째 부분에 SUSE의 경로에 대한하지만 대답은 아니다
TheFiddlerWins

죄송합니다. pam_ldap를 제거한 후 LDAP 인증이없이 작동했지만 NSS를 통해 작동 한 것 같습니다. 파일 common-auth에는 pam_env, pam_unix 및 pam_deny 만 포함되었습니다.
ColOfAbRiX

이해가되지 않습니다. LDAP 인증이 어떻게 작동하는지 확인 했습니까?
TheFiddlerWins 2009 년

LDAP 계정을 사용하여 로그인하고 LDAP 서버 로그를 모니터링합니다. nscd (캐싱) 비활성화
ColOfAbRiX
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.