安装LDAP Servernode
yum install db4 db4-utils db4-devel cyrus-sasl* krb5-server-ldap -y yum install openldap openldap-servers openldap-clients openldap-devel compat-openldap -y
查看安装的版本:linux
rpm -qa openldap openldap-2.4.40-8.el7.x86_64 rpm -qa krb5-server-ldap krb5-server-ldap-1.13.2-10.el7.x86_64
LDAP 服务端配置
更新配置库:shell
rm -rf /var/lib/ldap/* cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG chown -R ldap.ldap /var/lib/ldap
在2.4之前的版本中,OpenLDAP 使用 slapd.conf 配置文件来进行服务器的配置,而2.4开始则使用 slapd.d 目录保存细分后的各类配置,这一点须要注意,其数据存储位置即目录 /etc/openldap/slapd.d 。尽管该系统的数据文件是透明格式的,仍是建议使用 ldapadd, ldapdelete, ldapmodify 等命令来修改而不是直接编辑。
默认配置文件保存在 /etc/openldap/slapd.d,将其备份:数据库
cp -rf /etc/openldap/slapd.d /etc/openldap/slapd.d.bak chown -R ldap:ldap /etc/openldap/slapd.d && chmod -R 700 /etc/openldap/slapd.d
注意:若是是配置有问题须要重装,上面两句命令改为下面三句:vim
rm -rf /etc/openldap/slapd.d cp -r /etc/openldap/slapd.d.bak /etc/openldap/slapd.d chown -R ldap:ldap /etc/openldap/slapd.d && chmod -R 700 /etc/openldap/slapd.d
启动服务
启动 LDAP 服务:centos
#centos7启动命令 systemctl start slapd systemctl enable slapd #centos6启动命令 chkconfig --add slapd chkconfig --level 345 slapd on /etc/init.d/slapd start 查看状态,验证服务端口 $ ps aux | grep slapd | grep -v grep ldap 9225 0.0 0.2 581188 44576 ? Ssl 15:13 0:00 /usr/sbin/slapd -h ldap:/// -u ldap $ netstat -tunlp | grep :389 tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 8510/slapd tcp 0 0 :::389 :::* LISTEN 8510/slapd
若是启动失败,则运行下面命令来启动 slapd 服务并查看日志:
slapd -h ldap://127.0.0.1 -d 481
待查明缘由以后,中止该进程使用正常方式启动 slapd 服务。
导入基本的配置
导入基本的Schema
cat /etc/openldap/slapd.confbash
include /etc/openldap/schema/core.schema include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/inetorgperson.schema include /etc/openldap/schema/misc.schema include /etc/openldap/schema/nis.schema pidfile /var/run/openldap/slapd.pid argsfile /var/run/openldap/slapd.args allow bind_v2 modulepath /usr/lib64/openldap moduleload syncprov # TLSCACertificateFile /etc/pki/tls/certs/ca-bundle.crt # TLSCertificateFile /etc/pki/tls/certs/slapd.pem # TLSCertificateKeyFile /etc/pki/tls/certs/slapd.pem ######################################### # Main LDAP database # ######################################### database bdb suffix "dc=cdh,dc=com" checkpoint 1024 15 rootdn "cn=Manager,dc=cdh,dc=com" rootpw 111111 directory /var/lib/ldap # Indices to maintain for this database M-eM-"M-^^M-eM-^JM- M-gM-4M-"M-eM-<M-^U index objectClass eq,pres index ou,cn,mail,surname,givenname eq,pres,sub index uidNumber,gidNumber,loginShell eq,pres index uid,memberUid eq,pres,sub index nisMapName,nisMapEntry eq,pres,sub index entryCSN,entryUUID eq overlay syncprov syncprov-checkpoint 100 10 syncprov-sessionlog 100 serverID 1 syncrepl rid=100 provider=ldap://10.1.2.235 type=refreshAndPersist retry="60 +" searchbase="dc=cdh,dc=com" scope=sub schemachecking=on bindmethod=simple binddn="cn=Manager,dc=cdh,dc=com" credentials=111111 mirrormode on ################################################## # Database for the monitoring # ################################################## database monitor access to * by dn.exact="cn=Manager,dc=cdh,dc=com" read by * none
测试服务器
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d chown -R ldap:ldap /etc/openldap/slapd.d && chmod -R 700 /etc/openldap/slapd.d chown -R ldap.ldap /var/lib/ldap
删除文件session
[root@node1a220 ~]# cd /etc/openldap/slapd.d/cn\=config/ [root@node1a220 cn=config]# rm -rf olcDatabase={2}hdb.ldif [root@node1a220 cn=config]# rm -rf olcDatabase={2}monitor.ldif
重启服务app
chown -R ldap.ldap /var/lib/ldap systemctl restart slapd
建立数据库
数据库没有数据,须要添加数据,你能够手动编写 ldif 文件来导入一些用户和组,或者使用 migrationtools 工具来生成 ldif 模板。建立 setup.ldif 文件以下:
dn: dc=cdh,dc=com objectClass: top objectClass: dcObject objectclass: organization o: cdh com dc: cdh dn: ou=People,dc=cdh,dc=com objectclass: organizationalUnit ou: people description: Users dn: ou=group,dc=cdh,dc=com objectClass: organizationalUnit ou: group
使用下面命令导入数据,密码是前面设置的111111。
ldapadd -x -D "cn=Manager,dc=cdh,dc=com" -w 111111 -f setup.ldif
参数说明:
• -w 指定密码
• -x 是使用一个匿名的绑定
导入系统用户
接下来你能够从 /etc/passwd, /etc/shadow, /etc/groups 中生成 ldif 更新 ldap 数据库,这须要用到 migrationtools 工具。
安装:
yum install migrationtools -y
利用迁移工具生成模板,先修改默认的配置:
vim /usr/share/migrationtools/migrate_common.ph
#line 71 defalut DNS domain $DEFAULT_MAIL_DOMAIN="HADOOP.COM"; #line 74 defalut base $DEFAULT_BASE="dc=cdh,dc=com";
生成模板文件:
/usr/share/migrationtools/migrate_base.pl > /opt/base.ldif
而后,能够修改该文件,而后执行导入命令:
ldapadd -x -D "cn=Manager,dc=cdh,dc=com" -w 111111 -f /opt/base.ldif
将当前节点上的用户导入到 ldap 中,能够有选择的导入指定的用户:
先添加用户
useradd test
查找系统上的 test、hive 等用户
grep -E "test" /etc/passwd >/opt/passwd.txt /usr/share/migrationtools/migrate_passwd.pl /opt/passwd.txt /opt/passwd.ldif ldapadd -x -D "cn=Manager,dc=cdh,dc=com" -w 111111 -f /opt/passwd.ldif
将用户组导入到 ldap 中:
生成用户组的 ldif 文件,而后导入到 ldap
grep -E "test" /etc/group >/opt/group.txt /usr/share/migrationtools/migrate_group.pl /opt/group.txt /opt/group.ldif ldapadd -x -D "cn=Manager,dc=cdh,dc=com" -w 111111 -f /opt/group.ldif
查询
查询新添加的 test 用户:
ldapsearch -LLL -x -D 'cn=Manager,dc=cdh,dc=com' -w 111111 -b 'dc=cdh,dc=com' 'uid=admin'
dn: uid=test,ou=People,dc=cdh,dc=com objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount cn: test account sn: test uid: test uidNumber: 1001 gidNumber: 100 homeDirectory: /home/test loginShell: /bin/bash
能够看到,经过指定 ‘uid=test’,咱们只查询这个用户的数据,这个查询条件叫作filter。有关 filter 的使用能够查看 ldapsearch 的 manpage。
修改
用户添加好之后,须要给其设定初始密码,运行命令以下:
ldappasswd -x -D 'cn=Manager,dc=cdh,dc=com' -w 111111"uid=test,ou=People,dc=cdh,dc=com" -S
删除
删除用户或组条目:
ldapdelete -x -w 111111 -D 'cn=Manager,dc=cdh,dc=com'"uid=test,ou=People,dc=cdh,dc=com" ldapdelete -x -w 111111 -D 'cn=Manager,dc=cdh,dc=com'"cn=test,ou=group,dc=cdh,dc=com"
同【3.1安装】步骤:
yum install db4 db4-utils db4-devel cyrus-sasl* krb5-server-ldap -y yum install openldap openldap-servers openldap-clients openldap-devel compat-openldap -y 查看安装的版本: $ rpm -qa openldap openldap-2.4.40-8.el7.x86_64 $ rpm -qa krb5-server-ldap krb5-server-ldap-1.13.2-10.el7.x86_64
LDAP 服务端配置
更新配置库:
rm -rf /var/lib/ldap/* cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG chown -R ldap.ldap /var/lib/ldap
在2.4之前的版本中,OpenLDAP 使用 slapd.conf 配置文件来进行服务器的配置,而2.4开始则使用 slapd.d 目录保存细分后的各类配置,这一点须要注意,其数据存储位置即目录 /etc/openldap/slapd.d 。尽管该系统的数据文件是透明格式的,仍是建议使用 ldapadd, ldapdelete, ldapmodify 等命令来修改而不是直接编辑。
默认配置文件保存在 /etc/openldap/slapd.d,将其备份:
cp -rf /etc/openldap/slapd.d /etc/openldap/slapd.d.bak chown -R ldap:ldap /etc/openldap/slapd.d && chmod -R 700 /etc/openldap/slapd.d
注意:若是是配置有问题须要重装,上面两句命令改为下面三句:
rm -rf /etc/openldap/slapd.d cp -r /etc/openldap/slapd.d.bak /etc/openldap/slapd.d chown -R ldap:ldap /etc/openldap/slapd.d && chmod -R 700 /etc/openldap/slapd.d
启动服务
启动 LDAP 服务:
centos7启动命令 systemctl start slapd systemctl enable slapd centos6启动命令 chkconfig --add slapd chkconfig --level 345 slapd on /etc/init.d/slapd start
查看状态,验证服务端口
ps aux | grep slapd | grep -v grep
ldap 9225 0.0 0.2 581188 44576 ? Ssl 15:13 0:00 /usr/sbin/slapd -h ldap:/// -u ldap netstat -tunlp | grep :389 tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 8510/slapd tcp 0 0 :::389 :::* LISTEN 8510/slapd
若是启动失败,则运行下面命令来启动 slapd 服务并查看日志:
$ slapd -h ldap://127.0.0.1 -d 481
待查明缘由以后,中止该进程使用正常方式启动 slapd 服务。
导入基本的配置
添加一些基本配置,并引入 openldap 的ldif:
导入基本的Schema
cat /etc/openldap/slapd.conf
include /etc/openldap/schema/core.schema include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/inetorgperson.schema include /etc/openldap/schema/misc.schema include /etc/openldap/schema/nis.schema pidfile /var/run/openldap/slapd.pid argsfile /var/run/openldap/slapd.args allow bind_v2 modulepath /usr/lib64/openldap moduleload syncprov # TLSCACertificateFile /etc/pki/tls/certs/ca-bundle.crt # TLSCertificateFile /etc/pki/tls/certs/slapd.pem # TLSCertificateKeyFile /etc/pki/tls/certs/slapd.pem ######################################### # Main LDAP database # ######################################### database bdb suffix "dc=cdh,dc=com" checkpoint 1024 15 rootdn "cn=Manager,dc=cdh,dc=com" rootpw 111111 directory /var/lib/ldap # Indices to maintain for this database 增长索引 index objectClass eq,pres index ou,cn,mail,surname,givenname eq,pres,sub index uidNumber,gidNumber,loginShell eq,pres index uid,memberUid eq,pres,sub index nisMapName,nisMapEntry eq,pres,sub index entryCSN,entryUUID eq overlay syncprov syncprov-checkpoint 100 10 syncprov-sessionlog 100 serverID 2 syncrepl rid=101 provider=ldap://10.1.2.234 type=refreshAndPersist retry="60 +" searchbase="dc=cdh,dc=com" scope=sub schemachecking=on bindmethod=simple binddn="cn=Manager,dc=cdh,dc=com" credentials=111111 mirrormode on ################################################## # Database for the monitoring # ################################################## database monitor access to * by dn.exact="cn=Manager,dc=cdh,dc=com" read by * none
测试
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d chown -R ldap:ldap /etc/openldap/slapd.d && chmod -R 700 /etc/openldap/slapd.d
注意
serverID 2 ##保证惟一 syncrepl rid=100 ##同步进程id,必须为三位数 provider=ldap://10.1.2.234 ##另外一节点的IP type=refreshAndPersist searchbase="dc=cdh,dc=com" ##BaseDn scope=sub schemachecking=on bindmethod=simple ##认证方式为简单模式 binddn=" cn=Manager,dc=cdh,dc=com" ##用户名 credentials=111111 ##密码 retry="60 +" ##尝试时间,切记之间有空格
删除文件
[root@node1a220 ~]# cd /etc/openldap/slapd.d/cn\=config/ [root@node1a220 cn=config]# rm -rf olcDatabase={2}hdb.ldif [root@node1a220 cn=config]# rm -rf olcDatabase={2}monitor.ldif
重启服务
chown -R ldap.ldap /var/lib/ldap systemctl restart slapd
LDAP HA 验证
假设A节点有数据,而B节点无数据,配置安装好后,那么B节点会同步A节点的数据;或不管两个节点的数据发生改变,两个节点的数据会保持同步。
查询A节点用户是否同步到B节点:
$ ldapsearch -LLL -x -D 'cn=Manager,dc=cdh,dc=com' -w 111111 -b 'dc=cdh,dc=com''uid=test' dn: uid=test,ou=People,dc=cdh,dc=com objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount cn: test account sn: test uid: test uidNumber: 1001 gidNumber: 100 homeDirectory: /home/test loginShell: /bin/bash
使用Keepalived配置VIP(虚拟IP)实现LDAP HA,即对外提供VIP给用户访问LDAP,内部用Keepalived监控主从LDAP服务器状态并实现VIP自动在LDAP主从服务器上的切换已达到LDAP HA的效果。
CentOS自带了Keepalived,直yum install keepalived便可。若是是其它linux,须要下载keepalived rpm包,而后进行安装。假设虚拟IP为10.1.2.249.
KDC/LDAP A节点配置
修改keepalived的配置文件/etc/keepalived/keepalived.conf以下:
! Configuration File for keepalived vrrp_script chk_http_port { script "/etc/keepalived/chk_ldap_process.sh" #进程检测脚本 interval 5 # 脚本检测时间间隔,单位秒 weight 0 #检查失败时权重递减值 global_defs { router_id LVS_DEVEL #标识本节点的字条串,一般为hostname } vrrp_instance VI_1 { state BACKUP interface bond0 #节点绑定的网卡 virtual_router_id 151 #取值在0-255之间,组播ID,组内同样,同网不能重复 priority 100 #优先级,数字越大优先级越高 advert_int 1 #发送组播的间隔,默认1秒 nopreempt #不抢占 authentication { auth_type PASS auth_pass 1111 } track_script { chk_http_port } virtual_ipaddress { 10.1.2.249 #虚拟IP } } }
注意:#注释内容实际配置文件中请删除
监控LDAP服务进程脚本chk_ldap_process.sh,当LDAP服务进程不在时,中止keepalived进程,VIP会自动切换到另外一个LDAP服务器。
chk_ldap_process.sh内容以下:
#!/bin/bash ldapPid=$(ps -ef |grep slapd|grep -v grep|awk '{print $2}'|grep -v PID) #echo $ldapPid if test "$ldapPid" == ""; then systemctl stop keepalived exit 1 else exit 0 fi
KDC/LDAP B节点配置
修改keepalived的配置文件/etc/keepalived/keepalived.conf以下:
! Configuration File for keepalived vrrp_script chk_http_port { script "/etc/keepalived/chk_ldap_process.sh" #进程检测脚本 interval 5 # 脚本检测时间间隔,单位秒 weight 0 global_defs { router_id LVS_DEVEL } vrrp_instance VI_1 { state BACKUP interface bond0 #节点绑定的网卡 virtual_router_id 151 #虚拟路由标识,两个节点必须一致 priority 100 #优先级 advert_int 1 nopreempt authentication { auth_type PASS auth_pass 1111 } track_script { chk_http_port } virtual_ipaddress { 10.1.2.249 #虚拟IP } } }
注意:#注释内容实际配置文件中请删除
测试验证 可使用以下步骤验证LDAP HA。步骤以下: 一、主从两个节点上启动keepalived 先启动keepalived命令:service keepalived start 二、A节点上查看虚拟IP状况 使用命令:ip a 查看 发现虚拟IP绑定在LDAP A节点,由于KDC/LDAP A优先级高。 三、手动中止OpenLDAP A节点的ldap server,3s后OpenLDAP A节点的keepalived的server会中止,此时能够查看OpenLDAP B节点(keepalived此时是开启状态)有虚拟IP。