openldap编译安装

参考资料

官网:http://www.openldap.org/
https://www.linuxidc.com/Linux/2016-08/134225.htm
http://v.colinlee.fish/posts/openldap-on-centos-7-speedy-tutorial.html

安装berkeley-db

wget http://download.oracle.com/berkeley-db/db-5.1.29.tar.gz	----openldap2.4.46版本只支持bdb4.8,4.9.5.0,5.1
yum install gcc-c++ gcc make -y
tar xf db-5.1.29.tar.gz 
cd db-5.1.29/build_unix/
../dist/configure --prefix=/usr/local/berkeleydb
make
make install

添加bdb库文件到系统

echo "/usr/local/berkeleydb/lib/" >> /etc/ld.so.conf
ldconfig -v

安装依赖包

yum install -y libtool-ltdl libtool-ltdl-devel openssl openssl-devel cyrus-sasl-devel tcp_wrappers tcp_wrappers-devel

安装openldap

wget ftp://ftp.ntua.gr/mirror/OpenLDAP/openldap-release/openldap-2.4.46.tgz
tar xf openldap-2.4.46.tgz

cd openldap-2.4.46
./configure --prefix=/usr/local/openldap --enable-dynamic --disable-static --enable-syslog --enable-crypt --enable-modules --enable-wrappers --enable-overlays  --enable-ldap --enable-accesslog --enable-debug --with-cyrus-sasl --with-tls CPPFLAGS=-I/usr/local/berkeleydb/include/ LDFLAGS=-L/usr/local/berkeleydb/lib/

make depend
make
make test (时间很长!!!)
make install

说明:–enable-overlays会安装所有模块到slapd中,会带有memberof属性,不需要单独添加memberof模块,需要配置文件中添加:overlay memberof,来开启

配置PATH变量

vim /etc/profile

export PATH=$PATH:/usr/local/openldap/bin:/usr/local/openldap/libexec:/usr/local/openldap/sbin

说明
bin/ --客户端工具如ldapadd、ldapsearch
etc/ --包含主配置文件slapd.conf、schema、DB_CONFIG等
include/
lib/
libexec/ --服务端启动工具slapd
sbin/ --服务端工具如slappasswd
share/
var/ --bdb数据、log存放目录

系统配置

ldap的配置按照以下步骤进行
1、设置超级密码
2、导入schema
3、设置根域,设置根域数据库管理员.根域可以设置多个.
4、创建用户节点、组节点和数据库超级管理员 --------到这一步结束系统就可以用ldap客户端访问了.
6、配置证书
7、设置索引
8、设置日志服务
9、添加写入和只读用户,并设置access权限
10、配置启动脚本
11、配置最多可查询的条目数

第一步、设置超级密码rootpw

slappasswd -s root@123      ----这个会得到一个加密后的密码,也可以不用 -s参数,用交互的方式得到加密密码
{SSHA}yA2ZeZhAn+ekDAt8bmac30tNKGyFgPeM

vim chrootpw.ldif

dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}yA2ZeZhAn+ekDAt8bmac30tNKGyFgPeM

手动启动openldap

slapd -d 256 -h "ldap:/// ldapi:///"
ldapadd -Y EXTERNAL -H ldapi:/// -f chrootpw.ldif

这个rootpw在后面的过程中没有用过,他是“上帝”,知道他存在,但是谁也没见过
命令报错:ldap_modify: Insufficient access (50)
解决ldap_modify: Insufficient access (50)报错

1、生成cn=config配置文件

生成之前生添加开启:memberof功能
vim /usr/local/openldap/etc/openldap/slapd.conf

#配置文件最后添加
overlay memberof
mkdir /usr/local/openldap/etc/openldap/slapd.d
slaptest -f /usr/local/openldap/etc/openldap/slapd.conf -F /usr/local/openldap/etc/openldap/slapd.d #需要启动过slapd

会生成:slapd.d/cn=config/olcDatabase={1}mdb/olcOverlay={0}memberof.ldif配置文件

2、修改权限

vim /usr/local/openldap/etc/openldap/slapd.d/cn\=config/olcDatabase\=\{0\}config.ldif
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage by * none	----将默认olcAccess: {0}to * by * none修改为此

3、添加设置管理员配置到配置文件

slapd -d 256 -h "ldap:/// ldapi:///" #重新启动
ldapadd -Y EXTERNAL -H ldapi:/// -f chrootpw.ldif

第二步、导入schema

文件都在 /usr/local/openldap/etc/openldap/schema 目录下,按以下命令导入

ldapadd -Y EXTERNAL -H ldapi:/// -f /usr/local/openldap/etc/openldap/schema/core.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /usr/local/openldap/etc/openldap/schema/corba.ldif 
ldapadd -Y EXTERNAL -H ldapi:/// -f /usr/local/openldap/etc/openldap/schema/cosine.ldif 
ldapadd -Y EXTERNAL -H ldapi:/// -f /usr/local/openldap/etc/openldap/schema/dyngroup.ldif 
ldapadd -Y EXTERNAL -H ldapi:/// -f /usr/local/openldap/etc/openldap/schema/inetorgperson.ldif 
ldapadd -Y EXTERNAL -H ldapi:/// -f /usr/local/openldap/etc/openldap/schema/java.ldif 
ldapadd -Y EXTERNAL -H ldapi:/// -f /usr/local/openldap/etc/openldap/schema/misc.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /usr/local/openldap/etc/openldap/schema/nis.ldif 
ldapadd -Y EXTERNAL -H ldapi:/// -f /usr/local/openldap/etc/openldap/schema/openldap.ldif

第三步、 设置根域,设置根域超级数据库管理员

我们的根域是dc=pre,dc=venusgroup,dc=com,dc=cn
设置管理分支:cn=manager,dc=pre,dc=venusgroup,dc=com,dc=cn
超级数据库管理员:cn=admin,cn=manager,dc=pre,dc=venusgroup,dc=com,dc=cn

用slappasswd 命令获取加密密码

slappasswd -s root@123         ---这个和上面的rootpw不是一回事
{SSHA}qNSHe8yf9KpCZ2nk3FbeiXuFAseLffHn

vim domain-dbadmin.ldif

dn: olcDatabase={0}config,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to *
  by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
  by dn.base="cn=admin,cn=manager,dc=pre,dc=venusgroup,dc=com,dc=cn" read
  by * none

dn: olcDatabase={1}mdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=pre,dc=venusgroup,dc=com,dc=cn

dn: olcDatabase={1}mdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=admin,cn=manager,dc=pre,dc=venusgroup,dc=com,dc=cn

dn: olcDatabase={1}mdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}inUp+4g6ISHw0hb639Ey1n5mlL+KlSQP

dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange
  by dn="cn=admin,cn=manager,dc=pre,dc=venusgroup,dc=com,dc=cn" write
  by anonymous auth
  by self write
  by * none
olcAccess: {1}to dn.base=""
  by * read
olcAccess: {2}to *
  by dn="cn=admin,cn=manager,dc=pre,dc=venusgroup,dc=com,dc=cn" write
  by * read

注:
1、dn: olcDatabase={0}config,cn=config dn: olcDatabase={1}mdb,cn=config 这里面的{0}config,{1}mdb,要和/etc/openldap/slapd.d/cn=config 目录下的内容一样,每次安装这些值可能是有差异的.
2、olcAccess: {1}to dn.base=""
​ by * read 这种地方的换行要注意,前面有2个空格.

ldapmodify -Y EXTERNAL -H ldapi:/// -f domain-dbadmin.ldif

第四步、创建用户节点、组节点和数据库超级管理员

vim basedomain.ldif

dn: dc=pre,dc=venusgroup,dc=com,dc=cn
objectClass: top
objectClass: dcObject
objectclass: organization
o: venusgroup

dn: cn=manager,dc=pre,dc=venusgroup,dc=com,dc=cn
objectClass: organizationalRole
cn: manager

dn: cn=admin,cn=manager,dc=pre,dc=venusgroup,dc=com,dc=cn
objectClass: organizationalRole
cn: admin
description: Directory Administrator
ldapadd -x -D cn=admin,cn=manager,dc=pre,dc=venusgroup,dc=com,dc=cn -W -f basedomain.ldif

输入之前明文密码. ------- 先设置密码,然后才用这个密码去创建相关条目.

配置启动脚本

useradd ldap -s /sbin/nologin
chown -R ldap.ldap /usr/local/openldap/
chown ldap.ldap /var/log/slapd.log

vim /usr/lib/systemd/system/slapd.service

[Unit]
Description=OpenLDAP Server Daemon
After=syslog.target network-online.target
Documentation=man:slapd
Documentation=man:slapd-config
Documentation=man:slapd-hdb
Documentation=man:slapd-mdb
Documentation=file:///usr/share/doc/openldap-servers/guide.html

[Service]
Type=forking
PIDFile=/usr/local/openldap/var/run/slapd.pid
Environment="SLAPD_URLS=ldap:/// ldaps:/// ldapi:///" "SLAPD_OPTIONS="
#EnvironmentFile=/etc/sysconfig/slapd
#ExecStartPre=/usr/libexec/openldap/check-config.sh
ExecStart=/usr/local/openldap/libexec/slapd -u ldap -h ${SLAPD_URLS} $SLAPD_OPTIONS

[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl start slapd
systemctl status slapd
systemctl enable slapd

设置索引

vim index.ldif

dn: olcDatabase={1}mdb, cn=config
changetype: modify
replace: olcDbIndex
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
olcDbIndex: uid,memberUid,nisMapName,nisMapEntry pres,eq,sub
olcDbIndex: entryCSN,entryUUID eq
olcDbIndex: memberOf eq

注:以上添加的索引是根据官网介绍和系统在运行时的报错,整理添加的。
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub 为ou,cn,mail,surname,givenname 几个属性,添加eq,pres,sub几个类型的索引。

ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f index.ldif

查看是否生效

ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=config '(olcDatabase={0}mdb)' olcDbIndex

设置日志服务

vim loglevel.ldif

dn: cn=config
changetype: modify
replace: olcLogLevel
olcLogLevel: stats
ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f loglevel.ldif

配置rsyslog服务

vim /etc/rsyslog.conf +73

# 设置如下           ---注意/var前面的 -,那是按照官网的介绍,加上可以提升日志效率
local4.*                      -/var/log/slapd.log
systemctl restart rsyslog.service
systemctl restart slapd.service
chown ldap:ldap /var/log/slapd.log

添加写入和只读用户,并设置access权限

为了第三方系统写入或者读取ldap中的数据,需要在管理分支上建立两个用户,写用户和只读用户
先用 slappasswd -s 明文密码 得到两个用户的加密密码

slappasswd -s 123456
{SSHA}Wyef/nPYOC3vf3fVtx4g6h4bR5gz1yXn

添加用户

vim adduser.ldif

dn: cn=readonly,cn=manager,dc=pre,dc=venusgroup,dc=com,dc=cn
cn: readonly
objectClass: person
sn: readonly
userPassword: {SSHA}Wyef/nPYOC3vf3fVtx4g6h4bR5gz1yXn

dn: cn=writeuser,cn=manager,dc=pre,dc=venusgroup,dc=com,dc=cn
cn: writeuser
objectClass: person
sn: writeuser
userPassword: {SSHA}Wyef/nPYOC3vf3fVtx4g6h4bR5gz1yXn
ldapadd -x -D cn=admin,cn=manager,dc=pre,dc=venusgroup,dc=com,dc=cn -W -f adduser.ldif

设置用户权限

vim addaccess.ldif

dn: olcDatabase={1}mdb,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange
  by dn="cn=admin,cn=manager,dc=pre,dc=venusgroup,dc=com,dc=cn" write
  by dn="cn=readonly,cn=manager,dc=pre,dc=venusgroup,dc=com,dc=cn" read
  by dn="cn=writeuser,cn=manager,dc=pre,dc=venusgroup,dc=com,dc=cn" write
  by anonymous auth
  by self write
  by * none
olcAccess: {1}to dn.base=""
  by * read
olcAccess: {2}to *
  by dn="cn=admin,cn=manager,dc=pre,dc=venusgroup,dc=com,dc=cn" write
  by dn="cn=readonly,cn=manager,dc=pre,dc=venusgroup,dc=com,dc=cn" read
  by dn="cn=writeuser,cn=manager,dc=pre,dc=venusgroup,dc=com,dc=cn" write
  by * read
olcAccess: {3}to dn.subtree="dc=pre,dc=venusgroup,dc=com,dc=cn" attrs=userPassword
  by self write
  by anonymous auth
  by dn="cn=admin,cn=manager,dc=pre,dc=venusgroup,dc=com,dc=cn" write
  by dn="cn=readonly,cn=manager,dc=pre,dc=venusgroup,dc=com,dc=cn" read
  by dn="cn=writeuser,cn=manager,dc=pre,dc=venusgroup,dc=com,dc=cn" write
  by * none
olcAccess: {4}to dn.subtree="dc=pre,dc=venusgroup,dc=com,dc=cn"
  by self write
  by dn="cn=admin,cn=manager,dc=pre,dc=venusgroup,dc=com,dc=cn" write
  by dn="cn=readonly,cn=manager,dc=pre,dc=venusgroup,dc=com,dc=cn" read
  by dn="cn=writeuser,cn=manager,dc=pre,dc=venusgroup,dc=com,dc=cn" write
  by * read
ldapmodify -Y EXTERNAL -H ldapi:/// -f addaccess.ldif

配置最多可查询的条目数

vim olcSizeLimit.ldif

dn: cn=config
changetype: modify
replace: olcSizeLimit
olcSizeLimit: 5000
ldapadd -Q -Y EXTERNAL -H ldapi:/// -f olcSizeLimit.ldif

到这里可以做主从了

系统验证

1、添加用户

vim add-user.ldif

dn: uid=5004439,dc=pre,dc=venusgroup,dc=com,dc=cn
uid: 5004439
cn: 5004439
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {SSHA}Wyef/nPYOC3vf3fVtx4g6h4bR5gz1yXn
shadowLastChange: 17781
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 10000
gidNumber: 10000
homeDirectory: /home/5004439
ldapadd -x -W -D cn=writeuser,cn=manager,dc=pre,dc=venusgroup,dc=com,dc=cn -f add-user.ldif

2、添加member组(组下用户会自己创建memberof属性)

vim mem-group.ldif

dn: cn=test,dc=pre,dc=venusgroup,dc=com,dc=cn
objectClass: groupOfNames
cn: test
member: uid=5004439,dc=pre,dc=venusgroup,dc=com,dc=cn
ldapadd -x -W -D cn=admin,cn=manager,dc=pre,dc=venusgroup,dc=com,dc=cn -f mem-group.ldif

注意:正常情况下只要member组添加了member属性,对应的用户条目中会自动添加memberof属性。线上环境和pre环境都未正常自动添加memberof属性,可能是memberof模块不正常。44.20上正常自动添加

3、手动为用户添加memberof属性(memberof属性会自己添加不需要手动)

dn: uid=john1,dc=pre,dc=venusgroup,dc=com,dc=cn
cn: John Doe
givenName: John1
sn: Doe
uid: john1
uidNumber: 5000
gidNumber: 1000
userPassword: {SHA}M6XDJwA47cNw9gm5kXV1uTQuMoY=
homeDirectory: /home/john1
mail: john1.doe@example.com
memberOf: cn=memtest,dc=pre,dc=venusgroup,dc=com,dc=cn
objectClass: top
objectClass: posixAccount
objectClass: inetOrgPerson

注意:memberOf属性会隐藏,可以通过搜索命令搜索

ldapsearch -x -D 'cn=admin,cn=manager,dc=pre,dc=venusgroup,dc=com,dc=cn' -W -b 'dc=pre,dc=venusgroup,dc=com,dc=cn' 'memberOf=cn=memtest,dc=pre,dc=venusgroup,dc=com,dc=cn'
ldapsearch -x -D 'cn=admin,cn=manager,dc=venusgroup,dc=com,dc=cn' -W -b 'dc=venusgroup,dc=com,dc=cn' 'uid=5004439' memberOf #显示指定用户的memberOf属性

4、为以有用户添加memberof属性

dn: uid=5002272,cn=yunwei,dc=venusgroup,dc=com,dc=cn
changetype: modify
add: memberOf
memberOf: cn=elk,dc=venusgroup,dc=com,dc=cn
memberOf: cn=abc,dc=venusgroup,dc=com,dc=cn #可添加多个,且值可为不存在的组
ldapadd -x -W -D cn=admin,cn=manager,dc=venusgroup,dc=com,dc=cn -f elk-add-user.ldif

5、官方memberof示例(可以不做)

dn: ou=Group,dc=venusgroup,dc=com,dc=cn
objectclass: organizationalUnit
ou: Group

dn: ou=People,dc=venusgroup,dc=com,dc=cn
objectclass: organizationalUnit
ou: People

dn: uid=memtest,ou=People,dc=venusgroup,dc=com,dc=cn
objectclass: account
uid: memtest

dn: cn=memgroup,ou=Group,dc=venusgroup,dc=com,dc=cn
objectclass: groupOfNames
cn: memgroup
member: uid=memtest,ou=People,dc=venusgroup,dc=com,dc=cn
member: uid=5004439,ou=People,dc=venusgroup,dc=com,dc=cn

6、向已存在memberof组中添加用户

dn: cn=mem,ou=test,dc=pre,dc=venusgroup,dc=com,dc=cn
changetype: modify
add: member
member: uid=john1,ou=test,dc=pre,dc=venusgroup,dc=com,dc=cn
member: uid=5004439,ou=test,dc=pre,dc=venusgroup,dc=com,dc=cn

删除某属性:只需把add: member,改为delete: member

禁止匿名登录

vim disable_anon.ldif

dn: cn=config
changetype: modify
add: olcDisallows
olcDisallows: bind_anon

dn: cn=config
changetype: modify
add: olcRequires

olcRequires: authc
dn: olcDatabase={-1}frontend,cn=config
changetype: modify
add: olcRequires
olcRequires: authc
ldapmodify -Y EXTERNAL -H ldapi:/// -f disable_anon.ldif

测试是否生效

ldapsearch -x -b "dc=pre,dc=venusgroup,dc=com,dc=cn" -H ldap://192.168.44.123
	ldap_bind: Inappropriate authentication (48)
		additional info: anonymous bind disallowed

安装LDAP控制台

安装httpd

yum -y install httpd

修改配置文件
vim /etc/httpd/conf/httpd.conf

AllowOverride All

启动服务测试

systemctl start httpd
systemctl enable httpd

测试
curl 127.0.0.1

安装phpldapadmin

yum install phpldapadmin

修改配置文件
vim /etc/phpldapadmin/config.php

#添加
$servers->setValue('server','host','127.0.0.1');
$servers->setValue('server','port',389);
$servers->setValue('server','base',array('dc=pre,dc=venusgroup,dc=com,dc=cn'));
$servers->setValue('login','auth_type','session');
#注释以下两个
//$servers->setValue('login','attr','dn');
// $servers->setValue('login','attr','uid');

修改httpd配置文件
vim /etc/httpd/conf.d/phpldapadmin.conf

Alias /phpldapadmin /usr/share/phpldapadmin/htdocs
Alias /ldapadmin /usr/share/phpldapadmin/htdocs

<Directory /usr/share/phpldapadmin/htdocs>
  <IfModule mod_authz_core.c>
    # Apache 2.4
	Require all granted
  </IfModule>
  <IfModule !mod_authz_core.c>
    # Apache 2.2
    Order Deny,Allow
    Deny from all
    Allow from 127.0.0.1
    Allow from ::1
  </IfModule>
</Directory>

重启httpd服务
访问测试
http://192.168.0.41/phpldapadmin
cn=admin,cn=manager,dc=pre,dc=venusgroup,dc=com,dc=cn

#查询所有用户
ldapsearch -x -D "cn=admin,cn=manager,dc=pre,dc=venusgroup,dc=com,dc=cn" -w 密码 -b "dc=pre,dc=venusgroup,dc=com,dc=cn" -H ldap://192.168.41.13:389
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wuxingge

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值