尝试使用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行,当我这样做时,我收到了域身份验证错误。
我没有在OpenLDAP上使用SSL / TLS,我有SSL = no设置。我也有ldap.secret文件集。我在root帐户下运行slapd。在评论之前,我的rootbinddn引用了uid = root的LDAP root用户,ou = Users,dc = example,dc = corp。 root的userPassword使用CRYPT匹配bindpw以及/ etc / shadow中的绑定。
查看LDAP日志活动以了解何时收到Samba错误,看起来好像LDAP正在针对Samba查询返回正确的结果:
Jun 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))” Jun 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 description sambaUserWorkstations sambaSID sambaPrimaryGroupSID sambaLMPassword sam baNTPassword sambaDomainName objectClass sambaAcctFlags sambaMungedDial sambaBadPasswordCount sambaBadPasswordTime sambaPasswordHistory modifyTimestamp sambaLogonHours modifyTimestam p uidNumber gidNumber homeDirectory loginShell gecos Jun 19 14:20:14 tsrvr slapd [3803]:conn = 1025 op = 15 SEARCH RESULT tag = 101 err = 0 nentries = 1 text =
还有其他建议吗?
非常感谢
答案 0 :(得分:2)
听起来像/etc/nsswitch.conf
的问题。具体来说,passwd
和group
行应该在compat或file之前引用ldap。你看过这个Samba wiki entry吗?
答案 1 :(得分: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内容无效。
希望这有助于其他系统构建者......