CentOS下LDAP服务配置指南(2)
时间:2014-05-20 11:36 来源:linux.it.net.cn 作者:IT网
三LDAP服务器复制
LDAP服务器可以备份冗余来提高系统得安全性。复制是通过进程slurpd
提供的,它会周期性的唤醒,并检查主服务器上的日志文件,从而确定是否有
任何更新。这些更新然后会传播到从服务器上。复制的配置文件也是slapd.conf
<1> 主服务器上首先关机,然后配置文件slapd.conf如下:
replogfile /var/lib/ldap/openldap-master-replog
replica uri=ldap://从服务器地址或主机名:389
binddn=“cn=Manager,dc=boy,dc=com”
bindmethod=simple credentials=密码
在配置文件中设定从服务器的地址和有权限的管理员。
<2>从服务器上配置文件slapd.conf如下:
updatedn “cn=Manager,dc=boy,dc=com”
updateref ldap://主服务器地址或名:389
<3>从服务器上开启服务并将数据导入和主服务器一致。
#ldapadd –x –D”cn=Manager,dc=boy,dc=com” –W –f ldapusers.ldif
<4>导入后再开启主服务器观察是否能复制同步。
主服务器上ldapdelete –x –D”cn=Manager,dc=boy,dc=com” –W
‘uid=user1,ou=People,dc=boy,dc=com’
从服务器上应该同步。
主服务器上/var/lib/ldap/replica/目录下有两个文件
slurpd.replog à 复制日志,实际的变化以LDIF格式保存在其中。
slurpd.status à 复制时间纪录,同步时间戳。
复制可以看到一条端口通道
netstat –an | grep 主服务器地址
主机地址:389 从服务器地址:大于1000的端口号。
四.安全性:LDAP服务器安全通信
LDAP是以明文的格式通过网络来发送所有信息的,包括用户名和密码。这
样会有严重的安全隐患。不过可以在传输层采用SSL安全套接层所提供的加密机制来解决这个问题。SSL(Secure Socket Layer)是目前应用最广泛的安全协议,由两部分组成——SSL握手协议(SSL Handshare Protocol)和SSL记录协议(SSL Record Protocol)。上层的握手协议的作用在于建立SSL连接,协商会话密
钥。下层的记录协议则负责处理数据的加解密。LDAP+SSL=LDAPS服务,该服
务监听636端口,当有客户端向这个端口发起连接时,双方首先要进行安全连接
的初始化和协商,通常需要服务器端向客户端提供自己的证书,客户端解签名确认服务器端身份的真实性。这需要PKI公钥基础结构的支持。在我们企业的局域网中可以使用openssl软件包来创建一个根CA认证服务器,由根CA向自己颁发LDAP服务的使用证书。公钥包含在证书之中,其中包括了服务器完整域名(FQDN)名。在LDAP服务的客户端存放一张根CA的证书,并且用这一张授权证书去检测LDAP服务器证书的有效性和真实性。
<1>根CA配置
(1)编辑/etc/pki/tls/openssl.cnf 文件首先备份成openssl.cnf.raw
[CA_default]
default_days = 3650 à 证书有效期为十年
[req]
default_bits = 1024 改为 2048 à 金钥的字节
[usr_cert]
basicConstraints=CA: FALSE 改为 CA:TRUE à 可以签发下级
[V3_req]
basicConstraints = CA : FALSE 改为 CA:TRUE
编辑后改名openssl.cnf.rootca 制作根CA的配置文件
cp /etc/pki/tls/openssl.cnf /etc/pki/tls/openssl.cnf.rootca
使其能够签发下级证书。
(2)进入/etc/pki/tls/misc 目录。
在该目录中有一个CA脚本文件可以用它来制作根CA。
编辑CA文件找到DAY=“-days ” 和CADAY=“-days ”
配置为 DAYS=“—days 3650”#10years
CADAYS=“—days 3650”#10years
执行脚本文件CA创建根CA机构
#./CA -newca
创建成功后转入/etc/pki/CA/private/目录,有cakey.pem金钥。
/etc/pki/CA/下有根CA的证书cacert.pem。
#openssl x509 –noout –text –in cacert.pem
必须要显示 X509V3 Constraints:
CA:TRUE à 表示可以签发下级证书。
<2>签发LDAP服务器证书。
LDAP服务器证书也由根CA签发,不过该证书在扩展结构上应该是一张
终端用户证书,所以必须修改/etc/pki/tls/openssl.cnf文件适应变化。
#cp openssl.cnf.raw openssl.cnf
服务器签发证书文件配置
[CA_default]
default_days=3650
[req]
default_bits=1024
[usr_cert]
basicConstraints=CA:FALSE
[V3_req]
basicContraints=CA:FALSE
#cd /etc/pki/tls/misc/
#./CA -newreq
#./CA -sign
这样LDAP服务器证书就制作完毕了,不过一定要确定是一张终端证书。
验证LDAP服务器端证书:
#openssl X509 –noout –text –in newcert.pem
X509V3 Basic Constraints:
CA:FALSE à 表明是一张终端证书。
#openssl verify –CAfile /etc/pki/CA/cacert.pem newcert.pem
成功会显示newcert.pem:OK à 表明新证书newcert.pem是由根证书cacert.pem
授权。
<3>辅助服务器上配置openssl.cnf文件同主服务器,唯有FQDN名不同。事实上用CA脚本签发证书是一种简捷方式,原始的命令行方式
如下:
#openssl genrsa –des3 –out server.key 1024
生成一把服务器RSA私钥
#openssl req –new –key server.key –out server.csr
生成服务器证书申请文件。并将该证书申请文件安全(SCP)传送到根CA服务器上签发。
#cp server.csr /etc/pki/CA/private/
#openssl ca –out server.cert –policy_anything –infile server.csr
签发完毕后根CA服务器将自己的证书cacert.pem和server.cert都传回LDAP辅助服务器。
<4>LDAP服务器配置使用SSL
使用SSL安全通信需要重新配置服务器端slapd.conf文件添加SSL支持。同时将cacert.pem,LDAP服务器证书和金钥放入指定路径。
slapd.conf文件配置改动:
指定到以下三行去注释并添加
TLSCACertificateFile /etc/openldap/cacerts/cacert.pem
TLSCertificateFile /etc/openldap/cacerts/slapdcert1.pem
TLSCertificatekeyFile /etc/openldap/cacerts/slapdkey1.pem
TLSVerifyClient never
第一行设置了根CA证书的存放路径,第二行和第三行分别是服务器证书和私钥的存放路径。第四行表明服务器端不需要客户端提供证书这是一个单向认证。
将指定文件复制到指定目录并更改权限为ldap所有,同时保证安全性。
#cp server.cert /etc/openldap/cacerts/slapdcert1.pem
#chown ldap :ldap slapdcert1.pem àldap用户所有
#cp server.key /etc/openldap/cacerts/slapdkey1.pem à用户可读
#chown ldap:ldap slapdkey1.pem
#chmod 400 slapdkey1.pem à密钥文件很重要只有ldap用户可读
复制选项也要改变因为SSL使用636安全通道。更改slapd.conf文件如下:
replica uri=ldaps://辅助服务器名:636
辅助服务器名一定要和证书中的FQDN名一致否则不能正常通信,安全端口更改为636。去除starttls=critical这一句话。
<5>LDAP客户端配置支持安全通信。
同理LDAP客户端也要配置支持LDAPS实现安全通信。
将根CA证书分发给每一个客户端并存放在相应目录。配置/etc/ldap.conf和
/etc/openldap/ldap.conf文件支持SSL。
(1)/etc/ldap.conf文件配置更改
去“#”并添加以下四行
ssl on (启用ssl使用636端口)
tls_checkpeer yes 检查对等体
tls_cacertfile /etc/openldap/cacerts/cacert.pem 根CA文件路径
pam_password md5 密码md5认证
(2)/etc/openldap/ldap.conf文件配置更改
URI ldaps://主服务器器完全名 ldaps://辅助服务器完全名(添加S)
BASE dc=boy,dc=com
TLS_CACERT /etc/openldap/cacerts/cacert.pem
TLS_REQCERT demand à 客户端必须要求服务器端证书
客户端测试连接命令:
openssl s_client –connect 服务器完全名:636 –state –CAfile
/etc/openldap/cacerts/cacert.pem
测试成功代码为0
verify return code:0(ok)
重启service nscd restart
ldapsearch –x –LLL
getent passwd
netstat –an | grep 636
通过以上三个命令查看服务是否成功。
LDAPS 采用636通道,安装完毕可关闭389普通服务端口
补充:
LDAP密码更改
(1)ldappasswd –x –D“cn=admin,ou=People,dc=boy,dc=com ” -W ‘uid=admin,
ou=People,dc=boy,dc=com’ –S
上面是LDAP用户改密码的标准格式
(2)/etc/ldap.secret 文件。
该文件是绑定管理员的密码设置应用于LDAP。该文件需手工编写存放有资格修
改用户密码的LDAP管理员密码。要使该文件生效还必须在/etc/ldap.conf 文件中
设置rootbinddn uid=admin,ou=People,dc=boy,dc=com
这样客户端就可以使用passwd 命令修改密码。但是必须注意如果本地/etc/passwd中有同名帐户的话则该本地,本地没有同名用户则改远程LDAP服务器数据库中的用户密码。
(3)辅助服务器中的updateref指令对超级管理员无效。
updateref ldap://LDAP.boy.com :636
表明该辅助服务器只能读不能“写”只能查询不能更改数据
普通用户向辅助服务器修改数据会出现Referral :ldaps://LDAP.boy.com :636
但对超级管理员才cn=Manager,dc=boy,dc=com 无效。
设备登录限制
LDAP用户登录客户端除了可以使用host属性
(1)服务器上数据库中LDAP用户添加host属性可以登录指定主机
dn:uid=testuser,ou=People,dc=boy,dc=com
uid: testuser
cn: testuser
objectClass:account
objectClass:posixAccount
objectClass:shadowAccount
loginShell:/bin/bash
uidNumber:1001
gidNumber:1001
homeDirectory:/home/user1
host:client1.boy.com
host:client2.boy.com
客户端client1.boy.com /etc/ldap.conf 配置
#check the ‘host’ attribute for access control
#Default is no;if set to yes,and user has no
#value for the host attribute,and pam_ldap is
#configured for will not be allowed to login.
pam_check_host_ attr yes
(2) 也可以反过来针对每一个客户端主机来指定可以登录的用户
LDAP数据库中例:
dn:cn=client1.boy.com,ou=Hosts,dc=boy,dc=com
ipHostNumber: 192.168.10.7
cn:client1.boy.com
objectClass:ipHost
objectClass:device
objectClass:extensibleObject
uniqueMember:uid=root,ou=People,dc=boy,dc=com
uniqueMember:uid=testuser,ou=People,dc=boy,dc=com
客户端配置/etc/ldap.conf文件
pam_groupdn cn=client1.boy.com,ou=Hosts,dc=boy,dc=com
pam_member_attribute uniquemember
其实还可以做更简单的配置在客户端主机上修改/etc/ldap.conf文件来限定搜索
LDAP服务器目录树的范围
/etc/ldap.conf
nss_base_passwd ou=IT,ou=People,dc=boy,dc=com
nss_base_shadow ou=IT,ou=People,dc=boy,dc=com
nss_base_group ou=IT,ou=Group,dc=boy,dc=com
这样LDAP帐户在登录时会限定绑定服务器数据库的范围在IT 部。
用ACL来控制用户访问LDAP数据库的权限
LDAP中存放的数据不多,但大多是非常敏感、重要的数据,因此,必须对访问进行严格的控制,不同的用户能够访问不同的数据。Openldap使用ACL访问控制列表来实现权限的控制。
经典访问控制在LDAP服务器端/etc/openldap/slapd.conf文件中access设置
access to attrs=userPassword
by anonymous auth
by dn= “cn=Manager,dc=boy,dc=com” write
by dn=”uid=admin,ou=People,dc=boy,dc=com” write
by self write
access to *
by dn=”cn=Manager,dc=boy,dc=com” write
by self write
by * read
使用该配置匿名用户不能查询他人密码,用户admin拥有修改密码特权。
(责任编辑:IT)
三LDAP服务器复制 LDAP服务器可以备份冗余来提高系统得安全性。复制是通过进程slurpd 提供的,它会周期性的唤醒,并检查主服务器上的日志文件,从而确定是否有 任何更新。这些更新然后会传播到从服务器上。复制的配置文件也是slapd.conf <1> 主服务器上首先关机,然后配置文件slapd.conf如下: replogfile /var/lib/ldap/openldap-master-replog replica uri=ldap://从服务器地址或主机名:389 binddn=“cn=Manager,dc=boy,dc=com” bindmethod=simple credentials=密码 在配置文件中设定从服务器的地址和有权限的管理员。 <2>从服务器上配置文件slapd.conf如下: updatedn “cn=Manager,dc=boy,dc=com” updateref ldap://主服务器地址或名:389 <3>从服务器上开启服务并将数据导入和主服务器一致。 #ldapadd –x –D”cn=Manager,dc=boy,dc=com” –W –f ldapusers.ldif <4>导入后再开启主服务器观察是否能复制同步。 主服务器上ldapdelete –x –D”cn=Manager,dc=boy,dc=com” –W ‘uid=user1,ou=People,dc=boy,dc=com’ 从服务器上应该同步。 主服务器上/var/lib/ldap/replica/目录下有两个文件 slurpd.replog à 复制日志,实际的变化以LDIF格式保存在其中。 slurpd.status à 复制时间纪录,同步时间戳。 复制可以看到一条端口通道 netstat –an | grep 主服务器地址 主机地址:389 从服务器地址:大于1000的端口号。 四.安全性:LDAP服务器安全通信 LDAP是以明文的格式通过网络来发送所有信息的,包括用户名和密码。这 样会有严重的安全隐患。不过可以在传输层采用SSL安全套接层所提供的加密机制来解决这个问题。SSL(Secure Socket Layer)是目前应用最广泛的安全协议,由两部分组成——SSL握手协议(SSL Handshare Protocol)和SSL记录协议(SSL Record Protocol)。上层的握手协议的作用在于建立SSL连接,协商会话密 钥。下层的记录协议则负责处理数据的加解密。LDAP+SSL=LDAPS服务,该服 务监听636端口,当有客户端向这个端口发起连接时,双方首先要进行安全连接 的初始化和协商,通常需要服务器端向客户端提供自己的证书,客户端解签名确认服务器端身份的真实性。这需要PKI公钥基础结构的支持。在我们企业的局域网中可以使用openssl软件包来创建一个根CA认证服务器,由根CA向自己颁发LDAP服务的使用证书。公钥包含在证书之中,其中包括了服务器完整域名(FQDN)名。在LDAP服务的客户端存放一张根CA的证书,并且用这一张授权证书去检测LDAP服务器证书的有效性和真实性。 <1>根CA配置 (1)编辑/etc/pki/tls/openssl.cnf 文件首先备份成openssl.cnf.raw [CA_default] default_days = 3650 à 证书有效期为十年 [req] default_bits = 1024 改为 2048 à 金钥的字节 [usr_cert] basicConstraints=CA: FALSE 改为 CA:TRUE à 可以签发下级 [V3_req] basicConstraints = CA : FALSE 改为 CA:TRUE 编辑后改名openssl.cnf.rootca 制作根CA的配置文件 cp /etc/pki/tls/openssl.cnf /etc/pki/tls/openssl.cnf.rootca 使其能够签发下级证书。 (2)进入/etc/pki/tls/misc 目录。 在该目录中有一个CA脚本文件可以用它来制作根CA。 编辑CA文件找到DAY=“-days ” 和CADAY=“-days ” 配置为 DAYS=“—days 3650”#10years CADAYS=“—days 3650”#10years 执行脚本文件CA创建根CA机构 #./CA -newca 创建成功后转入/etc/pki/CA/private/目录,有cakey.pem金钥。 /etc/pki/CA/下有根CA的证书cacert.pem。 #openssl x509 –noout –text –in cacert.pem 必须要显示 X509V3 Constraints: CA:TRUE à 表示可以签发下级证书。 <2>签发LDAP服务器证书。 LDAP服务器证书也由根CA签发,不过该证书在扩展结构上应该是一张 终端用户证书,所以必须修改/etc/pki/tls/openssl.cnf文件适应变化。 #cp openssl.cnf.raw openssl.cnf 服务器签发证书文件配置 [CA_default] default_days=3650 [req] default_bits=1024 [usr_cert] basicConstraints=CA:FALSE [V3_req] basicContraints=CA:FALSE #cd /etc/pki/tls/misc/ #./CA -newreq #./CA -sign 这样LDAP服务器证书就制作完毕了,不过一定要确定是一张终端证书。 验证LDAP服务器端证书: #openssl X509 –noout –text –in newcert.pem X509V3 Basic Constraints: CA:FALSE à 表明是一张终端证书。 #openssl verify –CAfile /etc/pki/CA/cacert.pem newcert.pem 成功会显示newcert.pem:OK à 表明新证书newcert.pem是由根证书cacert.pem 授权。 <3>辅助服务器上配置openssl.cnf文件同主服务器,唯有FQDN名不同。事实上用CA脚本签发证书是一种简捷方式,原始的命令行方式 如下: #openssl genrsa –des3 –out server.key 1024 生成一把服务器RSA私钥 #openssl req –new –key server.key –out server.csr 生成服务器证书申请文件。并将该证书申请文件安全(SCP)传送到根CA服务器上签发。 #cp server.csr /etc/pki/CA/private/ #openssl ca –out server.cert –policy_anything –infile server.csr 签发完毕后根CA服务器将自己的证书cacert.pem和server.cert都传回LDAP辅助服务器。 <4>LDAP服务器配置使用SSL 使用SSL安全通信需要重新配置服务器端slapd.conf文件添加SSL支持。同时将cacert.pem,LDAP服务器证书和金钥放入指定路径。 slapd.conf文件配置改动: 指定到以下三行去注释并添加 TLSCACertificateFile /etc/openldap/cacerts/cacert.pem TLSCertificateFile /etc/openldap/cacerts/slapdcert1.pem TLSCertificatekeyFile /etc/openldap/cacerts/slapdkey1.pem TLSVerifyClient never 第一行设置了根CA证书的存放路径,第二行和第三行分别是服务器证书和私钥的存放路径。第四行表明服务器端不需要客户端提供证书这是一个单向认证。 将指定文件复制到指定目录并更改权限为ldap所有,同时保证安全性。 #cp server.cert /etc/openldap/cacerts/slapdcert1.pem #chown ldap :ldap slapdcert1.pem àldap用户所有 #cp server.key /etc/openldap/cacerts/slapdkey1.pem à用户可读 #chown ldap:ldap slapdkey1.pem #chmod 400 slapdkey1.pem à密钥文件很重要只有ldap用户可读 复制选项也要改变因为SSL使用636安全通道。更改slapd.conf文件如下: replica uri=ldaps://辅助服务器名:636 辅助服务器名一定要和证书中的FQDN名一致否则不能正常通信,安全端口更改为636。去除starttls=critical这一句话。 <5>LDAP客户端配置支持安全通信。 同理LDAP客户端也要配置支持LDAPS实现安全通信。 将根CA证书分发给每一个客户端并存放在相应目录。配置/etc/ldap.conf和 /etc/openldap/ldap.conf文件支持SSL。 (1)/etc/ldap.conf文件配置更改 去“#”并添加以下四行 ssl on (启用ssl使用636端口) tls_checkpeer yes 检查对等体 tls_cacertfile /etc/openldap/cacerts/cacert.pem 根CA文件路径 pam_password md5 密码md5认证 (2)/etc/openldap/ldap.conf文件配置更改 URI ldaps://主服务器器完全名 ldaps://辅助服务器完全名(添加S) BASE dc=boy,dc=com TLS_CACERT /etc/openldap/cacerts/cacert.pem TLS_REQCERT demand à 客户端必须要求服务器端证书 客户端测试连接命令: openssl s_client –connect 服务器完全名:636 –state –CAfile /etc/openldap/cacerts/cacert.pem 测试成功代码为0 verify return code:0(ok) 重启service nscd restart ldapsearch –x –LLL getent passwd netstat –an | grep 636 通过以上三个命令查看服务是否成功。 LDAPS 采用636通道,安装完毕可关闭389普通服务端口 补充: LDAP密码更改 (1)ldappasswd –x –D“cn=admin,ou=People,dc=boy,dc=com ” -W ‘uid=admin, ou=People,dc=boy,dc=com’ –S 上面是LDAP用户改密码的标准格式 (2)/etc/ldap.secret 文件。 该文件是绑定管理员的密码设置应用于LDAP。该文件需手工编写存放有资格修 改用户密码的LDAP管理员密码。要使该文件生效还必须在/etc/ldap.conf 文件中 设置rootbinddn uid=admin,ou=People,dc=boy,dc=com 这样客户端就可以使用passwd 命令修改密码。但是必须注意如果本地/etc/passwd中有同名帐户的话则该本地,本地没有同名用户则改远程LDAP服务器数据库中的用户密码。 (3)辅助服务器中的updateref指令对超级管理员无效。 updateref ldap://LDAP.boy.com :636 表明该辅助服务器只能读不能“写”只能查询不能更改数据 普通用户向辅助服务器修改数据会出现Referral :ldaps://LDAP.boy.com :636 但对超级管理员才cn=Manager,dc=boy,dc=com 无效。 设备登录限制 LDAP用户登录客户端除了可以使用host属性 (1)服务器上数据库中LDAP用户添加host属性可以登录指定主机 dn:uid=testuser,ou=People,dc=boy,dc=com uid: testuser cn: testuser objectClass:account objectClass:posixAccount objectClass:shadowAccount loginShell:/bin/bash uidNumber:1001 gidNumber:1001 homeDirectory:/home/user1 host:client1.boy.com host:client2.boy.com 客户端client1.boy.com /etc/ldap.conf 配置 #check the ‘host’ attribute for access control #Default is no;if set to yes,and user has no #value for the host attribute,and pam_ldap is #configured for will not be allowed to login. pam_check_host_ attr yes (2) 也可以反过来针对每一个客户端主机来指定可以登录的用户 LDAP数据库中例: dn:cn=client1.boy.com,ou=Hosts,dc=boy,dc=com ipHostNumber: 192.168.10.7 cn:client1.boy.com objectClass:ipHost objectClass:device objectClass:extensibleObject uniqueMember:uid=root,ou=People,dc=boy,dc=com uniqueMember:uid=testuser,ou=People,dc=boy,dc=com 客户端配置/etc/ldap.conf文件 pam_groupdn cn=client1.boy.com,ou=Hosts,dc=boy,dc=com pam_member_attribute uniquemember 其实还可以做更简单的配置在客户端主机上修改/etc/ldap.conf文件来限定搜索 LDAP服务器目录树的范围 /etc/ldap.conf nss_base_passwd ou=IT,ou=People,dc=boy,dc=com nss_base_shadow ou=IT,ou=People,dc=boy,dc=com nss_base_group ou=IT,ou=Group,dc=boy,dc=com 这样LDAP帐户在登录时会限定绑定服务器数据库的范围在IT 部。 用ACL来控制用户访问LDAP数据库的权限 LDAP中存放的数据不多,但大多是非常敏感、重要的数据,因此,必须对访问进行严格的控制,不同的用户能够访问不同的数据。Openldap使用ACL访问控制列表来实现权限的控制。 经典访问控制在LDAP服务器端/etc/openldap/slapd.conf文件中access设置 access to attrs=userPassword by anonymous auth by dn= “cn=Manager,dc=boy,dc=com” write by dn=”uid=admin,ou=People,dc=boy,dc=com” write by self write access to * by dn=”cn=Manager,dc=boy,dc=com” write by self write by * read 使用该配置匿名用户不能查询他人密码,用户admin拥有修改密码特权。 (责任编辑:IT) |