2009-12-05 4 views

답변

0

쉽지 않을 것입니다. 암호 파일을 열고 찾아 볼 수 있습니다. 그들이 없으면 LDAP를 끝내십시오. 물론 NIS가 아니라면. 또는 Kerberos. 사용중인 Solaris 버전에 PAM이있는 경우 해당 버전을 읽어 보면 도움이되는지 확인할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 암호 파일을 기반으로 결론을 내릴 생각은 없습니다.모든 사람이 아닌 이유가 쉐도우 암호 파일에 액세스 할 수 있습니다. getent passwd 사용자의 출력을 기반으로 결론을 내릴 수 있는지 알고 있습니까? 출력 형식이 될 수 있습니다. 로컬 사용자 출력 형식 일 수 있으며 LDAP 사용자 형식이 다를 수 있습니다. –

+0

당신은 그림자 파일이 필요하지 않습니다. getpwent는 LDAP로부터 가공 된 엔트리를 반환 할 수있다 ... – bmargulies

0

실제로 인증하는 데 사용 된 자격 증명을 알 수있는 방법을 모르겠지만 LDAP 데이터베이스에서 찾아보고 해당 항목이 있는지 확인하는 것이 더 쉬워야합니다. ldap_client 유틸리티를 사용하여 항상 사람들을 찾습니다. 당신은 LDAP 서버의 이름과 몇 가지 다른 세부 사항을 알아야합니다. 그것을위한 매뉴얼 페이지를 확인하십시오. 예를 들어, 사용자가 로컬 계정을 가지고 LDAP에있는 경우 로그인시 확인되는 암호는 시스템 구성에 따라 다릅니다.

1

Ldaplist는 사용자가 LDAP 데이터베이스에 항목이 있는지 알려줍니다. 사용자가/etc/passwd 파일에 항목을 가지고있는 경우를 분류하지는 않습니다.

ldaplist passwd username 
0

"local"인 UID가 "LDAP"와 별개의 범위에 있다고 가정합니다. 또한 nsswitch가 passwd, shadow 및 or 그룹에 대해 파일 및 ldap을 사용하도록 구성되어 있다고 가정합니다. 'getent'명령은 GNU libc 시스템에 있어야합니다. 로컬 '파일'데이터베이스가 LDAP 소스보다 작은 것으로 가정하고 두 소스 중 더 작거나 빠른 테스트를 원할 것입니다. 주어진 UID이 지금보다 창조적 인 그렙이 될 수있는 파일의 기본 GID와 일치 할 수

$ getent --service=files passwd | grep 655 

에 비슷한 뭔가를해야만 실행할 수있는 databses 중 하나 존재 여부를 결정하기를 원한다면

주문.

$ getent --service=files passwd | grep -e $.*:.*:655 

이것을 스크립트 가능 항목으로 바꾸려면 끝에 'wc'를 붙이면 정수 테스트가 필요합니다.

$ getent --service=files passwd | grep -e $.*:.*:655 | wc -l 

이 값이 없으면 0을, 발견되면 1 (또는 그 이상)을 반환해야합니다. 우리는 하나의 소스만을 테스트 할 것입니다. 왜냐하면 우리는 유효한 UID를 테스트 중이라고 가정하고 있으며, 여기에없는 다른 소스에있을 것입니다.

마지막으로, nsswitch를 사용하는 동안이 기능을 지원하는 C 라이브러리를 사용하여 유효한지 확인해야합니다. 나는 그들과 처음으로 경험을 쌓지는 못했지만 우리가 여기서했던 것처럼 특정 소스 만 사용하는 옵션을 전달할 수 있다고 가정합니다. 또는 cat/etc/passwd와 동일한 논리를 사용할 수 있습니다. 다시 생각해 보면 그들이 여기에 없다면 그들은 일을하고있는 것입니다. 사용자가 FreeIPA 서버의 LDAP 데이터베이스에있는 경우

+0

'--service' 플래그는 GNU에 고유하며 Solaris getent에서 구현되지 않는다. – jlliagre

0

ipaclient 패키지의 일부로 sss를 사용하는 경우,

getent --service=sss passwd $USER | wc -l

는 당신을 말할 것이다.

관련 문제