耗时3天!!mac 10.9终于可以基本正常使用LDAP登录了。
在此过程中遇到主要问题是3个:
1. mac的LDAP无法链接ubuntu上的LDAP server。
原因:mac的LDAP client默认使用SASL连接服务器。LDAP server必须可以正常使用SASL查询。
解决:在slapd的配置中,在cn=config项下面加如olcAuthzRegexp项如下:
olcAuthzRegexp: {0}uid=([^,]*),cn=[^,]*,cn=auth uid=$1,ou=Users,dc=example,dc=
intra
原理是默认SASL请求的格式大概是 “cn=uid,cn=realm,cn=auth-mech,cn=auth”。LDAP内部用的是uid=xxx,ou=Users,dc=example,dc=intra。每次做验证都需要把SASL的请求格式转换成LDAP的格式。详情见:http://www.openldap.org/doc/admin24/sasl.html
2. 在mac客户端上无法正常修改用户的密码。修改完密码后老密码和新密码都不能用了。
原因:不太清楚。猜想是mac的客户端把密码二次加密了。
解决:在slapd的配置项olcDatabase={-1}frontend,cn=config下面把密码保存方式改称CLEARTEXT。具体如下
olcPasswordHash: {CLEARTEXT}
坑爹的是这个参数在OpenLDAP的手册里面里面没有!只有在slapd-config的man page里面才能找到。⚠我在添加用户的时候使用的ldapscripts包里面带的ldapadduser和ldapsetpasswd。即使我设置成CLEARTEXT了以后,用他们添加的用户的密码还是hash过的。这里的细节不太清楚。以后有时间再搞。
直接选择UNIX标准。也就是RFC2307那个。其中只需要改几个地方:
(1) NFSHomeDirector -> #/Users/$uid$。这样做的好处是每个用户会在登录的时候在机器上生成自己的目录。没有这个,登录的时候mac会去找网络上的home。进入机器后会不停的出现问题,导致机器无法使用,必须强行重启。坏处是在每台登录过的机器上会生成一个目录。好一点的办法,也是麻烦一点儿的办法是自动mount制定的NFS目录。这个比较麻烦(要先加samba.schema, apple.schema, 然后LDAPserver上要设置automount的内容),优先级不高,先不搞了。
(2)Users和Groups的搜索的base要改称 ou=Users,dc=example,dc=intra 和 ou=Groups,dc=example,dc=intra。
⚠以上内容的前提是在数据库里面已经生成好了
# example.intra
dn: dc=<span style="font-family: Arial, Helvetica, sans-serif;">example</span><span style="font-family: Arial, Helvetica, sans-serif;">,dc=intra</span>
# admin, example.intra
dn: cn=admin,dc=example,dc=intra
# Users, example.intra
dn: ou=Users,dc=example,dc=intra
# Groups, example.intra
dn: ou=Groups,dc=example,dc=intra
# Machines, example.intra
dn: ou=Machines,dc=example,dc=intra
# associates, Groups, example.intra
dn: cn=somegroup,ou=Groups,dc=example,dc=intra
# ckf, Users, xemagic.intra
dn: uid=someuser,ou=Users,dc=example,dc=intra
使用的工具和一般的命令
slapd, ldapscripts
命令:
ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b <search base> <filter> <attributes>
ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f change_content.ldif
ldapsearch -x -w password -D cn=xxx,ou=Users,dc=example,dc=intra -H ldap:/// -b .......
ldapmodify -x -D cn=xxx,ou=Users,dc=example,dc=intra -H ldap:/// -f change_content.ldif
一些链接:
http://www.openldap.org/doc/admin24/
https://help.ubuntu.com/14.04/serverguide/openldap-server.html
服务器端查看日志:
默认情况下,slapd只打开低级的loglevel (cn=config下olcLogLevel: none)。在这个级别下很难看到连接里面发生了什么。要分析错误需要打开更多的日志:olcLogLevel: stats
LDAP 的log在/var/log/syslog里面。
配置ubuntu客户端自动创建用户目录。
生成一个文件/usr/share/pam-configs/my_mkhomedir包含一下内容
Name: activate mkhomedir
Default: yes
Priority: 900
Session-Type: Additional
Session:
required pam_mkhomedir.so umask=0022 skel=/etc/skel
然后执行pam-auth-update。在提示界面里给my_mkhomedir打勾即可。
------------------------------
LDAP太复杂了。还有许许多多的方面没有涉及到。以后慢慢搞。