03-openldap服務端安裝配置

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.17 | mldap01.gdy.com | 必須同步 | 關閉 | 關閉 |
| ldap客戶端 | Centos 6.9最小化安裝 | 192.168.244.18 | test01.gdy.com | 必須同步 | 關閉 | 關閉 |

表2:OpenLDAP相關軟件包套件
| 軟件包名稱 | 軟件包功能描述 |
| --------- | ------------- |
| openldap | OpenLDAP服務端和客戶端必須用的庫文件 |
| openldap-clients | 在LDAP服務端上使用, 用於查看和修改目錄的命令行的包 |
| openldap-servers | 用於啓動服務和設置,包含單獨的LDAP後臺守護程序 |
| openldap-servers-sql | 支持SQL模塊 |
| compat-openldap | openldap兼容性庫 |

將主機名添加至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. 生成密碼待用
    shell [root@mldap01 ~]# slappasswd New password: Re-enter new password: {SSHA}MPZ6cRiXmkjFylwNetRnZunefUEzuKVL

  2. 修改配置文件

    除了loglevel新增,其他配置均爲修改
    shell [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. 修改相關文件屬性
    shell [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添加目錄樹
    ```shell
    [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查看目錄樹架構
    ```shell
    [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)

    解決方法:
    shell [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程序使用

  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服務端進行管理

  5. 其他使用(未寫了,因爲和普通的工具一樣使用)
    參考另一篇文檔LDAPAdmin使用

8. openldap配置日誌

  1. openldap的日誌級別
    ```shell
    [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. 創建目錄及調整權限,用於存放日誌文件
    shell [root@mldap01 ~]# mkdir -pv /var/log/slapd mkdir: created directory `/var/log/slapd' [root@mldap01 ~]# chown ldap.ldap /var/log/slapd

  3. 修改日誌文件,重啓rsyslog使其加載OpenLDAP參數
    shell [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實現自動切割日誌
    shell [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工具
    shell [root@mldap01 ~]# yum -y install migrationtools
  2. 修改migrationtools的配置文件

    修改/usr/share/migrationtools/migrate_common.ph文件中的兩個地方

  3. 使用migrationtools生成openldap根域條目和用戶條目及組條目
    shell [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文件
    ```shell
    [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查看

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章