03-openldap服务端安装配置

摘要:
建议使用yum进行安装,它简单、方便、快速。
openldap服务端安装配置

阅读目录

  1. 基础环境准备
  2. 安装openldap服务端
  3. 初始化openldap配置
  4. 启动OpenLDAP
  5. 重新生成配置文件信息
  6. 规划OpenLDAP目录树组织架构
  7. 使用GUI客户端登录查看
  8. openldap配置日志
  9. 通过migrationtools实现用户及用户组的添加
  10. OpenLDAP控制策略

1. 基础环境准备

1.1 系统环境
  • 系统:centos 6.9
  • 软件:openldap-2.4.23-32

表1:IP地址及主机名规划

主机系统版本IP地址主机名时间同步防火墙SElinux
ldap服务端Centos 6.9最小化安装192.168.244.17mldap01.gdy.com必须同步关闭关闭
ldap客户端Centos 6.9最小化安装192.168.244.18test01.gdy.com必须同步关闭关闭

表2:OpenLDAP相关软件包套件

软件包名称软件包功能描述
openldapOpenLDAP服务端和客户端必须用的库文件
openldap-clients在LDAP服务端上使用, 用于查看和修改目录的命令行的包
openldap-servers用于启动服务和设置,包含单独的LDAP后台守护程序
openldap-servers-sql支持SQL模块
compat-openldapopenldap兼容性库

将主机名添加至hosts文件中(两主机都要,本文主要为服务端)

[root@mldap01 ~]# cat >> /etc/hosts << EOF
> 192.168.244.17    mldap01.gdy.com    mldap01
> 192.168.244.18    test01.gdy.com     test01
> EOF

2. 安装openldap服务端

通过yum安装openldap组建,解决软件包的依赖关系。
建议使用yum安装,简单方便快捷。

[root@mldap01 ~]# yum -y install openldap openldap-servers openldap-clients 

3. 初始化OpenLDAP配置

  1. 复制配置文件至/etc/openldap目录下
[root@mldap01 ~]# cp -a /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf
[root@mldap01 ~]# rm -rf /etc/openldap/slapd.d/*
  1. 创建数据库文件(从模板进行复制),生成DB_CONFIG及启动OpenLDAP进程slapd,命令如下。
[root@mldap01 ~]# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
[root@mldap01 ~]# chown -R ldap.ldap /var/lib/ldap/*
  1. 生成密码待用

    [root@mldap01 ~]# slappasswd 
    New password: 
    Re-enter new password: 
    {SSHA}MPZ6cRiXmkjFylwNetRnZunefUEzuKVL
    
  2. 修改配置文件

    除了loglevel新增,其他配置均为修改

    [root@mldap01 ~]# vim /etc/openldap/slapd.conf
    access to *
            by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read
            by dn.exact="cn=Manager,dc=gdy,dc=com" read
            by * none
    suffix          "dc=gdy,dc=com"
    rootdn          "cn=Manager,dc=gdy,dc=com"
    rootpw          {SSHA}MPZ6cRiXmkjFylwNetRnZunefUEzuKVL
    loglevel -1      # 新增在最后一行
    
  3. 修改相关文件属性

    [root@mldap01 ~]# chown ldap.ldap -R /etc/openldap
    [root@mldap01 ~]# chown ldap.ldap -R /var/lib/ldap
    [root@mldap01 ~]# rm -rf /etc/openldap/slapd.d/*
    

4. 启动OpenLDAP,并设置成开机启动

[root@mldap01 ~]# /etc/init.d/slapd restart
Stopping slapd:                                            [FAILED]
ls: cannot access /etc/openldap/slapd.d//cn=config/olcDatabase*.ldif: No such file or directory
Starting slapd:                                            [  OK  ]
[root@mldap01 ~]# ss -tnlp | grep slapd
LISTEN     0      128                      :::389                     :::*      users:(("slapd",10497,8))
LISTEN     0      128                       *:389                      *:*      users:(("slapd",10497,7))
[root@mldap01 ~]# chkconfig slapd on
[root@mldap01 ~]# chkconfig --list slapd
slapd           0:off   1:off   2:on    3:on    4:on    5:on    6:off

5. 重新生成配置文件信息

每次修改了配置文件,都需要删除/etc/openldap/slapd.d/*,重新生成

[root@mldap01 ~]# ls -lh /etc/openldap/slapd.d/  
total 0
[root@mldap01 ~]# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/
config file testing succeeded
[root@mldap01 ~]# chown ldap.ldap -R /etc/openldap/
[root@mldap01 ~]# ls -lh /etc/openldap/slapd.d/
total 8.0K
drwxr-x--- 3 ldap ldap 4.0K May 22 15:21 cn=config
-rw------- 1 ldap ldap 1.3K May 22 15:21 cn=config.ldif

6. 规划OpenLDAP目录树组织架构

  1. 通过LDIF添加目录树

    [root@mldap01 ~]# cat << EOF | ldapadd -x -D "cn=Manager,dc=gdy,dc=com" -W
    > dn: dc=gdy,dc=com
    > dc: gdy
    > objectClass: top
    > objectClass: domain
    > 
    > dn: ou=people,dc=gdy,dc=com
    > ou: people
    > objectClass: top
    > objectClass: organizationalUnit
    > 
    > dn: ou=group,dc=gdy,dc=com
    > ou: group
    > objectClass: top
    > objectClass: organizationalUnit
    > EOF
    Enter LDAP Password: 
    adding new entry "dc=gdy,dc=com"
    
    adding new entry "ou=people,dc=gdy,dc=com"
    
    adding new entry "ou=group,dc=gdy,dc=com"
    
  2. 通过ldapsearch查看目录树架构

    [root@mldap01 ~]# ldapsearch -x -LLL          
    dn: dc=gdy,dc=com
    dc: gdy
    objectClass: top
    objectClass: domain
    
    dn: ou=people,dc=gdy,dc=com
    ou: people
    objectClass: top
    objectClass: organizationalUnit
    
    dn: ou=group,dc=gdy,dc=com
    ou: group
    objectClass: top
    objectClass: organizationalUnit
    

    如果报错

    [root@mldap01 ~]# ldapsearch -x -LLL

    No such object (32)

    解决方法:

    [root@mldap01 ~]# cat >> /etc/openldap/ldap.conf << EOF 
    BASE dc=gdy,dc=com
    URI ldap://mldap01.gdy.com
    EOF
    

7. 使用GUI客户端登录查看

LDAP GUI客户端有如下:

  • phpLDAPadmin:web管理客户端
  • LDAPAdmin:window客户端
  • LAM:web管理客户端

本文使用GUI客户端为LDAPAdmin,该工具是window下一个绿色程序。所以非常推荐

  1. LDAPAdmin安装

    LDAPAdmin安装非常简单,可以从官网地址下载,然后解压即用

  2. LDAPAdmin程序使用

    03-openldap服务端安装配置第1张

  3. LDAP配置界面选项介绍

    • Host: 连接OpenLDAP服务端所使用的IP地址。
    • Port: 连接OpenLDAP服务所使用的端口,默认使用389端口,加密使用636端口。
    • Version:OpenLDAP服务端所使用的版本
    • Base: OpenLDAP的根域,如dc=gdy,dc=com
    • Username: OpenLDAP服务管理员,如cn=Manager,dc=gdy,dc=com
    • Password: OpenLDAP管理员密码,通过rootpw指定。
  4. 连接至OpenLDAP服务端进行管理

    03-openldap服务端安装配置第2张

  5. 其他使用(未写了,因为和普通的工具一样使用)
    参考另一篇文档LDAPAdmin使用

8. openldap配置日志

  1. openldap的日志级别

    [root@mldap01 ~]# slapd -d ?
    Installed log subsystems:
    
            Any                            (-1, 0xffffffff)   //开启所有的dug信息
            Trace                          (1, 0x1)    //跟踪trace函数调用
            Packets                        (2, 0x2)    //与软件包的处理相关的dug信息 
            Args                           (4, 0x4)    //全面的debug信息
            Conns                          (8, 0x8)    //链接数管理的相关信息
            BER                            (16, 0x10)  //记录包发送和接收的信息
            Filter                         (32, 0x20)  //记录过滤处理的过程
            Config                         (64, 0x40)  //记录配置文件的相关信息
            ACL                            (128, 0x80)  //记录访问控制列表的相关信息
            Stats                          (256, 0x100)  //记录链接、操作以及统计信息
            Stats2                         (512, 0x200)  //记录向客户端响应的统计信息
            Shell                          (1024, 0x400)  //记录与shell后端的通信信息
            Parse                          (2048, 0x800)  //记录条目的分析结果信息
            Sync                           (16384, 0x4000)  //记录数据同步资源消耗的信息
            None                           (32768, 0x8000)  //不记录
    
    NOTE: custom log subsystems may be later installed by specific code
    
  2. 创建目录及调整权限,用于存放日志文件

    [root@mldap01 ~]# mkdir -pv /var/log/slapd
    mkdir: created directory `/var/log/slapd'
    [root@mldap01 ~]# chown ldap.ldap /var/log/slapd
    
  3. 修改日志文件,重启rsyslog使其加载OpenLDAP参数

    [root@mldap01 ~]# cat >> /etc/rsyslog.conf << EOF
    > local4.*                                  /var/log/slapd/slapd.log
    > EOF
    [root@mldap01 ~]# tail -1 /etc/rsyslog.conf 
    local4.*                                  /var/log/slapd/slapd.log
    [root@mldap01 ~]# /etc/init.d/rsyslog restart
    Shutting down system logger:                               [  OK  ]
    Starting system logger:                                    [  OK  ]
    
  4. 查看日志配置是否生效

    由于在2.4小节的时候已经设置记录了所有文件。所以没有配置slapd.conf也没有重启slapd进程。

    使用tail -f 监听日志文件,然后使用LDAPAdmin刷新一下立马就会有日志出现,有日志出现就证明生效了。

    [root@mldap01 ~]# tail -f /var/log/slapd/slapd.log 
    May 22 16:24:38 mldap01 slapd[10497]: daemon: activity on 1 descriptor
    May 22 16:24:38 mldap01 slapd[10497]: daemon: activity on:
    May 22 16:24:38 mldap01 slapd[10497]:  14r
    May 22 16:24:38 mldap01 slapd[10497]: 
    May 22 16:24:38 mldap01 slapd[10497]: daemon: read active on 14
    May 22 16:24:38 mldap01 slapd[10497]: daemon: epoll: listen=7 a
    ...
    
  5. 利用系统logrotate实现自动切割日志

    [root@mldap01 ~]# cat > /etc/logrotate.d/ldap << EOF 
    > /var/log/slapd/slapd.log {
    >     prerotate
    >         /usr/bin/chattr -a /var/log/slapd/slapd.log
    >     endscript
    >     compress
    >     delaycompress
    >     notifempty
    >     rotate 100
    >     size 10M
    >     postrotate
    >         /usr/bin/chattr +a /var/log/slapd/slapd.log
    >     endscript
    > }
    > EOF
    

    此时当/var/log/slapd/slapd.log日志大于10M就会自动切割了。

9. 通过migrationtools实现用户及用户组的添加

  1. 安装migrationtools工具

    [root@mldap01 ~]# yum -y install migrationtools
    
  2. 修改migrationtools的配置文件

    修改/usr/share/migrationtools/migrate_common.ph文件中的两个地方

    03-openldap服务端安装配置第3张

  3. 使用migrationtools生成openldap根域条目和用户条目及组条目

    [root@mldap01 ~]# /usr/share/migrationtools/migrate_base.pl > base.ldif
    [root@mldap01 ~]# /usr/share/migrationtools/migrate_passwd.pl /etc/passwd > passwd.ldif
    [root@mldap01 ~]# /usr/share/migrationtools/migrate_group.pl /etc/group > group.ldif
    
  4. 导入生成的ldif文件

    [root@mldap01 ~]# ldapadd -x -W -D "cn=Manager,dc=gdy,dc=com" -c -f base.ldif 
    加-c是指跳过错误,继续导入
    Enter LDAP Password: 
    adding new entry "dc=gdy,dc=com"
    ldap_add: Already exists (68)
    
    adding new entry "ou=Hosts,dc=gdy,dc=com"
    ...
    adding new entry "ou=People,dc=gdy,dc=com"
    ldap_add: Already exists (68)
    
    adding new entry "ou=Group,dc=gdy,dc=com"
    ldap_add: Already exists (68)
    ...
    adding new entry "nisMapName=netgroup.byhost,dc=gdy,dc=com"
    
    [root@mldap01 ~]# ldapadd -x -W -D "cn=Manager,dc=gdy,dc=com" -c -f group.ldif 
    Enter LDAP Password: 
    adding new entry "cn=root,ou=Group,dc=gdy,dc=com"
    
    adding new entry "cn=bin,ou=Group,dc=gdy,dc=com"
    
    adding new entry "cn=daemon,ou=Group,dc=gdy,dc=com"
    ...
    adding new entry "cn=ntp,ou=Group,dc=gdy,dc=com"
    
    adding new entry "cn=ldap,ou=Group,dc=gdy,dc=com"
    
    adding new entry "cn=tomcat,ou=Group,dc=gdy,dc=com"
    
    [root@mldap01 ~]# ldapadd -x -W -D "cn=Manager,dc=gdy,dc=com" -c -f passwd.ldif 
    Enter LDAP Password: 
    adding new entry "uid=root,ou=People,dc=gdy,dc=com"
    
    adding new entry "uid=bin,ou=People,dc=gdy,dc=com"
    ...
    adding new entry "uid=ntp,ou=People,dc=gdy,dc=com"
    
    adding new entry "uid=ldap,ou=People,dc=gdy,dc=com"
    
    adding new entry "uid=tomcat,ou=People,dc=gdy,dc=com"
    
  5. 此时使用LDAPAdmin查看

    03-openldap服务端安装配置第4张

10. OpenLDAP控制策略

默认情况下,不允许OpenLDAP用户自身修改密码,仅管理员具有修改权限。为了提高个人帐号的安全性,需要让用户自身可以修改并更新密码信息,不需要管理员干涉。具体步骤如下:

# 用户没有权限修改密码
[appman@test01 ~]$ passwd 
Changing password for user appman.
Enter login(LDAP) password: 
New password: 
Retype new password: 
LDAP password information update failed: Insufficient access   # 权限不足
passwd: Authentication token manipulation error

# 在openldap服务器上修改slapd.conf配置文件。
[root@mldap01 ~]# vim /etc/openldap/slapd.conf    # 在database config行上面添加,否则无效
access to attrs=shadowLastChange,userPassword
        by self write
        by * auth

access to *
        by * read
[root@mldap01 ~]# rm -rf /etc/openldap/slapd.d/*
[root@mldap01 ~]# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/
config file testing succeeded
[root@mldap01 ~]# chown -R ldap.ldap /etc/openldap
[root@mldap01 ~]# /etc/init.d/slapd restart
Stopping slapd:                                            [  OK  ]
Starting slapd:                                            [  OK  ]

# 配置后,用户有权限更改密码了。
[appman@test01 ~]$ passwd 
Changing password for user appman.
Enter login(LDAP) password: 
New password: 
Retype new password: 
LDAP password information changed for appman
passwd: all authentication tokens updated successfully.

11. 本文系列通用ldif, 所有实验都删除后重新使用下面ldif

dn: dc=gdy,dc=com
dc: gdy
objectClass: top
objectClass: domain

dn: ou=people,dc=gdy,dc=com
ou: people
objectClass: top
objectClass: organizationalUnit

dn: ou=group,dc=gdy,dc=com
ou: group
objectClass: top
objectClass: organizationalUnit

dn: uid=user1,ou=people,dc=gdy,dc=com
uid: user1
cn: user1
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 30001
gidNumber: 30001
homeDirectory: /home/user1

dn: uid=user2,ou=people,dc=gdy,dc=com
uid: user2
cn: user2
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 30002
gidNumber: 30002
homeDirectory: /home/user2

dn: uid=user3,ou=people,dc=gdy,dc=com
uid: user3
cn: user3
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 30003
gidNumber: 30003
homeDirectory: /home/user3

dn: uid=user4,ou=people,dc=gdy,dc=com
uid: user4
cn: user4
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 30004
gidNumber: 30004
homeDirectory: /home/user4

dn: uid=user5,ou=people,dc=gdy,dc=com
uid: user5
cn: user5
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 30005
gidNumber: 30005
homeDirectory: /home/user5

dn: uid=user6,ou=people,dc=gdy,dc=com
uid: user6
cn: user6
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 30006
gidNumber: 30006
homeDirectory: /home/user6

dn: uid=user7,ou=people,dc=gdy,dc=com
uid: user7
cn: user7
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 30007
gidNumber: 30007
homeDirectory: /home/user7

dn: uid=user8,ou=people,dc=gdy,dc=com
uid: user8
cn: user8
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 30008
gidNumber: 30008
homeDirectory: /home/user8

dn: uid=user9,ou=people,dc=gdy,dc=com
uid: user9
cn: user9
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 30009
gidNumber: 30009
homeDirectory: /home/user9

dn: uid=user10,ou=people,dc=gdy,dc=com
uid: user10
cn: user10
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 30010
gidNumber: 30010
homeDirectory: /home/user10

dn: cn=user1,ou=group,dc=gdy,dc=com
objectClass: posixGroup
objectClass: top
cn: user1
gidNumber: 30001

dn: cn=user2,ou=group,dc=gdy,dc=com
objectClass: posixGroup
objectClass: top
cn: user2
gidNumber: 30002

dn: cn=user3,ou=group,dc=gdy,dc=com
objectClass: posixGroup
objectClass: top
cn: user3
gidNumber: 30003

dn: cn=user4,ou=group,dc=gdy,dc=com
objectClass: posixGroup
objectClass: top
cn: user4
gidNumber: 30004

dn: cn=user5,ou=group,dc=gdy,dc=com
objectClass: posixGroup
objectClass: top
cn: user5
gidNumber: 30005

dn: cn=user6,ou=group,dc=gdy,dc=com
objectClass: posixGroup
objectClass: top
cn: user6
gidNumber: 30006

dn: cn=user7,ou=group,dc=gdy,dc=com
objectClass: posixGroup
objectClass: top
cn: user7
gidNumber: 30007

dn: cn=user8,ou=group,dc=gdy,dc=com
objectClass: posixGroup
objectClass: top
cn: user8
gidNumber: 30008

dn: cn=user9,ou=group,dc=gdy,dc=com
objectClass: posixGroup
objectClass: top
cn: user9
gidNumber: 30009

dn: cn=user10,ou=group,dc=gdy,dc=com
objectClass: posixGroup
objectClass: top
cn: user10
gidNumber: 30010

免责声明:文章转载自《03-openldap服务端安装配置》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇node.js和express.js中添加验证码ggplot2 theme相关设置—线条设置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Log4j使用指南

1         概述本文档是针对Log4j日志工具的使用指南。包括:日志介绍、日志工具介绍、Log4j基本使用、Log4j的高级使用、Spring与log4j的集成等。并进行了举例说明。 本文档适合所有Java开发人员。 2         日志介绍存储软件程序、服务或操作系统产生的消息记录的文件。 电脑里的日志是指日志数据可以是有价值的信息宝库,也可...

《自拍教程40》Python adb一键导出Log

Android设备,比如车载系统实车路试过程中, 车上操作电脑比较麻烦,如果车载系统出现了Bug, 如何很方便地一次性导出相关的log来(logcat, dbus, 高德地图log,gps定位log等)来呢? 其实我们只需要一个python脚本就可以搞定! 准备阶段 adb pull 命令, 可以把Android系统里的文件,pull到电脑端 导出的Lo...

windows计划任务+批处理文件实现oracle数据库的定时备份与恢复

1.备份:PS:2014-1-15 如果导出的dmp数据文件不大的话,就直接每天导出好了,不要只保存七天的数据。然后顶起通过winrar对文件进行打包,我发现dmp文件的压缩包还是很高的。 那么就需要考虑在导出的dmp文件末尾加上日期了。bat脚本里面有date和time的函数,通过以下函数我们就可以得到想要的日期了。如果要求日期是以"-"结束,需要设定日...

Mysql:windows上mysql服务管理

自5.1.21及以后的变化: The following table shows the available servers for Windows in MySQL 5.1.20 and earlier. Binary Description mysqld-nt Optimized binary with named-pipe sup...

MySQL 8.0.14版本新功能详解

点击▲关注 “数据和云”   给公众号标星置顶 更多精彩 第一时间直达 作者:崔虎龙,云和恩墨-开源架构部-MySQL技术顾问,长期服务于数据中心(金融,游戏,物流)行业,熟悉数据中心运营管理的流程及规范,自动化运维 等方面。擅长MySQL,Redis,MongoDB 数据库高可用设计 和 运维故障处理,备份恢复,升级迁移,性能优化 。 MySQL已进...

运行 FreeSWITCH

读到本章,你应该对 FreeSWITCH 有了一个比较全面的了解,迫切地想实验它强大的功能了。让我们从最初的运行开始,一步一步进入 FreeSWITCH 的神秘世界。 命令行参数 一般来说,FreeSWITCH 不需要任何命令行参数就可以启动,但在某些情况下,你需要以一些特殊的参数启动。在此,仅作简单介绍。如果你知道是什么意思,那么你就可以使用,如果...