| FreeBSD下利用ACI/SSL安全使用OpenLDAP 一、使用访问控制(Access Control),实现用户认证 关于它,在OpenLDAP 2.1 Administrator’s Guide里有详细说明。这里只管应用。 修改OpenLDAP的配置文件,增加控制块 # vi /usr/local/etc/openldap/slapd.conf access to attr=userPassword by anonymous auth by self write by * none access to * by self write by users read 此控制块用于禁止匿名查询,而认证用户可以修改自己的所有属性,允许查询它人的信息条目,但除了userPassword属性。基本上上面的每一行都是必须的,经过反复删除恢复,终于对访问控制块的认识有了质的飞跃。特别是对于“by anonymous auth”的理解,没有了它,需要认证的用户不能完成认证,因为它查询不到密码呀!所以“auth”在这里的作用就是允许匿名用户可以读到密码,但只能用于验证,而不能用于其它的用途,这就保证了密码属性的安全。 重启ldap服务 # /usr/local/etc/rc.d/slapd.sh restart 查询测试 1、如果还使用LDAP Browser 2.6的话,这次就可以使用其它的用户bind了,如使用用户: uid=abc,ou=people,dc=example,dc=com 它的密码是:abcabc(见前面的例子) 2、在命令行完成 # ldapsearch -x -b ’dc=example,dc=com’ ’objectClass=*’ 匿名查询结果:(显然没有任何条目) # extended LDIF # # LDAPv3 # base with scope sub # filter: objectClass=* # requesting: ALL # # search result search: 2 result: 0 Success # numResponses: 1 # ldapsearch -x -b ’dc=example,dc=com’ -D ’uid=abc,ou=people,dc=example,dc=com’ -w abcabc ’uid=a*’ 通过指定用户查询的结果: # extended LDIF # # LDAPv3 # base with scope sub # filter: uid=a* # requesting: ALL # # abc, people, example.com dn: uid=abc,ou=people,dc=example,dc=com objectClass: person objectClass: organizationalPerson objectClass: inetOrgPerson uid: abc sn: zhangs cn: zs userPassword:: YWJjYWJj # aaa, people, example.com dn: uid=aaa,ou=people,dc=example,dc=com objectClass: person objectClass: organizationalPerson objectClass: inetOrgPerson uid: aaa sn: aaaa cn:: YWFkQSA= # search result search: 2 result: 0 Success # numResponses: 3 # numEntries: 2 如果过滤条件还是用’objectClass=*’的话,产生的条目数很多,所以这里就必为了’uid=a*’。从结果中我们可以看到“uid=abc,ou=people,dc=example,dc=com”的userPassword属性显示了出来,而另一个用户则没有显示。上面执行的命令中红色部分分别是查询时使用的用户名和密码,其中密码就是条目“uid=abc,ou=people,dc=example,dc=com”中所存放的userPassword的值。 二、使用SSL/TLS 通过认证授权(Certificate Authority)中心发行的证书签发证书或自签发证书,这里用的是自签发证书。 参考:http://www.openldap.org/pub/ksoper/OpenLDAP_TLS_howto.html http://www.openldap.org/faq/data/cache/185.html (一)服务端的证书 1、建立一临时目录 # mkdir ~/ldap #cd ~/ldap 2、建立用于签署其它证书的CA证书(应该是X509v3格式的) # /usr/local/openssl/misc/CA.sh -newca 如果不输入文件名,则会在当前目录下会生成demoCA目录,里边存放有cacert.pem 和private/cakey.pem (CA证书和RSA私有密钥)。在填写各项目的过程上,有些项目不是很重要,对于“Common Name”,应该填入有一定意义易于阅读的字符串,不一定是服务器的名字,我的就是abc.cn,而服务器名字为myth.unix.cn。 |


