通过yum源安装配置openldap

准备阶段

我们要通过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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343