LDAP安装调试

环境准备

1、Centos系统:CentOS7系统安装

OpenLDAP安装配置说明

此处采用yum 方式安装,通过修改slapd.conf 文件然后生成配置文件进行处理,以前版本通过yum安装会在/etc/openldap/ 下自动生成salpd.conf文件,新版本没有自已生成,所以我先用编译安装生成文件,取出slapd.conf,然后用yum安装,改造slapd.conf文件适合yum安装的配置文件。

以下是原始配置文件

#
# See slapd.conf(5) for details on configuration options.
# This file should NOT be world readable.
#
include         /etc/openldap/schema/core.schema
include         /etc/openldap/schema/openldap.schema
include         /etc/openldap/schema/ppolicy.schema

# Define global ACLs to disable default read access.

# Do not enable referrals until AFTER you have a working directory
# service AND an understanding of referrals.
#referral       ldap://root.openldap.org

pidfile         /run/openldap/slapd.pid #这里是修改的
argsfile        /run/openldap/slapd.args #这里是修改的

# Load dynamic backend modules:
#modulepath     /usr/libexec/openldap #这里是修改的
#moduleload     back_mdb.la
#moduleload     back_ldap.la

# Sample security restrictions
#       Require integrity protection (prevent hijacking)
#       Require 112-bit (3DES or better) encryption for updates
#       Require 63-bit encryption for simple bind
# security ssf=1 update_ssf=112 simple_bind=64

# Sample access control policy:
#       Root DSE: allow anyone to read it
#       Subschema (sub)entry DSE: allow anyone to read it
#       Other DSEs:
#               Allow self write access
#               Allow authenticated users read access
#               Allow anonymous users to authenticate
#       Directives needed to implement policy:
# access to dn.base="" by * read
# access to dn.base="cn=Subschema" by * read
# access to *
#       by self write
#       by users read
#       by anonymous auth
#
# if no access controls are present, the default policy
# allows anyone and everyone to read anything but restricts
# updates to rootdn.  (e.g., "access to * by * read")
#
# rootdn can always read and write EVERYTHING!

#######################################################################
# MDB database definitions
#######################################################################

database        mdb
maxsize         1073741824
suffix          "dc=my-domain,dc=com"
rootdn          "cn=Manager,dc=my-domain,dc=com"
# Cleartext passwords, especially for the rootdn, should
# be avoid.  See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
rootpw          secret
# 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
index   objectClass     eq

安装OpenLDAP

使用yum方式安装

#openldap相关组件,也可以用openldap* 代替。
yum install openldap*

yum install migrationtools#ldif文件生成工具。

slappasswd#设置openldap系统管理员密码

#记录下生成的加密密码,后续及连接其它系统有用。如果没有记住,就重新生成。
{SSHA}opYWrZLqyTmpQezYFfMITKnp+O5XsZDn

启动ldap

#添加自启动
systemctl start slapd
systmectl enable slapd

修改防火墙规则

#如果防火墙开启,需要添加防火墙规则
#也可以添加端口  --add-port=80/tcp
#添加规则:永久生效、属于public组,添加service ldpa

firewall-cmd --permanent --zone=public --add-service=ldap
firewall-cmd --permanent --zone=public --add-service=ldaps 
firewall-cmd –reload#重新加载防火墙规则

OpenLDAP配置及配置文件简要说明

添加数据模板文件

添加数据模板文件并赋权

#复制数据模板到指定目录
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

#更改文件所属用户、用户组
chown –R ldap:ldap /var/lib/ldap

修改slapd.conf文件

slapd.conf 文件一般保存在/etc/openldap/下,打开文件修改如下:

#####################################################################
#添加ldif模板
#####################################################################
include        /etc/openldap/schema/core.schema#这一行必须在最上面
include        /etc/openldap/schema/collective.schema
include        /etc/openldap/schema/corba.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/pmi.schema
include        /etc/openldap/schema/ppolicy.schema

# Load dynamic backend modules: 加载相关模块
modulepath      /usr/libexec/openldap
modulepath      /usr/lib64/openldap
#moduleload     back_mdb.la#mdb备份
#moduleload     back_ldap.la#ldap备份
moduleload      syncprov.la  #热备文件,新增加

#####################################################################
# MDB database definitions #LDAP基本配置
#####################################################################
database        bdb#使用bdb数据库

#mdb的缓存,这里不用
#maxsize1073741824suffix

"dc=cafintech,dc=com"#基本域名
#管理用户,cn可以随意 后面的必须和suffix一致
rootdn"cn=Manager,dc=cafintech,dc=com"

# Cleartext passwords, especially for the rootdn, should
# be avoid.  See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
# 管理用户密码 上面使用 slappasswd 命令生成的
Rootpw{SSHA}opYWrZLqyTmpQezYFfMITKnp+O5XsZDn

# 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
index   objectClass     eq#默认
index   entryCSN        eq#用于双机热备
index   entryUUID       eq#用于双机热备

##################双机热备配置#######################################
#####################################################################
# syncrepl configure
# syncprov 配置   
# 这是服务器2 的配置,其中的ServerID 1 是指服务器1  
# syncrepl  中的 rid=123 必须要和服务器1中的rid 一样
#  provider=ldap://172.17.1.15   是服务器1的地址
# 服务器1的配置和服务器2 的配置仅以上三点,其它都 一样。
####################################################################
overlay syncprov
syncprov-checkpoint 100 1
syncprov-sessionlog 100
serverID1#这里是第二台服务器,第一台服务器此处为2
syncreplrid=123#这里两台服务器要保持一样,
provider=ldap://172.17.1.15#这里是第一台服务器的地址。
bindmethod=simple#密码格式
binddn="cn=Manager,dc=cafintech,dc=com"#第一台服务器管理账户
 credentials=******#第一台服务器管理密码,前面slappasswd生成的
 searchbase="dc=cafintech,dc=com"#同步路径。
  schemachecking=on
type=refreshAndPersist
retry="60 +"
mirrormodeon#镜像打开
```

保存配置文件。
删除已生成配置文件,然后重新生成并修改权限,配置文件自动保存位置 ``/etc/openldap/slapd.d/``。

```shell
rm -rf /etc/openldap/slapd.d/* #删除配置文件

#生成新的配置文件
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d

chown -R ldap:ldap /etc/openldap/#配置文件权限
chown -R ldap:ldap /var/lib/ldap/#数据文件权限
```

重启服务(slapd)

`systemctl restart slapd`

下面是openldap正常启动的状态。
![ ldap正常状态](LDAP安装调试/ldapstatus.png)

### 生成基本数据

通过Migrationtools工具,生成基本数据文件

```shell
cd /usr/share/migrationtools/

vi migrate_common.ph

#修改如下位置

#修改61行:
$NAMINGCONTEXT{'group'} = "ou=Groups";

#修改71行:
$DEFAULT_MAIL_DOMAIN = "cafintech.com";

#修改74行:
$DEFAULT_BASE = "dc=cafintech,dc=com";

#修改90行:
$EXTENDED_SCHEMA = 1;

#生成基本库框架文件 base.ldif 
/usr/share/migrationtools/migrate_base.pl > /root/base.ldif

#加载base.ldif文件到openldap数据库
ldapadd -x -W -D "cn=Manager,dc=cafintech,dc=com" -f /root/base.ldif
```

添加完成后效果

![命令行添加结果 ](LDAP安装调试/database1.png) 


![工具查看结果](LDAP安装调试/database2.png)  

## 添加用户

首次执行脚本,需要手动添加用户组,Gid=1000(或其它Gid 但脚本中Gid 位置要相应修改)
首次执行脚本,需要手动添加用户主目录,因仅添加一次,就不加入到脚本中去了。

```shell
groupadd ldapuser
mkdir /home/guest
```

### 单个用户添加

采用在系统中添加用户,然后通过系统用户生成基本用户,然后导出文件,通过Migrationtools工具生成文件,通过ldapadd 命令导入到系统。

1、通过 useradd 添加用户
2、导出用户,用户密码,用户组到单独文件备用。

`Getent passwd | tail –n 3 > /root/users`

3、通过Migrationtools生成用户文件.

`/migrate_passwd.pl /root/users > users.ldif`

4、通过ldapadd 导入数据

`ldapadd -x -W -D "cn=Manager,dc=cafintech,dc=com" -f users.ldif`

5、这里我采用批处理方式进行。
定义用户文件用于添加用户调用,命名  users.txt 每行一个用户

```shell
admin
test
···
···
```

定义用户密码文件 命名password.txt 每行一个用户

```shell
admin:password1
···
···
```

### 脚本命令批量添加脚本

```shell
vi ~/useradd/useradd.sh

#! /bin/bash#脚本执行
set -e#执行不为 true 则退出
#create user from users#
#users content
#usera userb userc userd
#
for username in $(more ./users)#循环读取用户文件
do#开始执行
if [ -n $username ]#字符串不为null,长度大于零
then#则执行以下命令

#添加用户,不建立同名群组,指定用户目录并建立,加入指定群组。
useradd $username -N -d /home/guest/$username -m -g 1000

  #添加cafintech为用户密码。
  echo "cafintech" | passwd --stdin $username

  #输入用户添加完成信息,调试用,可无
  echo "User is create"
fi#跳出判断执行
done#结束循环
chpasswd < ./password#使用chpaswd 命令导入密码文件到密码中替换用户密码
echo "uspasswd is imported"#输出导入执行结果,调试用,可无
pwconv#使用密码系统生效
echo "uspasswd is changed"#输出用户密码更新执行结果,调试用,可无
echo
#以上用于在Linux系统中批量添加用户,并更新密码。
```

根据读取用户文件的行数,在/etc/passwd文件中从最后读取一定数量的用户。   

```shell
# awk 'END{print NR}' ./users
num=$(cat ./users| wc -l)#查询用户文件行数
echo num $num#显示行数,调试用,可无
echo "this have $num users"#输出用户数量,调试用,可无

#将指定数量的用户名写入指定文件 数量为上面查询所得。tail从文件尾部读取
getent passwd | tail -n${num}  > /root/userstxt
#将指定数量的用户密码写入指定文件 数量为上面查询所得。tail从文件尾部读取
getent shadow | tail -n${num} > /root/shadowtxt

#将新添加的用户添加到历史备份里,以备后查
cat users >> users.bak
#将新添加的用户密码添加到历史备份里,以备后查
cat password >> password.bak

echo "user and passwd is exported"#输出信息,调试用,可无
```

通过Migrationtools工具,生成用户模板idif文件

```shell
生成用户ldif文件
/usr/share/migrationtools/migrate_passwd.pl /root/userstxt > /root/usernews.ldif
echo "users is convert"#输出信息,调试用,可无

#使用ldapadd命令导入刚才生成的ldif文件到LDAP数据库中
ldapadd -x -w cafintechldap -D "cn=Manager,dc=cafintech,dc=com" -f /root/usernews.ldif
echo "user add to ldap success"#输出执行结果,调试用,可无
```

### 批量用户删除脚本

```shell
如果用户添加过程中某一过程中出错,使用用户添加脚本可能不成功,就使用此脚本删除Linux下的用户,减少UID使用。

vi ~/useradd/userdel.sh

#! /bin/bash
#create user from users
#users content
#usera userb userc userd
#循环读取自定义用户文本,并从用户中删除,同时删除用户目录
#
for username in $(more users)
do
if [ -n $username ]
then
  userdel -r $username
  rm -rf /home/ldapuser/$username
  echo "usse $username is deleted"
fi
done
```

### 执行批量添加用户

添加用户列表文件,每行一个用户,

`vi ~/useradd/users1

添加用户密码列表文件,每行一个用户,类似 ``user:passwd``

`vi ~/useradd/passwd`

执行命令

`./useradd.sh`

执行结果如下:
![database3](LDAP安装调试/database3.png)

  

![database6](LDAP安装调试/database6.png)  

## LDAP用户管理

LDAP用户管理有多种工具方式,本文同时使用WEB(PhpLDAPAdmin,后面有详细说明)端和Windows客户端Apache Directory Studio(此工具也可做为服务端搭建LDAP服务器,感兴趣请自行百度),此两类工具均可直接管理LDAP用户,WEB端主要用于移动或其它系统,客户端安装于管理员机器。本文主要介绍Windows 客户端,进行分组、权限管理

### 用户分组

添加的用户全部放置在People的主目录下,不便于管理,故根据现实中用户所属工作部门进行分组。   
分组使用organizationalUnit 属性   
操作步骤:

- 1、在要添加属性的地方右键,选择``New-->New Entry``.弹窗中默认选择,直接``下一步``。   
![用户管理1](LDAP安装调试/ApacheLdap1.png) 
- 
![用户管理2](LDAP安装调试/ApacheLdap2.png)  


- 2、在弹出窗口``Available``中输入``or (organizationalUnit)`` 下面会自动出现``organizationalUnit``等选项。选择``organizationalUnit``,双击或点击添加,会在右侧出现属性。直接点击``下一步``。    
![用户管理3](LDAP安装调试/ApacheLdap3.png)  

- 3、在弹出窗口中``RDN``项,等号前输入``ou``,等号后输入你 **要添加的用户组名** ,这里我以部门命名,另外添加一个管理员组。点击完成。
![用户管理4 ](LDAP安装调试/ApacheLdap4.png)  

- 4、重复执行1-3步骤,添加其它用户组。
- 5、如果添加多个,可以采用复制的方法。在新建好的用户组上右键,然后选择复制,然后在上层目录(People)上右键粘贴。    
![ 用户管理5](LDAP安装调试/ApacheLdap5.png)  

- 6、在弹出窗口中选择Rename entry and continue 然后在RDN “=”后面输入新组名,点击OK 完成添加新组。   
![用户管理6](LDAP安装调试/ApacheLdap6.png)  

### 将用户添加到用户组

- 1、选择要修改分组的用户,右键打开,选择 ``Move entry``    
![用户管理7](LDAP安装调试/ApacheLdap7.png)  

- 2、在弹出窗口中点击下拉按纽,选择合适的分组,然后点击确定。
![用户管理8](LDAP安装调试/ApacheLdap8.png)  

- 3、依次添加就可以了。
**可以使用Crtl  Shift 多选,然后批量移动用户到目录节点。**

### 批量添加用户到分组

导出用户分组和用户,这样操作,相当于把用户复制出来,分组重新添加,(本段主要介绍数据导入导出)。

- 1、在要导出数据的节点上右键,选择``Export->LDIF Export…``
![用户管理9](LDAP安装调试/ApacheLdap9.png)  
- 2、输入要选择的表达式,把objectClass=* 改为objectClass=inetOrgPerson(也可以是其它独有属性,示图是导出分组)在Returning Attributes:中填入dnQualifier (DN),取消All user attributes的勾选。点击下一步。在这里我们要导出全部属性。
![用户管理9](LDAP安装调试/ApacheLdap10.png)
- 3、选择文件保存路径,单击保存,系统自动导出。
![用户管理9](LDAP安装调试/ApacheLdap11.png)
- 4、打开导出的文件,这就是导出的文件格式。
![用户管理9](LDAP安装调试/ApacheLdap12.png) 
- 5、在uid=***,ou=People中间添加ou=CaHR(3-5-1添加的用户分组)注意中间用英文逗号分割。
![用户管理9](LDAP安装调试/ApacheLdap13.png)
- 6、修改完毕后,保存然后导入到系统。
在要导入数据的节点右键,Import--LDIF Import
![用户管理9](LDAP安装调试/ApacheLdap14.png)
- 7、在弹出窗口上,选择要导入的数据文件。最后点击完成。
![用户管理9](LDAP安装调试/ApacheLdap15.png)

有问题请查看本地日志,直接翻到最后,一般问题都出在最后一条记录上。   


## 与其它软件一体化整合
在LDAP中通过增加用户属性与属性值,来给用户赋予访问指定软软的权限,此权限需要与其它组件配置文件相配合。后续会详细说明。

### 用户属性
选择用户,右侧会显示用户所有属性,右键菜单选择添加新属性,输入ou(也可以是其它属性),点击添加,然后在Value栏中输入便于区别的值。其它软件通过搜索表达式,搜索这些属性的值,向本系统添加,或验证此用户。用户属性中不建议修改黑体字部分,容易出现错误,特别是UID更改后会变成新用户。
![用户管理9](LDAP安装调试/ApacheLdap16.png)

###用于其它软件中用户组属性
为便于管理,这里采用ou=Groups,dc=cafintech,dc=com 这个节点来管理用于其它软件中的用户组属性。

- 1、用添加用户分组的方法,向系统添加软件分组,这个分组尽量使用软件的名称,以便于区分。
![用户管理9](LDAP安装调试/ApacheLdap17.png)  

- 2、在要添加分组的位置,右键添加新节点,这里选择使用groupOfUniqueNames 这个类型,然后使用它的UniqueName属性,其值需要设置为用户DN ,类似uid=admin,ou=CaAdmin,ou=People,dc=cafintech,,dc=com
在RDN中建议使用cn属性,值为你要在其它软件中要使用的分组名称。点击下一步。
![用户管理9](LDAP安装调试/ApacheLdap18.png)  

- 3、在弹出窗口中uniqueMember 属性,输入一个用户的完整DN,然后还可以继续添加此属性,以增加其它用户到这个组。
![](LDAP安装调试/ApacheLdap19.png) 

- 4、利用数据复制粘贴的方法,添加新的软件内部分组,利用数据导入导出的方法,把用户添加到所需软件分组中。


## 文章引用

本文主要来源为官网的[OpenLDAP 2.4 Administrator's Guide](http://www.openldap.org/doc/admin24/OpenLDAP-Admin-Guide.pdf) 说明文件。

本文在写作及实际操作过程中部分参考过以下网站(不分先后,多少)

http://blog.chinaunix.net/uid-21926461-id-5676013.html #环境搭建方面
http://tonyguo.blog.51cto.com/379574/182432/   
http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=26168435&id=5746284   
http://blog.csdn.net/umke888/article/details/54380507   
http://www.cnblogs.com/moonson/archive/2008/11/20/1337775.html #双机热备方面   
http://blog.csdn.net/msda/article/details/42177851 #双机热备方面 

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 long@longger.xin

文章标题:LDAP安装调试

字数:4.2k

本文作者:Longger

发布时间:2017-11-20, 18:25:46

最后更新:2024-11-13, 21:13:57

原始链接:https://www.longger.xin/article/8456bd7d.html

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

×

喜欢就点赞,疼爱就打赏

github