0

尝试使用 nss_ldap 设置 Samba + OpenLDAP。

将 Windows7 加入 Samba 独立 PDC 后,我无法使用域帐户登录,除非该帐户也添加到 /etc/passwd 文件中。

我得到:passdb 中的用户,但 getpwnam() 失败!

我读到的所有内容都指向 NSS_LDAP 问题,getent passwd 显示用户非常好,我能够使用仅在 LDAP 数据库中的用户帐户 ssh 进入同一 Linux 主机。

另外,如果我打开 /etc/passwd 文件并为有问题的用户添加一行,我就可以登录了。

我没有使用 PAM。我添加了每个 Samba.org 站点所需的两个 Windows7 注册表更新。

软件栈如下: Samba 3.5.3 OpenLDAP 2.4.21 nss_ldap 264

想法/建议?

- - - - - - - - - - - - - - - - - 更新 - - - - - - - - -----------------

越来越近!我的 nsswitch.conf 确实有文件 ldap 所以我颠倒了顺序(现在是 ldap 文件)并且发生了一些奇怪的事情。请注意,之前,我说过我可以使用 SSH 登录,getent passwd 将用户转储到 ldap 和文件中。更改 nsswitch.conf 后,文件之前的 ldap,像 ls 这样的简单命令需要很长时间。此外,我观察到 nss_ldap 错误如下:

ls: nss_ldap: 无法搜索 LDAP 服务器 - 服务器不可用

ls:nss_ldap:无法绑定到 LDAP 服务器 ldap://tsrvr.example.corp:凭据无效

我在 ldap.conf 中注释掉了 rootbinddn 行,这些错误消失了,getent passwd 立即重新开始工作。输出的顺序也发生了变化:ldap 条目列在文件条目之前。

尽管如此,我的 Windows7 客户端仍无法登录域,并且我继续收到相同的 Samba 错误消息

passdb 中的用户测试,但 getpwnam() 失败!

在我的 smb.conf 中,我尝试删除 ldapsam:trusted = yes 行,当我这样做时,我得到域身份验证错误。

我没有将 SSL/TLS 与 OpenLDAP 一起使用,并且我有 SSL = no 设置。我也有 ldap.secret 文件集。我在 root 帐户下运行 slapd。我的 rootbinddn 在注释掉之前引用了 uid=root,ou=Users,dc=example,dc=corp 的 LDAP root 用户。root 使用 CRYPT 的 userPassword 与 bindpw 以及 /etc/shadow 中的匹配。

当我收到 Samba 错误时,查看 LDAP 日志活动,看起来 LDAP 正在针对 Samba 查询返回正确的结果:

6 月 19 日 14:20:14 tsrvr slapd[3803]: conn=1025 op=15 SRCH base="dc=example,dc=corp" scope=2 deref=0 filter="(&(uid=test)(objectClass= sambaSamAccount))” 06月19日14时20分14秒tsrvr slapd的[3803]:CONN = 1025 OP = 15 SRCH ATTR = UID uidNumber的gidNumber homeDirectory的sambaPwdLastSet sambaPwdCanChange sambaPwdMustChange sambaLogonTime sambaLogoffTime sambaKickoffTime CN SN的displayName sambaHomeDrive sambaHomePath sambaLogonScript sambaProfilePath描述sambaUserWorkstations sambaSID sambaPrimaryGroupSID sambaLMPassword SAM baNTPassword sambaDomainName objectClass sambaAcctFlags sambaMungedDial sambaBadPasswordCount sambaBadPasswordTime sambaPasswordHistory modifyTimestamp sambaLogonHours modifyTimestamp p uidNumber gidNumber homeDirectory loginShell gecos Jun 19 14:20:14 tsrvr slapd[3803]:conn=1025 op=15 搜索结果 tag=101 err=0 nentries=1 text=

还有其他建议吗?

非常感激

4

2 回答 2

2

听起来像一个问题/etc/nsswitch.conf。具体来说,passwdandgroup行应该在 compat 或 file 之前引用 ldap。你看过这个Samba wiki 条目吗?

于 2010-06-19T02:38:37.933 回答
0

解决了!!!!!!!!!!!

我有一个启动 Samba(NMBD、SMBD)和 OpenLDAP(SLAPD)的脚本。它是一个 RC 脚本,它从文件中读取配置数据,以确定哪些进程已经在运行,或者依赖进程是否无法启动等。这是脚本中相关部分的片段。最后一行将 nsswitch.conf 的一个版本复制到指定使用 LDAP 查找的位置。

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

关闭后,我正在执行以下操作;请注意,我复制了一个 nsswitch.conf 文件,其中包含“noldap”条目。

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,您将获得一个链接到 nss_ldap.so 的 smbd 版本运行,认为它应该只依赖 /etc/passwd(如果这就是 nsswitch.conf 文件中的全部内容)并且在 SMBD 运行后更改 nsswitch.conf 内容无效。

希望这对其他系统构建者有所帮助....

于 2010-06-28T18:59:44.470 回答