%EC%9D%B4%20%EC%8B%A4%ED%8C%A8%ED%95%A9%EB%8B%88%EB%8B%A4!.png)
나는 stackoverflow에 이 질문을 하고 여기서 더 나은 응답을 얻을 수 있다는 것을 깨달았습니다.
Linux에서 nss_ldap을 사용하여 Samba + OpenLDAP 설정을 시도합니다. 모든 소프트웨어는 내가 소스에서 컴파일하므로 RPM, YUM 등이 없습니다.
자체 배포판인 Pozix Linux를 사용합니다. 즉, 기본적으로 배포판이 표준 /etc/passwd, /etc/group을 사용한다는 의미의 바닐라 로그인 시스템입니다.
SAMBA를 제외한 SSH와 같은 다른 소프트웨어와 작동하는 것으로 보이는 LDAP 기반 시스템으로 시스템을 변환하는 데 필요한 모든 소프트웨어를 설치했습니다.
Windows7을 Samba 독립형 PDC에 가입할 수 있었지만 해당 계정이 /etc/passwd 파일에도 추가되지 않으면 도메인 계정으로 로그인할 수 없습니다.
나는 다음을 얻습니다: passdb의 사용자이지만 getpwnam()이 실패합니다!
내가 읽은 모든 내용은 NSS_LDAP 문제를 가리킵니다. 내가 한 일의 목록은 다음과 같습니다.
- getent passwd는 사용자에게 완벽하게 문제가 없음을 보여줍니다.
- LDAP 데이터베이스에만 있는 사용자 계정을 사용하여 동일한 Linux 호스트에 SSH로 연결할 수 있습니다.
- 작동하는 ID 테스트(테스트는 LDAP에서만 테스트 계정임)
- ./pdbedit -Lv 테스트가 작동합니다.
- ./net rpc right list 계정 -Uroot가 작동합니다. 루트에 필요한 모든 권한이 있는 것으로 보입니다.
- stackoverflow의 제안에 따라 nsswitch.conf 파일을 (files ldap)에서 (ldap files)로 변경했습니다. 이로 인해 본질적으로 getent passwd의 덤프 순서가 변경되었지만 문제가 해결되지 않았습니다.
- rootbinddn을 주석 처리하고 일반 텍스트 버전의 비밀번호와 함께 binpw를 추가하여 ldap.secret에 대한 모든 질문을 제거합니다.
- smb.conf에는 ldapsam:trusted = yes가 있습니다.
- smb.conf와 ldap.conf 모두 SSL이 꺼져 있습니다.
- nscd가 실행되지 않음
samba.org 사이트 5장에서 사용자를 행복하게 만드는 방법에 대한 모든 내용은 다음을 제외하고 이루어집니다.
./smbclient //tsrvr/test -Utest
그러면 log.smbd에 제목 오류 메시지가 생성되고 ldap 디버그 로그에는 오류가 없고 성공적인 반환 값이 있는 테스트 쿼리가 표시됩니다.
/etc/passwd에 'test'를 넣으면 작동합니다!
nss_ldap과 smbd 사이의 관계가 끊어진 것 같고 LDAP가 괜찮아 보이기 때문에 관계에 스트레스를 줍니다(slapcat, ldapsearch 등... 모두 작동함)... nss_ldap 라이브러리가 smbd에 다시 전달될 때 반환 값을 받는 것 같습니다. , 왠지 이해가 안 돼요.
어떤 제안이라도 정말 감사하겠습니다. 이 문제가 자주 나열되는 것을 봅니다. 종종 PAM과 관련이 있지만 저는 PAM을 사용하지 않습니다.
또한 /etc/passwd 파일을 열고 해당 사용자에 대한 줄을 추가하면 로그인할 수 있습니다.
저는 PAM을 사용하지 않습니다. Samba.org 사이트마다 필요한 두 개의 Windows7 레지스트리 업데이트를 추가했습니다.
소프트웨어 스택은 다음과 같습니다: Samba 3.5.3 OpenLDAP 2.4.21 nss_ldap 264
---------------------[ 업데이트 ]---------------------
나는 Samba 소스코드를 보기 시작했다.
나는 이 기능을 samba3/auth/auth_util.c(약 580번째 줄)에서 찾았습니다.
auth_serversupplied_info *result;
const char *username = pdb_get_username(sampass);
pwd = getpwnam_alloc(result, username);
사용자 이름이 유효하더라도 pwd는 NULL로 평가됩니다. getpwnam_alloc은 결과 구조에 메모리를 할당하고 이를 Unix UID, 기본 GID 등으로 채웁니다.
내가 읽은 모든 내용에 따르면 이 호출은 NSS를 사용합니다. 나보다 이에 대해 잘 알고 있는 Samba 팀의 누군가가 도움을 줄 수 있기를 바랍니다.
--------[ 업데이트 ]--------- 여기서 삼바 소스 코드 검사 내가 발견한 것은 다음과 같습니다.
getpwnam_alloc 호출로 auth/auth_util.c(580행)에서 오류가 발생합니다.
getpwnam_alloc은 일종의 캐싱을 시도하고 최근 캐시에서 사용자 이름을 찾을 수 없으면 코드는 다음을 호출하여 실패합니다.
sys_getpwnam은 getpwnam의 래퍼인 lib/system.c에 있습니다.
여기에 문서화되어 있습니다:http://opengroup.org/onlinepubs/007908775/xsh/getpwnam.html
Samba가 설명된 오류 번호를 확인할 때 나타나지 않습니다. 디버그를 추가하고 다시 보고하겠습니다.
확실히 getpwnam을 구현하는 OS 라이브러리에 실패했지만 아직은 확실하지 않습니다.
답변1
해결되었습니다!!!!!!!!!
Samba(NMBD, SMBD)와 OpenLDAP(SLAPD)를 시작하는 스크립트가 있습니다. 이는 파일에서 구성 데이터를 읽어서 어떤 프로세스가 이미 실행 중인지 또는 종속 프로세스가 시작되지 않는지 등을 확인하는 RC 스크립트입니다. 다음은 스크립트에서 관련 부분의 스니펫입니다. 마지막 줄은 LDAP 조회를 사용하도록 지정하는 위치에 nsswitch.conf 버전을 복사합니다.
while [ $i -lt $MAXPROCS ];
do
PID=${PROC[$i]}
StartProc $PID
if test $? != 0; then
echo "!!! Aborting Any Remaining Start-up Processes !!!"
exit 1
fi
i=$(($i+1))
done
cp /etc/rc.d/pozix/nsswitch.conf.ldap /etc/nsswitch.conf
그리고 종료 시 나는 다음을 수행했습니다. "noldap" 항목이 있는 nsswitch.conf 파일을 복사했습니다.
while [ $i -lt $MAXPROCS ];
do
PID=${PROC[$i]}
StopProc $PID
i=$(($i+1))
done
cp /etc/rc.d/pozix/nsswitch.conf.noldap /etc/nsswitch.conf
시작 시나리오에서 Samba는 호출 전에 nsswtich.conf 콘텐츠에 ldap 항목이 있기를 원합니다. 내 문제를 해결하기 위해 내가 한 일은 다음과 같습니다.
cp /etc/rc.d/pozix/nsswitch.conf.ldap /etc/nsswitch.conf
while [ $i -lt $MAXPROCS ];
do
PID=${PROC[$i]}
StartProc $PID
if test $? != 0; then
cp /etc/rc.d/pozix/nsswitch.conf.noldap /etc/nsswitch.conf
echo "!!! Aborting Any Remaining Start-up Processes !!!"
exit 1
fi
i=$(($i+1))
done
요약하자면, SMBD를 시작하는 방법은 시작하는 시점만큼 중요한 것으로 보입니다. nsswitch.conf에 LDAP 항목이 없을 때 SMBD를 시작하면 /etc/passwd에만 의존해야 한다고 생각하는 nss_ldap.so에 연결된 smbd 버전이 실행됩니다(nsswitch.conf 파일에 있는 모든 항목인 경우). SMBD가 실행된 후 nsswitch.conf 내용을 변경해도 아무런 효과가 없습니다.
이것이 다른 시스템 빌더에게 도움이 되기를 바랍니다....
답변2
nss_ldap은 인증에 Samba가 아닌 LDAP를 사용하도록 Linux 로그인 시스템을 구성합니다. 인증을 위해 LDAP를 사용하도록 Samba에 지시해야 합니다. 예를 들어:
ldap ssl = off
ldap admin dn = cn=Manager,dc=ldappdc,dc=mydomain,dc=com
ldap suffix = dc=ldappdc,dc=mydomain,dc=com
ldap user suffix = ou=People
ldap group suffix = ou=Group
ldap idmap suffix = ou=Idmap
ldap machine suffix = ou=Hosts
물론 Samba는 LDAP 지원으로 구축되어야 합니다.
이제 얻으세요smbldap 도구LDAP 데이터베이스에 사용자/그룹 등을 생성하는 데 사용됩니다. smbldap-tools는 적절한 비밀번호 형식(Linux용 하나, Samba용 하나) 및 기타 필수 속성을 사용하여 사용자 계정을 생성합니다.
전체 LDAP 항목은 다음과 같습니다.
dn: uid=someuser,ou=People,dc=corp,dc=example,dc=com
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
objectClass: sambaSamAccount
cn: someuser
displayName: someuser
gecos: System User
gidNumber: 513
givenName: someuser
homeDirectory: /home/someuser
loginShell: /bin/bash
sambaAcctFlags: [U]
sambaHomeDrive: H:
sambaHomePath: \\%L\someuser
sambaKickoffTime: 2147483647
sambaLMPassword: FBB7BAF5868B4CBAAAD3B435B51404EE
sambaLogoffTime: 2147483647
sambaLogonScript: logon.bat
sambaLogonTime: 0
sambaNTPassword: D4CB2D67B19490FB090A6EDEC60E3EAE
sambaPrimaryGroupSID: S-1-5-21-1603264347-769597993-3324459097-513
sambaProfilePath: \\%L\profiles\someuser
sambaPwdCanChange: 0
sambaPwdLastSet: 1277051243
sambaPwdMustChange: 1280939243
sambaSID: S-1-5-21-1603264347-769597993-3324459097-3006
shadowLastChange: 14780
shadowMax: 45
sn: someuser
uid: someuser
uidNumber: 1003
userPassword:: e1NTSEF9Z2RueUNBMnVDMWVrejZLZGg4OGNLUmRJRU9zdlJFdE8=