作者:瀚高PG实验室 (Highgo PG Lab)

目录

环境

文档用途

详细信息

环境

系统平台:Linux x86-64 Red Hat Enterprise Linux 7

版本:5.6.5


文档用途

服务器端配置

1. 服务器配置

1.1 关闭防火墙和selinux

关闭防火墙
systemctl disable firewalld.service
systemctl stop firewalld.service
 
关闭seLinux
sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config
setenforce 0

2.ldap安装

yum install -y openldap  openldap-servers  openldap-clients

cp /usr/share/openldap-servers/DB_CONFIG.example
/var/lib/ldap/DB_CONFIG
# 授权给ldap用户,此用户yum安装时便会自动创建
chown -R ldap. /var/lib/ldap/DB_CONFIG

3.启动服务

启动服务
systemctl start slapd
systemctl enable slapd
检查状态
systemctl status slapd

4.验证ldap启动信息

[root@patroni1 cn=config]#  netstat -ntupl | grep LISTEN | grep -i 389
tcp        0      0 0.0.0.0:389             0.0.0.0:*               LISTEN      117152/slapd        
tcp6       0      0 :::389                  :::*                    LISTEN      117152/slapd

5.配置ldap

从openldap2.4.23版本开始,所有配置都保存在/etc/openldap/slapd.d目录下的cn=config文件夹内,不再使用slapd.conf作为配置文件。配置文件的后缀为 ldif,且每个配置文件都是通过命令自动生成的,任意打开一个配置文件,在开头都会有一行注释,说明此为自动生成的文件,请勿编辑,使用ldapmodify命令进行修改
# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
 
  安装openldap后,会有三个命令用于修改配置文件,分别为ldapadd, ldapmodify, ldapdelete,顾名思义就是添加,修改和删除。而需要修改或增加配置时,则需要先写一个ldif后缀的配置文件,然后通过命令将写的配置更新到slapd.d目录下的配置文件中去,完整的配置过程如下,
 
注意:所有的配置文件不要在/etc/openldap/slapd.d/cn=config/下配置

5.1 生成密码

[root@patroni1 config]# slappasswd -s 123456
{SSHA}RRdz9k1wv+cbg8RKbKvI/NCm7LKTT8sk

5.2 修改密码

先创建修改密码文件
[root@patroni1 ~]# cat changepwd.ldif
dn: olcDatabase={0}config,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}RRdz9k1wv+cbg8RKbKvI/NCm7LKTT8sk
 
 
# 执行命令,修改ldap配置,通过-f执行文件
[root@patroni2 cn=config]# ldapadd -Y EXTERNAL -H ldapi:/// -f  hg.ldif

ldap新建用户 ldap搭建_vim

查看olcDatabase={0}config内容,新增了一个olcRootPW项。

ldap新建用户 ldap搭建_配置文件_02

5.3导入schema

# 我们需要向 LDAP 中导入一些基本的 Schema。这些 Schema 文件位于 /etc/openldap/schema/ 目录中,schema控制着条目拥有哪些对象类和属性,可以自行选择需要的进行导入,
# 依次执行下面的命令,导入基础的一些配置,我这里将所有的都导入一下,其中core.ldif是默认已经加载了的,不用导入
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/collective.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/corba.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/duaconf.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/dyngroup.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/java.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/misc.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/openldap.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/pmi.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/ppolicy.ldif

5.4修改域名

创建域名文件
[root@patroni1 ~]# cat changedomain.ldif
dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.base="cn=admin,dc=highgo,dc=com" read by * none
 
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=highgo,dc=com
 
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=admin,dc=highgo,dc=com
 
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}RRdz9k1wv+cbg8RKbKvI/NCm7LKTT8sk
 
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=admin,dc=highgo,dc=com" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=admin,dc=highgo,dc=com" write by * read
 
执行修改:
[root@patroni1 cn=config]# ldapmodify -Y EXTERNAL -H ldapi:/// -f changedomain.ldif

ldap新建用户 ldap搭建_ldap新建用户_03

5.5创建目录

到此,配置修改完了,在上述基础上,我们来创建一个叫做 highgo company 的组织,并在其下创建一个 admin 的组织角色(该组织角色内的用户具有管理整个 LDAP 的权限)和 People 和 Group 两个组织单元:
 
[root@patroni1 ~]# cat base.ldif
dn: dc=highgo,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: Highgo Company
dc: highgo
 
dn: cn=admin,dc=highgo,dc=com
objectClass: organizationalRole
cn: admin
 
dn: ou=People,dc=highgo,dc=com
objectClass: organizationalUnit
ou: People
 
dn: ou=Group,dc=highgo,dc=com
objectClass: organizationalRole
cn: Group
 
# 执行命令,添加配置, 这里要注意修改域名为自己配置的域名,然后需要输入上面我们生成的密码
[root@patroni1 cn=config]# ldapadd -x -D cn=admin,dc=highgo,dc=com -W -f base.ldif       
Enter LDAP Password:
adding new entry "dc=highgo,dc=com"

通过以上的所有步骤,我们就设置好了一个 LDAP 目录树:其中基准 dc=highgo,dc=com 是该树的根节点,其下有一个管理域 cn=admin,dc=highgo,dc=com 和两个组织单元 ou=People,dc=highgo,dc=com 及 ou=Group,dc=highgo,dc=com。

5.6 开启日志功能

 

1.创建日志文件
mkdir -p /var/log/slapd
chown ldap:ldap /var/log/slapd/
touch /var/log/slapd/ldap.log
chown ldap. /var/log/slapd/ldap.log
 
[root@patroni1 ~]# vim loglevel.ldif
 
dn: cn=config
changetype: modify
replace: olcLogLevel
olcLogLevel: stats
 
 
执行修改
[root@patroni1 ~]# ldapmodify -Y EXTERNAL -H ldapi:/// -f loglevel.ldif
 
2.启动 LDAP 日志记录
配置Rsyslog以将LDAP事件记录到日志文件/var/log/slapd/ldap.log
# vim /etc/rsyslog.conf# 文件末尾增加
local4.* /var/log/slapd/ldap.log 
3. 重启 rsyslog 服务
systemctl restart rsyslog

5.7配置tls

1、生成ssl数字证书并签名。
若有签名的ssl证书,则只需要把证书拷贝到相应目录下,并在配置文件中写明路径即可。
若没有,可以使用以下步骤生成自签名的证书:
cd /etc/pki/CA
(1)生成根秘钥:
openssl genrsa -out private/cakey.pem 2048
 
(2)生成自签名的根证书:
openssl req -new -x509 -key private/cakey.pem -out cacert.pem  -days 3650
(-days 表示根证书的有效期,缺省-days时,默认有效期是30天)
 
按提示填写(不要填空的):
Country Name (2 letter code) [XX]:cn
State or Province Name (full name) []:sd
Locality Name (eg, city) [Default City]:jn
Organization Name (eg, company) [Default Company Ltd]:hg
Organizational Unit Name (eg, section) []:yf
Common Name (eg, your name or your server's hostname) []:root
Email Address []:
 
 
(3)初始化CA:
mkdir private newcerts
touch newcerts index.txt serial
echo "00" > serial
(4)生成ldap服务器的秘钥和根证书
mkdir cacerts
cd /etc/pki/CA/cacerts
 
生成服务器的私钥
openssl genrsa -out server.key
 
为ldap生成证书签署请求
openssl req -new -key server.key -out server.csr
 
按照提示填写,其中Country Name、State or Province Name、Organization Name需要与根证书一致:
Country Name (2 letter code) [XX]:cn
State or Province Name (full name) []:sd
Locality Name (eg, city) [Default City]:jn
Organization Name (eg, company) [Default Company Ltd]:hg
Organizational Unit Name (eg, section) []:yf
Common Name (eg, your name or your server's hostname) []:192.168.10.47 //填写服务器IP地址
Email Address []:
 
ca根据请求签发证书,得到.crt证书文件
openssl ca -in server.csr -out server.crt
 
2、拷贝根证书和服务器证书到ldap配置目录
cd /etc/openldap/
mkdir cacerts
cp /etc/pki/CA/cacert.pem /etc/openldap/cacerts
cp /etc/pki/CA/cacerts/*  /etc/openldap/cacerts
 
设定权限:
chown -R ldap /etc/openldap/cacerts/server.crt
chmod 644 /etc/openldap/cacerts/server.crt
chown -R ldap /etc/openldap/cacerts/server.key
chmod 400 /etc/openldap/cacerts/server.key
 
chown -R ldap /etc/openldap/cacerts/cacert.pem
chmod 644 /etc/openldap/cacerts/cacert.pem
 
2.导入证书到配置文件
[root@patroni1 cacerts]# vim certs.ldif
dn: cn=config
changetype: modify
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/openldap/cacerts/cacert.pem
 
dn: cn=config
changetype: modify
replace: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/openldap/cacerts/server.crt
 
dn: cn=config
changetype: modify
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/openldap/cacerts/server.key
3. 导入配置
ldapmodify -Y EXTERNAL  -H ldapi:/// -f certs.ldif
开启系统加密支持
vim /etc/sysconfig/slapd
SLAPD_URLS="ldapi:/// ldap:/// ldaps:///"
 
5、重启
systemctl  restart  slapd.service
 
netstat -ntulp |grep slapd
查看636端口是否启动(636为加密认证端口)
 
 
# 配置认证方式
vim /etc/openldap/ldap.conf
TLS_REQCERT  allow
 
4.测试 StartTLS
[root@patroni1 openldap]# ldapsearch -x -ZZ                
# extended LDIF
#
# LDAPv3
# base <> (default) with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
 
# search result
search: 3
result: 32 No such object
 
# numResponses: 1
[root@patroni1 openldap]# ldapsearch -x -ZZ
# extended LDIF
#
# LDAPv3
# base <> (default) with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
 
# search result
search: 3
result: 32 No such object
 
# numResponses: 1