准备阶段
我们要通过yum源来安装openldap,那么得事先配置好本地yum源,那么如何来配置一个本地yum源呢?
参考文章:https://blog.csdn.net/kangvcar/article/details/73477730
我的系统为centos 7,所以我这里仅记录centos 7的yum源配置方法,本次我配置的yum源为阿里云yum源。
配置过程
1、清除之前可能缓存的文件
yum clean all
2、切换到yum配置文件目录
cd /etc/yum.repos.d
3、该目录下可能存在之前配置过的yum源的配置文件,如果你觉得之前的不需要了,可以选择直接删除它们;
如果后续还想用的话,建议备份好,例如在当前目录下建个目录作为备份目录
mkdir yumbak
4、将先前的配置文件(如果有的话)移动到yumbak目录
mv ./* yumbak
5、获取centos 7的yum配置文件
wget http://mirrors.aliyun.com/repo/Centos-7.repo -O /etc/yum.repos.d/CentOS-Base.repo
其中-O参数的作用是指定配置文件的存储路径,-O后跟的是路径
6、然后缓存依赖
yum makecache
7、最后可以看看到底缓存哪些依赖
yum list
也可以查询是否存在自己需要的依赖
yum list | grep xxx
如果你的系统不是centos 7的,那怎么办呢?
只需要将wget http://mirrors.aliyun.com/repo/Centos-7.repo -O /etc/yum.repos.d/CentOS-Base.repo命令中,http://mirrors.aliyun.com/repo/Centos-7.repo的版本号改为对应的版本即可;
例如centos 8系统,那就改为http://mirrors.aliyun.com/repo/Centos-8.repo;
centos 6系统,那就改为http://mirrors.aliyun.com/repo/Centos-6.repo。
如果你的系统版本与想要配置的yum源的版本不一致,例如你的系统是centos 7,但是你想配置centos8对应的yum源;
这也可以配置,也是将http://mirrors.aliyun.com/repo/Centos-7.repo改为http://mirrors.aliyun.com/repo/Centos-8.repo即可;
但是这里有个需要注意的地方,如果系统版本与配置的yum源版本不对应,那么这个releasever需要显式地指定为yum源版本,例如现在想要在centos7的系统上配置centos8的yum源,则$releasever应修改为8。
我们可以使用全局替换来快速修改:
1、vim打开CentOS-Base.repo
2、在命令模式下输入
:% s/$releasever/8/g
回车,保存退出。
yum源的配置已经写完。
部署流程
1、yum install -y openldap openldap-servers openldap-clients openldap-devel compat-openldap
通过yum安装openldap,-y表示静默安装,遇到需要交互的情况直接默认为yes
2、安装完成后,就可以直接配置了,我们先来看看手动配置的流程是怎样的,最后我会附上自动安装以及配置的脚本。
openldap配置流程
1、通过yum安装,openldap默认是安装到系统路径的,其中配置文件所在路径为:
/etc/openldap
2、切换到/etc/openldap,看下该目录的文件
由于我安装的是openldap 2.4.x,该版本的配置文件已经由先前的slapd.conf变为slapd.d下的ldif类型的配置文件了,这种配置文件只能通过ldif文件来修改配置,没有slapd.conf方便,所以这里我还是想使用slapd.conf配置文件,这里没有那怎么办呢,拷贝一个过来(后面我都会附上这些文件的)
3、开始修改slapd.conf配置文件
#
# See slapd.conf(5) for details on configuration options.
# This file should NOT be world readable.
#
include /etc/openldap/schema/corba.schema
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/duaconf.schema
include /etc/openldap/schema/dyngroup.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/java.schema
include /etc/openldap/schema/misc.schema
include /etc/openldap/schema/nis.schema
include /etc/openldap/schema/openldap.schema
include /etc/openldap/schema/ppolicy.schema
include /etc/openldap/schema/collective.schema
# Allow LDAPv2 client connections. This is NOT the default.
allow bind_v2
# Do not enable referrals until AFTER you have a working directory
# service AND an understanding of referrals.
#referral ldap://root.openldap.org
pidfile /var/run/openldap/slapd.pid
argsfile /var/run/openldap/slapd.args
# Load dynamic backend modules
# - modulepath is architecture dependent value (32/64-bit system)
# - back_sql.la overlay requires openldap-server-sql package
# - dyngroup.la and dynlist.la cannot be used at the same time
modulepath /usr/lib/openldap
modulepath /usr/lib64/openldap
# moduleload accesslog.la
# moduleload auditlog.la
# moduleload back_sql.la
# moduleload chain.la
# moduleload collect.la
# moduleload constraint.la
# moduleload dds.la
# moduleload deref.la
# moduleload dyngroup.la
# moduleload dynlist.la
# moduleload memberof.la
# moduleload pbind.la
# moduleload pcache.la
moduleload ppolicy.la
# moduleload refint.la
# moduleload retcode.la
# moduleload rwm.la
# moduleload seqmod.la
# moduleload smbk5pwd.la
# moduleload sssvlv.la
moduleload syncprov.la
# moduleload translucent.la
# moduleload unique.la
# moduleload valsort.la
# enable on-the-fly configuration (cn=config)
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=Manager,dc=my-domain,dc=com" read
by * none
#######################################################################
# database definitions
#######################################################################
database bdb
suffix "dc=root,dc=test,dc=com"
checkpoint 1024 15
# Cleartext passwords, especially for the rootdn, should
# be avoided. See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
# rootpw secret
# password password
rootdn "cn=admin,dc=root,dc=test,dc=com"
rootpw {SSHA}kldBu98SYvQLFgtNkPHFUVyiBh6TCiTX
# password stage
overlay ppolicy
ppolicy_default "cn=default,ou=policies,dc=root,dc=test,dc=com"
ppolicy_use_lockout
# The database directory MUST exist prior to running slapd AND
# should only be accessible by the slapd and slap tools.
# Mode 700 recommended.
directory /var/lib/ldap
# Indices to maintain for this database
index objectclass,entryCSN,entryUUID eq
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 member,uniqueMember eq,pres
#log level
loglevel 17152
cachesize 5000
想要正常使用的话,上面的配置需要修改以下几点:
1)suffix "dc=root,test,dc=com",表示根节点,修改为自己定义的根节点,例如"dc=myroot,dc=example,dc=com";
2)rootdn "cn=admin,dc=root,dc=test,dc=com",管理员用户,修改为自己定义的超级用户名,例如"cn=root,dc=myroot,dc=example,dc=com";
3)rootpw {SSHA}kldBu98SYvQLFgtNkPHFUVyiBh6TCiTX,管理员的密码,此处的密码是密文形式的,可以通过执行slappasswd来生成密文密码,如下图:
将得到的密文替换掉配置文件里rootpw处的密码;
4)overlay ppolicy
ppolicy_default "cn=default,ou=policies,dc=root,dc=test,dc=com"
ppolicy_use_lockout
这三行表示使用自定义的密码策略,如果你不使用密码策略的话,可以将它们注释掉;
如果使用自定义密码策略的话,则 ppolicy_default "cn=default,ou=policies,dc=root,dc=test,dc=com"需要修改为自定义的密码策略名,例如"cn=default,ou=policies,dc=myroot,dc=example,dc=com";
5)只修改这些就可以了,保存退出。
6)拷贝DB_CONFIG.example到/var/lib/ldap目录,并重命名为DB_CONFIG
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
/var/lib/ldap是openldap的数据库目录;
7)我前面讲到过2.4.x版本使用的是slapd.d目录下的配置文件了,而不是slapd.conf文件,我们最终还是需要将配置信息写入到slapd.d目录下的ldif文件里的,但是如果通过编写ldif文件的形式来添加的话又很麻烦,我这里有一个简便的方法,通过slaptest命令可以实现将slapd.conf的配置信息映射到slapd.d目录
mv /etc/openldap/slapd.d /etc/openldap/slapd.d.bak,先将之前的slapd.d备份;
mkdir /etc/openldap/slapd.d,创建新的slapd.d目录;
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d,slaptest的作用是测试配置文件是否正确,-f参数指定的是配置文件,即slapd.conf,-F参数指定的是配置文件目录,即slapd.d,通过该命令会将slapd.conf的配置信息映射到slapd.d,这样就避免了编写ldif文件改配置的繁琐工作了。
这个报错不影响,id2entry.bdb文件是服务启动时才会生成的。
8)修改文件属主
chown -R ldap.ldap /var/lib/ldap
chown -R ldap.ldap /etc/openldap/slapd.d
9)到这里就可以重启服务了
service slapd restart
10)查看服务的状态
service slapd status
验证服务可用性
1、添加一个账户
1)创建一个根节点
编写一个ldif文件,例如root.ldif
vim root.ldif
dn: dc=root,dc=test,dc=com
dc: xitong
o: xitong
objectclass: dcObject
objectclass: organization
保存退出。
通过ldapadd命令添加账户:
ldapadd -x -D "cn=admin,dc=root,dc=test,dc=com" -wroot123456 -f root.ldif -H ldap://localhost
-x表示简易验证,即账户名密码验证
-D参数表示管理员
-w后紧跟的是管理员的密码(注意小写的-w与密码间是没有空格的)
-W如果使用的是大写的-W,则表示隐式输入密码,会在执行命令后才让输密码
-f表示待添加账户的文件
-H表示ldap地址
2)创建一个组
编写一个ldif文件,例如default.ldif
vim default.ldif
dn: cn=default,dc=root,dc=test,dc=com
cn: default
description:: 6buY6K6k6LSm5Y+357uE
gidnumber: 100
objectclass: top
objectclass: posixGroup
ldapadd -x -D "cn=admin,dc=root,dc=test,dc=com" -wroot123456 -f default.ldif -H ldap://localhost
3)添加一个账户
vim user.ldif
dn: cn=ALL,cn=default,dc=root,dc=test,dc=com
businesscategory: false
cn: ALL
displayname: false
gecos: true
gidnumber: 100
homedirectory: /home/ALL
labeleduri: false
objectclass: top
objectclass: posixAccount
objectclass: inetOrgPerson
postalcode: A181A603769C1F98AD927E7367C7AA51
sn: ALL
uid: ALL
uidnumber: 1003
userpassword: Hadoop123
ldapadd -x -D "cn=admin,dc=root,dc=test,dc=com" -wroot123456 -f user.ldif -H ldap://localhost
2、查询添加的账户信息
ldapsearch -x -D "cn=admin,dc=root,dc=test,dc=com" -wroot123456 -b "dc=root,dc=test,dc=com" -LLL -H ldap://localhost
-x表示简易验证,即账户名密码验证
-D参数表示管理员
-w后紧跟的是管理员的密码(注意小写的-w与密码间是没有空格的)
-W如果使用的是大写的-W,则表示隐式输入密码,会在执行命令后才让输密码
-b表示开始搜索的节点
附件
自动化部署与配置脚本
其实做自动化部署也很简单,就是把上述说到的步骤封装到脚本里,并且事先准备好一个配置好的配置文件,放到指定目录下,然后再调用脚本即可
vim auto_install_openldap.sh
#!/bin/bash
yum install -y openldap openldap-servers openldap-clients openldap-devel compat-openldap
if [[ $? -ne 0 ]]; then
echo "Yum install failed!"
exit 1
fi
if [[ -d /etc/openldap/slapd.d ]];then
mv /etc/openldap/slapd.d /etc/openldap/slapd.d.$(date +%s)
mkdir /etc/openldap/slapd.d
fi
#Clear /var/lib/ldap/
rm -rf /var/lib/ldap/*
#Use a example(template file for DB_CONFIG
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
#Copy slapd.conf
if [[ -e /etc/openldap/slapd.conf ]];then
mv /etc/openldap/slapd.conf /etc/openldap/slapd.conf_$(date +%s)
fi
cp /opt/slapd.conf /etc/openldap/slapd.conf
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/
#Chang the owner of slapd.d
chown -R ldap.ldap /etc/openldap/slapd.d
#Chang the ower of ldap
chown -R ldap.ldap /var/lib/ldap
#Add syslog conf
lines=$(grep "ldap.log" /etc/rsyslog.conf | wc -l )
if [[ $lines -lt 1 ]];then
echo "local4.* /var/log/ldap.log" >> /etc/rsyslog.conf
touch /var/log/ldap.log
service rsyslog restart
fi
service slapd restart
sleep 2
#Check whether the service had been installed correctly
services=$(netstat -tunlp | grep -w 389 | wc -l)
if [[ $services -lt 1 ]];then
echo "Failed to start LDAP."
exit 1
else
echo "start LDAP successfully."
fi
自定义密码策略ldif文件
vim ppolicy.ldif
#policies ou
dn: ou=policies,dc=xitong,dc=qihoo,dc=com
description: password policies
destinationindicator: password policies
objectclass: top
objectclass: organizationalUnit
ou: policies
# Default Policies
dn: cn=default,ou=policies,dc=xitong,dc=qihoo,dc=com
cn: default
objectClass: top
objectClass: device
objectClass: pwdPolicy
objectClass: pwdPolicyChecker
pwdAllowUserChange: TRUE
pwdAttribute: userPassword
pwdFailureCountInterval: 86400
pwdGraceAuthNLimit: 0
pwdInHistory: 3
pwdLockout: TRUE
pwdLockoutDuration: 3600
pwdMaxAge: 0
pwdMaxFailure: 6
pwdMinAge: 0
pwdMinLength: 0
pwdMustChange: FALSE
pwdSafeModify: FALSE