LDAP 的意思是轻量目录访问协议,它是 X500 协议的简化版本。本节中的目录设置将会被用于认证。然而,一个 LDAP 目录在各种应用中可以被以不同方式使用:认证、共享目录(用于邮件客户端)。LDAP 是一种被广泛使用的标准。
快速描述下 LDAP,所有的信息都被存储在一棵树中。您需要自己决定目录的树状结构(目录信息树:DIT)。我们将从一棵在根上有着两个节点的基本的树开始:
"People" 节点,将存储您的用户
"Groups" 节点,将存储您的组
您需要首先决定您的 LDAP 的根是什么。默认情况下,您的树是由您的互联网域名决定的。如果您的域名是 example.com (我们将在上面的例子中使用这个域名),您的根就会是 dc=example,dc=com。
首先,在服务器上安装 ldap 服务器守护程序 (slapd);安装下列软件包:slapd
和 ldap-utils
。
在被询问时输入您的域名和您想用于目录管理员的密码。
几乎不需对默认配置进行更改。首先通过编辑 /etc/ldap/slapd.conf
文件,在配置文件中(而不是在目录中)设置 root 密码。
然而不要使用明文密码。要生成一个加密过的密码,先使用 slappasswd 您的密码
$ slappasswd New password: Re-enter password: {SSHA}d2BamRTgBuhC6SxC0vFGWol31ki8iq5m
本例显示了使用字符串"secret"作为密码的情况。(由于 SSHA 加密机制的本质,您的结果会有所不同。)
现在编辑 /etc/ldap/slapd.conf
文件并将生成的字符串复制粘贴进去。
# Make sure you edit or add these directives after the first 'database' directive. suffix "dc=example,dc=com" directory "/var/lib/ldap" rootdn "cn=admin,dc=example,dc=com" rootpw {SSHA}d2BamRTgBuhC6SxC0vFGWol31ki8iq5m
目录在安装时已被创建,现在是时候填入内容了。我们会向其中填入一个“经典”条目,其将能与目录(例如一个共享目录的)、经典账号(一个 web 应用程序的) 以及 Unix 账号 (posix) 兼容。
LDAP 目录能够使用一个 ldif 文件 (ldif 的意思是 ldap 目录交换格式)。请在您的系统的某处产生这个样例文本文件 init.ldif。
dn: dc=example,dc=com objectClass: dcObject objectClass: organizationalUnit dc: example ou: Example Dot Com dn: ou=people,dc=example,dc=com objectClass: organizationalUnit ou: people dn: ou=groups,dc=example,dc=com objectClass: organizationalUnit ou: groups dn: uid=john,ou=people,dc=example,dc=com objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount uid: john sn: Doe givenName: John cn: John Doe displayName: John Doe uidNumber: 1000 gidNumber: 10000 userPassword: password gecos: John Doe loginShell: /bin/bash homeDirectory: /home/john shadowExpire: -1 shadowFlag: 0 shadowWarning: 7 shadowMin: 8 shadowMax: 999999 shadowLastChange: 10877 mail: john.doe@example.com postalCode: 31000 l: Toulouse o: Example mobile: +33 (0)6 xx xx xx xx homePhone: +33 (0)5 xx xx xx xx title: System Administrator postalAddress: initials: JD dn: cn=example,ou=groups,dc=example,dc=com objectClass: posixGroup cn: example gidNumber: 10000
在上面的例子中,设置了目录结构、一个用户和一个组。在其它的例子中您可能会看到 objectClass: top 被添加到每个条目中,但这是默认的行为,因此您不必显式添加它。
现在,将您的条目添加到 LDAP:
停止 LDAP 守护程序: sudo /etc/init.d/slapd stop
删除在安装时自动添加的内容: sudo rm -rf /var/lib/ldap/*
添加我们的内容 sudo slapadd -l init.ldif
启动 LDAP 守护程序: sudo /etc/init.d/slapd start
我们可以使用 ldap-utils
软件包中的工具来检查内容是否已被正确添加。要在 LDAP 目录中执行搜索:
ldapsearch -xLLL -b "dc=example,dc=com" uid=john sn givenName cn dn: uid=john,ou=people,dc=example,dc=com cn: John Doe sn: Doe givenName: John
简单的解释:
使用 -x 是因为我们不使用 SASL 认证方法 (默认)
-LLL 关闭打印 LDIF 信息
认证需要对密码域的访问,而密码域不该是默认可访问的。另一个问题是在改变密码时也需要能够使用 passwd shadowLastChange。下面的代码显示了一个允许访问 shadowLastChange 的 ACL 设置样例:
access to attr=shadowLastChange by dn="cn=manager,dc=example,dc=com" write by self write by * read
LDAP 服务经常会很快成为一个信息系统中极为关键的服务:所有东西都依赖于 LDAP:认证、授权、邮件系统等。这时设置一个冗余系统就是一个好主意。其很容易设置,这里是一个快速指南。
在这里副本会基于一个主从关系。在实现 LDAP 之前请先考虑以下步骤:
停止主服务器的 slapd 守护进程。
重新配置主服务器的 slapd.conf 文件来激活到新从服务器的副本。
导出主服务器的数据库。
配置副本服务器的 slapd.conf
。
将主服务器的数据库导入到从服务器。
重/启动副本服务器的 slapd 进程
重/启动主服务器的 slapd 进程。
您需要记住 总是 在主服务器上进行更改。如果您更改了从服务器,这些更改会被丢弃。
在主服务器上,您需要修改 /etc/ldap/slapd.conf
的数据库部分以便添加一个副本。以下的例子显示了一个在 ldap-2.example.com 中的副本,拥有 Manager 用户,并以 secret 作为密码。副本日志文件是用来存储在发送到 LDAP 从服务器之前的更改的。
replica uri=ldap://ldap-2.example.com:389 binddn="cn=Manager,dc=example,dc=com" bindmethod=simple credentials=secret replogfile /var/lib/ldap/replog
使用 slapcat 导出主服务器的数据库。然后使用 scp 或是其它工具将 master.ldif 复制到从服务器。
user@master:~$ sudo slapcat -l master.ldif
在从服务器上,您需要授权您的主服务器更新 LDAP 数据库。在您的 /etc/ldap/slapd.conf
文件的数据库部分添加如下的行:
updatedn cn=Manager,dc=example,dc=com updateref ldap://ldap-1.example.com
使用 slapadd 导入 master.ldif
。
user@slave:~$ sudo slapadd -c -l master.ldif
重启主服务器。
user@master:~$ sudo /etc/init.d/slapd start
重启从服务器。
user@slave:~$ sudo /etc/init.d/slapd start