系统:ubuntu 14.04
安装:
1. sudo apt-get install slapd ldap-utils
2. 在1的过程中会让你输了admin密码
配置:
如果安装过,只是想配置OpenLDAP,可以运行 sudo dpkg-reconfigure slapd
配置分三种,1使用LDIF配置,2使用slapd.conf配置,3使用目录中的/etc/ldap/slapd.d/配置
1. LDIF配置,格式如下:
# global configuration settings dn: cn=config objectClass: olcGlobal cn: config <global config settings> # schema definitions dn: cn=schema,cn=config objectClass: olcSchemaConfig cn: schema <system schema> dn: cn={X}core,cn=schema,cn=config objectClass: olcSchemaConfig cn: {X}core <core schema> # additional user-specified schema ... # backend definitions dn: olcBackend=<typeA>,cn=config objectClass: olcBackendConfig olcBackend: <typeA> <backend-specific settings> # database definitions dn: olcDatabase={X}<typeA>,cn=config objectClass: olcDatabaseConfig olcDatabase: {X}<typeA> <database-specific settings> # subsequent definitions and settings ...
这里给出一个样例,如下:
### backend.ldif ### # Load dynamic backend modules dn: cn=module,cn=config objectClass: olcModuleList cn: module olcModulepath: /usr/lib/ldap olcModuleload: back_hdb.la # Database settings dn: olcDatabase=hdb,cn=config objectClass: olcDatabaseConfig objectClass: olcHdbConfig olcDatabase: {1}hdb olcSuffix: dc=example,dc=com olcDbDirectory: /var/lib/ldap olcRootDN: cn=Manager,dc=example,dc=com olcRootPW: secret olcDbConfig: set_cachesize 0 2097152 0 olcDbConfig: set_lk_max_objects 1500 olcDbConfig: set_lk_max_locks 1500 olcDbConfig: set_lk_max_lockers 1500 olcDbIndex: objectClass eq olcLastMod: TRUE olcDbCheckpoint: 512 30 olcAccess: to attrs=userPassword by dn="cn=Manager,dc=example,dc=com" write by anonymous auth by self write by * none olcAccess: to attrs=shadowLastChange by self write by * read olcAccess: to dn.base="" by * read olcAccess: to * by dn="cn=Manager,dc=example,dc=com" write by * read ### end backend.ldif ###
然后运行如下命令使配置生效:
ldapadd -Y EXTERNAL -H ldapi:/// -f backend.ldif
2. slapd.conf配置
/etc/ldap/slapd.d
是2.4.x版本新采用的配置文件目录,但手动编辑slapd.d
目录下ldif
是非常痛苦的,如果你不习惯新的配置目录格式,你可以通过修改/etc/default/slapd
中的SLAPD_CONF=
为SLAPD_CONF="/etc/ldap/slapd.conf"
。
slapd.conf
配置形式官方已经废弃了但依然支持,你还可以选择在编辑完熟悉的slapd.conf
后使用openldap提供的slaptest工具将它转换成slapd.d
配置目录:
mv /etc/ldap/slapd.d <path>/slapd.d #备份原目录 cp /usr/share/slapd/slapd.conf /etc/ldap/ cd /etc/ldap/ vim slapd.conf #配置ldap slaptest -f /etc/ldap/slapd.conf -F /etc/ldap/slapd.d/ #把修改好的sldapd.conf转换成slapd.d/的配置形式 chown -R openldap:openldap /etc/ldap/slapd.d/ #修改转换好的slapd.d/的用户和组
slapd.conf配置修改样例:
5. # BDB definition for the example.com 6. database bdb 7. suffix "dc=example,dc=com" 8. directory /usr/local/var/openldap-data 9. rootdn "cn=Manager,dc=example,dc=com" 10. rootpw secret 11. # indexed attribute definitions 12. index uid pres,eq 13. index cn,sn pres,eq,approx,sub 14. index objectClass eq 15. # database access control definitions 16. access to attrs=userPassword 17. by self write 18. by anonymous auth 19. by dn.base="cn=Admin,dc=example,dc=com" write 20. by * none 21. access to * 22. by self write 23. by dn.base="cn=Admin,dc=example,dc=com" write 24. by * read
参考:The slapd Configuration File
上面例子中rootpw都是明文显示的,也可以加密存储:
$ slappasswd -h {SHA} -s secret {SHA}5en6G6MezRroT3XKqkdPOmY/BfQ=
用{SHA}5en6G6MezRroT3XKqkdPOmY/BfQ=代替secret即可。
1. backend & database
ldap的后台进程slapd接收、响应请求,但实际存储数据、获取数据的操作是由Backends做的,而数据是存放在database中,所以你可以看到往往你可以看到backend
和database
指令是一样的值如 bdb 。一个 backend 可以有多个 database instance,但每个 database 的 suffix 和 rootdn 不一样。openldap 2.4版本的模块是动态加载的,所以在使用backend时需要moduleload back_bdb
指令。
bdb
是一个高性能的支持事务和故障恢复的数据库后端,可以满足绝大部分需求。许多旧文档里(包括官方)说建议将bdb
作为首选后端服务(primary backend),但2.4版文档明确说hdb
才是被首先推荐使用的,这从 2.4.40 版默认安装后的配置文件里也可以看出。hdb是基于bdb的,但是它通过扩展的索引和缓存技术可以加快数据访问,修改entries会更有效率,有兴趣可以访问上的链接或slapd.backends。
另外config
是特殊的backend,用来在运行时管理slapd的配置,它只能有一个实例,甚至无需显式在slapd.conf中配置。