我使用 FreeBSD 7.2 作为 NFS 服务器,并作为 OpenLDAP 服务器(运行 Debian etch)的客户端。当用户访问 NFS 服务器上的文件时,用户的 UID 会在 ldap 服务器中查找并映射到他们的用户名(通过 nsswitch)。我的问题是,即使将 FreeBSD 配置为 ldap 服务器的客户端,它也无法进行身份验证。
我知道配置是正确的,因为输入“ldapsearch”会给我一个 ldap 服务器上所有用户的列表。我使用了以下文档:http://www.freebsd.org/doc/en/articles/ldap-auth/client.html进行配置。这些文档中缺少什么吗?
这是 PAM/NSS 使用的 ldap.conf:
[root@csastorage /csastore]# cat /usr/local/etc/ldap.conf
#
# LDAP Defaults
#
# See ldap.conf(5) for details
# This file should be world readable but not world writable.
#BASE dc=example,dc=com
#URI ldap://ldap.example.com ldap://ldap-master.example.com:666
BASE dc=cl,dc=csa,dc=iisc,dc=ernet,dc=in
URI ldaps://<server address>/
TLS_REQCERT allow
TLS_CACERT /usr/local/etc/openldap/server.pem
#SIZELIMIT 12
#TIMELIMIT 15
#DEREF never
pam_login_attribute uid
答案1
为了在 FreeBSD 下获得真正良好的 OpenLDAP 支持,您需要:
- nss_ldap
- pam_ldap——PAM ldap 模块
- pam_mkhomedir - 首次登录后自动从 skel 创建用户主目录
- sudo-具有 LDAP 支持
- openssh-portable - 带有 LPK 补丁(适用于 LDAP 中的用户 ssh 密钥)
添加以下内容/etc/pam.d/sshd
auth sufficient /usr/local/lib/pam_ldap.so no_warn try_first_pass
account required /usr/local/lib/pam_ldap.so ignore_authinfo_unavail ignore_unknown_user
session required /usr/local/lib/pam_mkhomedir.so debug mode=0755 skel=/usr/local/share/skel
加上/etc/pam.d/system
auth sufficient /usr/local/lib/pam_ldap.so no_warn try_first_pass
account required /usr/local/lib/pam_ldap.so ignore_authinfo_unavail ignore_unknown_user
session required /usr/local/lib/pam_mkhomedir.so debug umask=0077 skel=/usr/local/share/skel
password sufficient /usr/local/lib/pam_ldap.so use_authok
用下列命令替换组 passwd 和 sudoers /etc/nsswitch.conf
:
group: files cache ldap
passwd: files cache ldap
sudoers: files cache ldap
您还需要修改
- /usr/local/etc/nss_ldap.conf
- /usr/local/etc/ldap.conf
- /usr/local/etc/ssh/sshd_config(用于 LDAP 密钥支持)
- /etc/nscd.conf(用于缓存)