带有 OpenLDAP 的 samba - NT_STATUS_NO_SUCH_USER

带有 OpenLDAP 的 samba - NT_STATUS_NO_SUCH_USER
  1. OpenLDAP(使用 ldapsearch 和 php 脚本)
  2. 在没有 LDAP 的情况下使用 samba

这就是我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

** 服务器已关闭,所以我没有此自动取款机**

根据wireshark OpenLDAP在搜索时发送正确的信息uid,但在实际登录时我思考桑巴舞说了一些关于“单层”我认为这可能是相关的,这就是它失败的地方,并且“错误”的数据被发送回 samba。

Samba 只是拒绝使用任何 LDAP 登录。

分享:

它们无需 LDAP 即可工作,因此共享没问题! (即使使用非 LDAP 身份验证)


添加unix用户

这有效...然后我可以访问共享,但我已经明确告诉 samba不是使用本地身份验证,我选择了 LDAP?

答案1

我遇到了类似的问题,samba 使用 LDAP 作为后端,但仍然需要用户的本地 Unix 帐户才能允许域登录。

对我来说,问题在于/etc/nsswitch.conf列出了用于查询用户帐户和组等的数据库的文件。您尚未指定您正在使用的 Linux 操作系统,因此我将向您提供我在 Ubuntu 上解决该问题所用的步骤盒子。

首先我必须安装该libnss-ldap软件包:

sudo apt-get install libnss-ldap

还有几个依赖项,其中之一是ldap-auth-config.如果 OpenLDAP 服务器上的 ACL 阻止匿名搜索,那么您将需要cn=admin,dc=example,dc=com在配置此包期间指定一个 LDAP 帐户,例如可以访问 LDAP 数据库的帐户。

接下来,编辑该/etc/nsswitch.conf文件。将“ldap”添加到密码、组和影子的三个条目中,如下所示。有些系统使用“compat”,其他系统使用“文件”,因此您可以只保留第一位。

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

更改应立即生效。您可以通过发出以下命令来确认它是否有效getent

getent passwd

它应该列出所有本地和 LDAP 用户帐户。

相关内容