OpenLdap 配置安装with MDB,使用LAM管理LDAP,同时启用Slave服务器

Linux系统 0 1224 佚名 收藏

# OpenLdap 配置安装with MDB,使用LAM管理LDAP,同时启用Slave服务器


作者:东西南北


## **前端和后端**


OpenLDAP 服务器(slapd,独立 LDAP 守护程序)架构分为处理网络访问和协议处理的前端和处理数据存储的后端


## **可用的后端**


Openldap提供了以下这些可用数据存储后端, 我们最常用的是hdb这种数据库后端

- back-bdb:OpenLDAP 的第一个事务后端,建立在 Berkeley DB 之上

- back-hdb :  back-bdb 的一种变体,完全分层并支持子树重命名

- back-ldif : 建立在纯文本 LDIF 文件之上

- back-mdb:基于 OpenLDAP 的 Lightning 内存映射数据库 (LMDB) 构建的事务性后端

- back-ndb: 基于 MySQL 的 NDB 集群引擎构建的事务性后端

 

## **mdb** 数据库**后端性能测试**


(参考文献https://www.openldap.org/pub/hyc/mdb-paper.pdf)



[表 1比较了在“快速”模式下使用 slapadd 最初加载测试数据库时,back-mdb 与back-hdb 的基本性能。


|          | **real**   | **user**    | **sys**   |

| -------- | ---------- | ----------- | --------- |

| back-hdb | 66m09.831s | 115m52.374s | 5m15.860s |

| back-mdb | 29m33.212s | 22m21.264s  | 7m11.851s |


[表 2](#_bookmark2)  ldapsearch 比较


|          | **first** | **second** | **slapd size** | **DB size** |

| -------- | --------- | ---------- | -------------- | ----------- |

| back-hdb | 4m15.395s | 0m16.204s  | 26GB           | 15.6GB      |

| back-mdb | 0m14.725s | 0m10.807s  | 10GB           | 12.8GB      |


[表 3](#_bookmark3) 总结了 500 万个条目数据库中随机生成的查询的back-hdb与back-mdb 的结果


|          | **Searches/sec** | **Duration, msec** |

| -------- | ---------------- | ------------------ |

| back-hdb | 67456.11         | 1.89               |

| back-mdb | 119255.42        | 0.63               |


总结,MDB 的ldap 的查询效率是远高于传统的数据库,而ldap又是以读取为主的应用,可以说MDB这个数据库是专门为ldap量身定做的,近期笔者在工作中发现ldap有一些性能问题,参考很多针对LDAP的优化文章,其中一个就是把数据库后端修改为mdb,所以也有了这篇文章


## **OpenLdap 配置安装with MDB**


安装 openldap package 并启动 ldap 服务


```
yum install openldap-servers openldap-clients
systemctl start slapd
systemctl enable slapd
```


### 验证默认数据库类型,可以得到默认数据库为hdb


```
ldapsearch -Y EXTERNAL -Q -H ldapi:/// -LLL -o ldif-wrap=no -b cn=config '(objectClass=olcDatabaseConfig)' ''
dn: olcDatabase={-1}frontend,cn=configs
dn: olcDatabase={0}config,cn=config
dn: olcDatabase={1}monitor,cn=config
dn: olcDatabase={2}hdb,cn=config
```


Berkeley Database从DB_CONFIG文件中检索其大部分配置和调整选项。将示例数据库配置文件复制到 LDAP 数据目录 /var/lib/ldap 并更新文件权限(ldap用户会在安装ldap包时自动创建)


```
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap: /var/lib/ldap/*
```


### 生成LDAP管理员密码


```
slappasswd
```


```
helloworld123$
New password:
Re-enter new password:
{SSHA}AuZ3YLeHIIXz4+3d7eDo2uY9i7wm+rxp
```


记下{SSHA}AuZ3YLeHIIXz4+3d7eDo2uY9i7wm+rxp,马上要用


### 配置mdb数据库


创建mdb.ldif 文件用于用户构建mdb数据库


```
vim mdb.ldif
```


配置文件中对应域名请根据需要替换为自己所需要的,需要修改的地方有

olcSuffix: dc=test,dc=com #对应域名

olcRootDN: cn=admin,dc=test,dc=com  #对应管理员名称

olcRootPW: {SSHA}AuZ3YLeHIIXz4+3d7eDo2uY9i7wm+rxp #对应刚才哈希后的密码


```
dn: olcDatabase=mdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcMdbConfig
olcDatabase: mdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=test,dc=com
olcRootDN: cn=admin,dc=test,dc=com
olcRootPW: {SSHA}AuZ3YLeHIIXz4+3d7eDo2uY9i7wm+rxp
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
olcLastMod: TRUE
olcDbEnvFlags: nometasync
olcDbEnvFlags: writemap
olcDbMaxSize: 9048576000
```


### 添加mdb数据库


```
[root@ldap-01 ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f mdb.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "olcDatabase=mdb,cn=config"
```


### 导入基础** Schemas** 文件


```
[root@ldap-01 ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=cosine,cn=schema,cn=config"
[root@ldap-01 ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=nis,cn=schema,cn=config"
[root@ldap-01 ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=inetorgperson,cn=schema,cn=config"
```


### 测试配置


[root@ldap-01 ~]# slaptest
637db48b hdb_db_open: DB_CONFIG for suffix "dc=my-domain,dc=com" has changed.
637db48b Performing database recovery to activate new settings.
637db48b hdb_db_open: database "dc=my-domain,dc=com": recovery skipped in read-only mode. Run manual recovery if errors are encountered.
config file testing succeeded


其中hdb_db 报错信息可以忽略,因为我们没有使用hdb的数据库


## Monitor 配置


```
vim monitor.ldif
```


```
dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external, cn=auth" read by dn.base="cn=admin,dc=test,dc=com" read by * none
```


dn.base 注意修改相应信息,于上面定义的管理员一致


然后导入修改后的monitor.ldif


```
[root@ldap-01 ~]# ldapmodify -Y EXTERNAL  -H ldapi:/// -f monitor.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}monitor,cn=config"
```


## 添加域信息


### 为你的域生成 basedomain.ldif 文件


```
vim basedomain.ldif
```


```
dn: dc=test,dc=com
dc: test
objectClass: top
objectClass: domain
dn: cn=admin,dc=test,dc=com
objectClass: organizationalRole
cn: admin
description: LDAP Manager
dn: ou=People,dc=test,dc=com
objectClass: organizationalUnit
ou: People
dn: ou=Group,dc=test,dc=com
objectClass: organizationalUnit
ou: Group
```


### 导入目录结构


```
[root@lpad-01 ~]# ldapadd -x -W -D "cn=admin,dc=test,dc=com" -f basedomain.ldif
Enter LDAP Password: 
adding new entry "dc=test,dc=com"
adding new entry "cn=ldapadmin ,dc=test,dc=com"
adding new entry "ou=People,dc=test,dc=com"
adding new entry "ou=Group,dc=test,dc=com"
```


### 验证配置信息


```
[root@ldap-01 ~]# ldapsearch -Y EXTERNAL -H ldapi:/// -b "cn=config" '(objectClass=*)' dn -LLL
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: cn=config
dn: cn=schema,cn=config
dn: cn={0}core,cn=schema,cn=config
dn: cn={1}cosine,cn=schema,cn=config
dn: cn={2}nis,cn=schema,cn=config
dn: cn={3}inetorgperson,cn=schema,cn=config
dn: olcDatabase={-1}frontend,cn=config
dn: olcDatabase={0}config,cn=config
dn: olcDatabase={1}monitor,cn=config
dn: olcDatabase={2}hdb,cn=config
dn: olcDatabase={3}mdb,cn=config
```


## 开启日志配置


```
vim loglevel.ldif
```


```
dn: cn=config
changetype: modify
replace: olcLogLevel
olcLogLevel: 255
```


```
[root@ldap-01 ~]# ldapmodify -Y EXTERNAL -H ldapi:/// -f loglevel.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"
```


### 修改日志配置文件


```
[root@ldap-01 ~]#touch /var/log/ldap/slapd.log
[root@ldap-01 ~]#echo "local4.* /var/log/ldap/slapd.log" >> /etc/rsyslog.conf
```


### 重启相关服务


```
systemctl restart rsyslog 
systemctl restart slapd 
systemctl status slapd
```


## 安装配置LAM管理ldap服务器


### 安装apache web服务器


```
yum install httpd
```


### 安装php7


#### 1.安装epel-release


```
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
```


#### 2.安装PHP7的rpm源


```
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
```


#### 3.安装PHP7


```
yum -y install php72w
```


#### 安装LAM


```
wget https://master.dl.sourceforge.net/project/lam/LAM/7.2/ldap-account-manager-7.2-0.fedora.1.noarch.rpm
```


```
chmod +x  chmod +x ldap-account-manager-7.2-0.fedora.1.noarch.rpm
rpm -ivh ldap-account-manager-7.2-0.fedora.1.noarch.rpm
```


#### 浏览器访问http://IP/lam


#### 1 配置LAM configuration,默认用户名密码lam:lam


#### 2 Edit server profiles


#### 3 General Settings 修改两处配置对应自己的服务器信息


#### 4 Account types 修改对应信息


#### 5 尝试建立一个新的用户


到此,LDAP主服务器完成




# 配置ldap从属服务器


## 启用syncprov模块,主服务器操作


```
vim mod_syncprov.ldif
```


```
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: /usr/lib64/openldap
olcModuleLoad: syncprov.la
```


```
[root@ldap-01 ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f mod_syncprov.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=module,cn=config"
```


### 验证加载成功


```
[root@ldap-01 ~]# slapcat -n 0 | grep olcModuleLoad
olcModuleLoad: {0}syncprov.la
```


### 配置同步配置文件


```
vim syncprov.ldif
```


```
dn: olcOverlay=syncprov,olcDatabase={3}mdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
olcSpCheckpoint: 100 10
olcSpSessionLog: 100
```


```
[root@ldap-01 ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f syncprov.ldif
```


# Slave操作


## 安装 openldap package 并启动 ldap 服务


```
yum install openldap-servers openldap-clients
systemctl start slapd
systemctl enable slapd
```


## 准备数据库配置文件


```
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap: /var/lib/ldap/*
```


## 配置mdb数据库,创建mdb.ldif 文件用于用户构建mdb数据库


```
vim mdb.ldif
```



配置文件中对应域名请根据需要替换为自己所需要的,需要修改的地方有

olcSuffix: dc=test,dc=com #对应域名

olcRootDN: cn=admin,dc=test,dc=com #对应管理员名称

olcRootPW: {SSHA}AuZ3YLeHIIXz4+3d7eDo2uY9i7wm+rxp #对应刚才哈希后的密码


```
dn: olcDatabase=mdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcMdbConfig
olcDatabase: mdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=test,dc=com
olcRootDN: cn=admin,dc=test,dc=com
olcRootPW: {SSHA}AuZ3YLeHIIXz4+3d7eDo2uY9i7wm+rxp
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
olcLastMod: TRUE
olcDbEnvFlags: nometasync
olcDbEnvFlags: writemap
olcDbMaxSize: 9048576000
```

## 添加mdb数据库


```
[root@ldap-02 ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f mdb.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "olcDatabase=mdb,cn=config"
```


## 导入基础** Schemas** 文件


```
[root@ldap-02 ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=cosine,cn=schema,cn=config"
[root@ldap-02 ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=nis,cn=schema,cn=config"
[root@ldap-02 ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=inetorgperson,cn=schema,cn=config"
```

### 导入同步配置


```
vim rp.ldif
```


```
dn: olcDatabase={3}mdb,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=001
  provider=ldap://ldap-01:389/
  bindmethod=simple
  binddn="cn=admin,dc=test,dc=com"
  credentials=helloworld123$
  searchbase="dc=test,dc=com"
  scope=sub
  schemachecking=on
  type=refreshAndPersist
  retry="30 5 300 3"
  interval=00:00:05:00
```
```
[root@ldap-02 ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f rp.ldif
```


### 登录主服务器LAM,修改配置信息,验证从服务器已经同步配置


http://主服务器IP/lam


修改Server Address,使用从服务器IP,保存退出


重新登录LAM,使用管理员用户名密码,此时发现刚才在主服务器新建的用户已经出现在从服务器


至此,从服务器部署完毕


相关推荐:

网友留言:

您需要 登录账户 后才能发表评论

我要评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。
验证码