OpenLDAP를 사용한 삼바 - NT_STATUS_NO_SUCH_USER

OpenLDAP를 사용한 삼바 - NT_STATUS_NO_SUCH_USER
  1. OpenLDAP(ldapsearch 및 PHP 스크립트 사용)
  2. LDAP 없이 삼바 사용

이것이 내가 access.log말하는 것입니다(내 모든 SMB 데이터가 덤프됩니다).

[2013/02/10 19:41:25, 2] passdb/init_sam_from_ldap(545): Entry found for user: ***<username>***
[2013/02/10 19:41:25, 0] passdb/pdb_get_group_sid: Failed to find Unix account for ***<username>***
[2013/02/10 19:41:25, 1] auth/make_server_info_sam(589):  User ***<username>*** in passdb, but getpwnam() fails!
[2013/02/10 19:41:25, 0] auth/check_sam_security: make_server_info_sam() failed with 'NT_STATUS_NO_SUCH_USER'
[2013/02/10 19:41:25, 2] auth/check_ntlm_password:  Authentication for user [***<username>***] -> [***<username>***] FAILED with error NT_STATUS_NO_SUCH_USER

이는 OpenLDAP 데이터베이스의 비밀번호 해시가 Samba가 수신해야 한다고 가정하는 비밀번호 해시와 일치하지 않는 것과 같습니다. 노트:잘못된 비밀번호를 입력하면 잘못된 비밀번호라고 표시됩니다. 이 로그는 올바른 자격 증명을 사용한 완벽한 인증을 위한 것입니다. 또는 적어도 그것이 제가 하려고 하는 것입니다(gnome filebrowser, 사용자 이름:사용자 이름, 작업 그룹: WORKGROUP, 비밀번호:일반 텍스트 비밀번호)

이것은 내 smb.conf입니다.

[global]
        unix charset = LOCALE
        netbios name = test
        server string = test
        passdb backend = ldapsam:"ldap://<ip>"
        username map = "/etc/samba/smbusers"
        log level = 2
        syslog = 0
        log file = /var/log/samba/access.log
        max log size = 0
        name resolve order = hosts dns
        load printers = No
        add user script = /usr/bin/smbldap-useradd -m '%u'
        delete user script = /usr/bin/smbldap-userdel '%u'
        add group script = /usr/bin/smbldap-groupadd -p '%g'
        delete group script = /usr/bin/smbldap-groupdel '%g'
        add user to group script = /usr/bin/smbldap-groupmod -m '%g' '%u'
        delete user from group script = /usr/bin/smbldap-groupmod -x '%g' '%u'
        add machine script = /usr/sbin/smbldap-useradd -t 0 -w "%u"
        set primary group script = /usr/bin/smbldap-usermod -g '%g' '%u'
        domain logons = Yes
        domain master = Yes
        wins support = Yes

        ldap admin dn = cn=admin,dc=test,dc=local
        ldap group suffix = ou=Groups
        ldap user suffix = ou=People
        ldap suffix = dc=test,dc=local
        ldap ssl = no
        ldap passwd sync = yes

이것은 내 ldap.conf입니다.

**서버가 다운되어서 ATM이 없습니다**

Wireshark에 따르면 OpenLDAP는 검색 시 올바른 정보를 보내지 uid만 실제로 로그인할 때는생각하다삼바가 뭔가를 말하네"단일 층"나는 이것이 관련이 있을 것이라고 생각했는데, 이것이 실패하고 "잘못된" 데이터가 삼바로 다시 전송되는 곳입니다.

Samba는 단순히 LDAP 로그인 사용을 거부합니다.

공유하다:

LDAP 없이도 작동하므로 공유에 문제가 없습니다! (비LDAP 인증을 사용하는 경우에도)


유닉스 사용자 추가

작동합니다...그러면 공유에 액세스할 수 있지만 Samba에 명시적으로 지시했습니다.아니요로컬 인증을 사용하여 LDAP?를 선택했습니다.

답변1

비슷한 문제가 있었습니다. samba는 LDAP를 백엔드로 사용했지만 도메인 로그인을 허용하려면 여전히 사용자의 로컬 Unix 계정이 필요했습니다.

나에게 문제는 /etc/nsswitch.conf사용자 계정 및 그룹 등을 쿼리하는 데 사용되는 데이터베이스를 나열하는 파일 이었습니다. 사용 중인 Linux 운영 체제를 지정하지 않았으므로 Ubuntu에서 이 문제를 해결하는 데 사용한 단계를 제공하겠습니다.

먼저 패키지를 설치해야 합니다 libnss-ldap.

sudo apt-get install libnss-ldap

여러 종속성이 있으며 그 중 하나는 OpenLDAP 서버의 ACL이 익명 검색을 차단하는 경우 이 패키지를 구성하는 동안 LDAP 데이터베이스에 액세스할 수 있는 계정과 같은 LDAP 계정을 지정 ldap-auth-config해야 합니다 .cn=admin,dc=example,dc=com

다음으로 /etc/nsswitch.conf파일을 편집합니다. 아래와 같이 비밀번호, 그룹 및 섀도우에 대한 세 가지 항목에 "ldap"을 추가합니다. 일부 시스템은 "compat"를 사용하고 다른 시스템은 "file"을 사용하므로 첫 번째 비트만 유지하면 됩니다.

passwd: compat ldap
group: compat ldap
shadow: compat ldap

변경사항은 즉시 적용됩니다. 다음 명령을 실행하여 작동하는지 확인할 수 있습니다 getent.

getent passwd

모든 로컬 및 LDAP 사용자 계정이 나열되어야 합니다.

관련 정보