一、安装Openldap
环境准备
系统:Centos 6.9
关闭防火墙:/etc/init.d/iptables stop && chkconfig iptables off
关闭NetworkManager:/etc/init.d/NetworkManager stop && chkconfig NetworkManager off
SeLinux设为disabled:getenforce 是否为Disabled,若不是,则修改:
1:临时的生效 setenforce 0,再getenforce的时候为permissive
2:修改配置文件,然后重启 vim /etc/sysconfig/selinux 把SELINUX=disabled
将本机的yum换成阿里云的yum源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all
yum makecache
OpenLDAP服务器的搭建
yum -y install openldap openldap-servers openldap-clients openldap-devel compat-openldap
其中compat-openldap这个包与主从有很大的关系
安装完后,可以看到自动创建了ldap用户:
tail -n 3 /etc/passwd
cat /etc/passwd |grep ldap
ldap:x:55:55:LDAP User:/var/lib/ldap:/sbin/nologin
可以通过rpm -qa |grep openldap查看安装了哪些包:
rpm -qa |grep openldap
openldap-devel-2.4.40-16.el6.x86_64
compat-openldap-2.3.43-2.el6.x86_64
openldap-servers-2.4.40-16.el6.x86_64
openldap-clients-2.4.40-16.el6.x86_64
openldap-2.4.40-16.el6.x86_64
OpenLDAP的相关配置文件信息
/etc/openldap/slapd.conf:OpenLDAP的主配置文件,记录根域信息,管理员名称,密码,日志,权限等
/etc/openldap/slapd.d/*:这下面是/etc/openldap/slapd.conf配置信息生成的文件,每修改一次配置信息,这里的东西就要重新生成
/etc/openldap/schema/*:OpenLDAP的schema存放的地方
/var/lib/ldap/*:OpenLDAP的数据文件
/usr/share/openldap-servers/slapd.conf.obsolete 模板配置文件
/usr/share/openldap-servers/DB_CONFIG.example 模板数据库配置文件
OpenLDAP监听的端口:
默认监听端口:389(明文数据传输)
加密监听端口:636(密文数据传输)
初始化OpenLDAP的配置
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf
修改配置文件,首先,使用slappasswd生成密文密码,我这里是123qwe
[root@iZ2ze2hx8zhd9ble41g95tZ ~]# slappasswd
New password: 123qwe
Re-enter new password: 123qwe
{SSHA}xwrw/jFvnSNLblflbsA9CMtlLGQOGugn
编辑/etc/openldap/slapd.conf配置文件,取消rootpw注释,rootpw必须顶格写,而且与后面的密码文件用Tab键隔开
[root@iZ2ze2hx8zhd9ble41g95sZ ~]# vim /etc/openldap/slapd.conf
# rootpw secret
rootpw {SSHA}bik7v+wluzpHQoV7JqXUdFpaZmhS7Nqj
修改对应的以下选项
database config
access to *
by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
by * none
# enable server status monitoring (cn=monitor)
database monitor
access to *
by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read
by dn.exact="cn=admin,dc=jd,dc=com" read 需要修改此处
by * none
#######################################################################
# database definitions
#######################################################################
database bdb
suffix "dc=jd,dc=com" 需要修改此处
checkpoint 1024 15
rootdn "cn=admin,dc=jd,dc=com" 需要修改此处
禁止匿名用户访问,将以下注释解开,大约在86~89行
access to *
by self write
by users read
by anonymous auth
重新生成配置文件信息文件,先检测/etc/openldap/slapd.conf是否有错误:slaptest -f /etc/openldap/slapd.conf
[root@iZ2ze2hx8zhd9ble41g95tZ ~]# slaptest -f /etc/openldap/slapd.conf
5b6d27f6 bdb_db_open: database "dc=jd,dc=com": db_open(/var/lib/ldap/id2entry.bdb) failed: No such file or directory (2).
5b6d27f6 backend_startup_one (type=bdb, suffix="dc=jd,dc=com"): bi_db_open failed! (2)
slap_startup failed (test would succeed using the -u switch)
这里报错是因为在第三步后没有重新生成配置文件,启动slapd。而是直接修改配置文件去了。先启动slapd:/etc/init.d/slapd restart
[root@iZ2ze2hx8zhd9ble41g95tZ ~]# /etc/init.d/slapd restart
停止 slapd: [失败]
/var/lib/ldap/__db.004 is not owned by "ldap" [警告]
/var/lib/ldap/__db.001 is not owned by "ldap" [警告]
/var/lib/ldap/__db.005 is not owned by "ldap" [警告]
/var/lib/ldap/__db.006 is not owned by "ldap" [警告]
/var/lib/ldap/alock is not owned by "ldap" [警告]
/var/lib/ldap/__db.002 is not owned by "ldap" [警告]
/var/lib/ldap/__db.003 is not owned by "ldap" [警告]
正在启动 slapd: [失败]
这里又报错,这是因为没有给/var/lib/ldap授权,授权后再重启slapd
chown -R ldap.ldap /var/lib/ldap/
[root@iZ2ze2hx8zhd9ble41g95tZ ~]# /etc/init.d/slapd restart
停止 slapd: [失败]
正在启动 slapd: [确定]
接着再检测/etc/openldap/slapd.conf是否有错误
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/
config file testing succeeded
可以看到没问题,然后重新生成配置文件的配置信息:先删除最先的配置文件生成的信息
rm -rf /etc/openldap/slapd.d/*
重新生成配置文件:
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/
查看是否生成的是自己修改的配置文件信息:
cat /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}bdb.ldif
授权
chown -R ldap.ldap /etc/openldap/slapd.d/
重启:
/etc/init.d/slapd restart
OpenLDAP服务端基本上完成了,可以通过PhpLDAPAdmin进行web界面管理,需要PhpLDAPAdmin
二、安装PhpLDAPAdmin
安装EPEL仓库,镜像里没有PhpLDAPAdmin这个的安装包,所以得安装EPEL仓库
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
yum clean all
yum makecache
安装PhpLDAPAdmin
yum install -y phpldapadmin
修改phpldapadmin的配置文件,访问控制权限vim ,允许谁访问
vim /etc/httpd/conf.d/phpldapadmin.conf
---------------------------------------
Alias /phpldapadmin /usr/share/phpldapadmin/htdocs
Alias /ldapadmin /usr/share/phpldapadmin/htdocs
<Directory /usr/share/phpldapadmin/htdocs>
Order Deny,Allow
Deny from all
Allow from 219.143.69.27
Allow from 127.0.0.1
</Directory>
修改配置文件:
vim /etc/phpldapadmin/config.php
$servers->setValue('login','attr','dn'); 这一行的注释去掉 397行
//$servers->setValue('login','attr','uid'); 这一行注释掉 398行
重启httpd服务
/etc/init.d/httpd restart
在浏览器输入OpenLDAP服务端的IP
http://ip地址/ldapadmin
登录,输入管理员的DN,也就是配置文件里配置的
点击认证,报错
这是因为在第一步搭建OpenLDAP服务端的时候,并没有把管理员的账号信息导入,编辑root.ldif,然后导入
vim root.ldif
dn: dc=jd,dc=com
objectclass: dcObject
objectclass: organization
o: Yunzhi,Inc.
dc: jd
dn: cn=admin,dc=jd,dc=com
objectclass: organizationalRole
cn: admin
这里得注意每一个属性: 后必须有空格,但是值的后面不能有任何空格,然后导入:
ldapadd -x -D "cn=admin,dc=jd,dc=com" -W -f root.ldif
输入自己设置的密码
到这一步的时候,报了一个错误,如下
ldapadd -x -D “cn=admin,dc=jd,dc=com” -W -f root.ldif
Enter LDAP Password:
ldap_bind: Invalid credentials (49)
也检查了slapd.conf和root.ldif,没有看出什么错误,最后我吧这两部分分开写成了两个以 .ldif 结尾的文件,root.ldif 和 base.ldif ,然后分别用命令导入,就没有错误了。
请注意slapd.conf配置文件中的rootpw前边一定不要有空格,然后和密码之间使用tab键隔开;
vim root.ldif
dn: dc=jd,dc=com
objectclass: dcObject
objectclass: organization
o: Yunzhi,Inc.
dc: jd
ldapadd -x -D "cn=admin,dc=jd,dc=com" -W -f root.ldif
输入自己设置的密码
vim base.ldif
dn: cn=admin,dc=jd,dc=com
objectclass: organizationalRole
cn: admin
ldapadd -x -D "cn=admin,dc=jd,dc=com" -W -f base.ldif
输入自己设置的密码
然后再通过浏览器去访问登录:
到这里,PhpLDAPAdmin搭建完了,接下来,把日志打开
三:OpenLDAP的打开日志信息
现在配置文件里加上日志行 ,这里的日志级别有很多种,-1的话会记录很多日志信息
vim /etc/openldap/slapd.conf
末行加入
loglevel -1
这里修改了配置文件,所有得重新生成配置文件的信息
rm -rf /etc/openldap/slapd.d/*
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/
chown -R ldap.ldap /etc/openldap/slapd.d/
vim /etc/rsyslog.conf
末尾行加上
local4.* /var/log/slapd/slapd.log
然后重启
/etc/init.d/rsyslog restart
创建日志文件目录,授权
mkdir /var/log/slapd
chmod 755 /var/log/slapd/
chown ldap.ldap /var/log/slapd/
重启slapd服务
/etc/init.d/slapd restart
查看日志信息
tail -f /var/log/slapd/slapd.log
四:OpenLDAP与migrationtools实现导入系统账号的相关信息
安装migrationtools
yum -y install migrationtools
修改migrationtools的配置文件,在/usr/share/migrationtools/这个目录下有很多migrationtools的文件,修改以下的两个地方
vim /usr/share/migrationtools/migrate_common.ph
# Default DNS domain
$DEFAULT_MAIL_DOMAIN = "jd.com";
# Default base
$DEFAULT_BASE = "dc=jd,dc=com";
生成基础的数据文件,可以自己修改这个生成的base.ldif文件,把不需要的去掉
cd /usr/share/migrationtools/
[root@iZ2ze2hx8zhd9ble41g95tZ migrationtools]# ls
migrate_all_nis_offline.sh migrate_all_online.sh migrate_group.pl migrate_networks.pl migrate_services.pl
........
[root@iZ2ze2hx8zhd9ble41g95tZ migrationtools]#./migrate_base.pl > basic.ldif
把base.ldif导入OpenLDAP
ldapadd -x -D "cn=admin,dc=jd,dc=com" -W -f basic.ldif
Enter LDAP Password: 输入之前设置的密码,我的是123qwe
adding new entry "dc=jd,dc=com"
ldap_add: Already exists (68)
这里会报错,“ldap_add: Already exists (68)”,我们可以通过-c参数强制加入,就可以导入进去了
[root@iZ2ze2hx8zhd9ble41g95tZ migrationtools]# ldapadd -x -c -D "cn=admin,dc=jd,dc=com" -W -f basic.ldif
导入之后,通过PhpLdapAdmin可以看到已经导入进来了:
建立一个用户并加入people组:
[root@iZ2ze2hx8zhd9ble41g95tZ ~]# vim useradd.ldif
dn: uid=dh,ou=people,dc=jd,dc=com
objectclass: account
objectclass: posixAccount
objectclass: top
objectclass: shadowAccount
cn: dh
uid: dh
gidNumber: 10005
uidNumber: 3000
userPassword: 123qwe
homeDirectory: /home/dh
loginShell: /bin/bash
ldapadd -x -c -D "cn=admin,dc=jd,dc=com" -W -f useradd.ldif
Enter LDAP Password: 123qwe
adding new entry "uid=dh,ou=people,dc=jd,dc=com"
通过以上命令已经建立好了一个用户,那么以后还会多建一些用户,整合jumpserver、Gitlab、Openvpn、Jenkins、zabbix等服务,如有错误 ,欢迎留言指正!