[LDAP] CentOS7 OpenLDAP主從架構部署

1.    系統環境

操作系統:CentOS7.3
OpenLDAP:2.4.44
PHPldapAdmin:v-1.2.3

Hostname IP Address Role
ldap1 192.167.1.2 LDAP Server
ldap2 192.168.1.3 LDAP Client

 

 

 

 

2.    環境準備(兩臺主機)

在兩臺主機上面分別執行下面的步驟準備好安裝環境

2.1    配置主機名

兩臺主機分別修改主機名

[root@ldap1 ~]# hostnamectl set-hostname ldap1

配置hostname和IP地址映射

[root@ldap1 ~]# vi /etc/hosts
192.168.1.2    ldap1
192.168.1.3    ldap2

2.2    配置時間同步

OpenLDAP爲C/S架構,加密傳輸需要使用CA證書,所以需要配置服務端和客戶端時間保持同步。

設置時區

[root@ldap1 ~]# timedatectl set-timezone Asia/Shanghai

設置NTP時鐘同步

[root@ldap1 ~]# yum -y install ntp
[root@ldap1 ~]# vi /etc/ntp.conf 
server 192.168.1.4 iburst
server 192.168.1.5 iburst

設置ntpd開機自啓動

[root@ldap1 ~]# systemctl enable ntpd

禁止chronyd服務(CentOS7中,chronyd服務會導致ntpd服務不能開機自啓動)

[root@ldap1 ~]# systemctl disable chronyd

啓動ntpd服務

[root@ldap1 ~]# systemctl start ntpd
[root@ldap1 ~]# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
+192.168.1.4  118.167.8.34    3 u  935 1024  377    1.147   10.145   4.001
*192.168.1.5  118.167.8.34    3 u  501 1024  377    0.782   -4.962   6.918
[root@ldap1 ~]#

2.3    配置yum源

[root@ldap1 ~]# wget http://mirrors.aliyun.com/repo/Centos-7.repo
[root@ldap1 ~]# cp Centos-7.repo /etc/yum.repos.d/
[root@ldap1 ~]# cd /etc/yum.repos.d/
[root@ldap1 yum.repos.d]# mv CentOS-Base.repo CentOS-Base.repo.bak
[root@ldap1 yum.repos.d]# cp Centos-7.repo CentOS-Base.repo
[root@ldap1 yum.repos.d]# yum clean all
[root@ldap1 yum.repos.d]# yum makecache

2.4    關閉防火牆和SELinux

環境部署前可以將防火牆和SELinux都關閉,部署完成以後再設置防火牆和SELinux策略。

[root@openldap1 ~]# sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config && setenforce 0&& systemctl disable firewalld.service && systemctl stop firewalld.service && shutdown -r now

 

3.    OpenLDAP安裝(Master主機)

3.1    安裝OpenLDAP

yum安裝OpenLDAP和相關依賴

[root@ldap1 ~]# yum -y install openldap compat-openldap openldap-clients openldap-servers openldap-servers-sql openldap-devel migrationtools

可以通過rpm -ql <package name>,來查看每個安裝包都有哪些文件
openldap:            #OpenLDAP配置文件、庫和文檔
openldap-servers:  #服務器進程及相關命令、遷移腳本和相關文件
openldap-clients:   #客戶端進程及相關命令,用來訪問和修改 OpenLDAP 目錄
compat-openldap:  #與主從配置相關

安裝過程中會自動創建ldap用戶和ldap組

[root@ldap1 ~]# grep ldap /etc/passwd
ldap:x:55:55:OpenLDAP server:/var/lib/ldap:/sbin/nologin
[root@ldap1 ~]# grep ldap /etc/group
ldap:x:55:
[root@ldap1 ~]#

獲取openldap-servers軟件包生成的文件

[root@ldap1 ~]# rpm -ql openldap-servers | egrep -i '(slapd\.conf\.*|DB_CONFIG.example)'
/etc/openldap/slapd.conf
/etc/openldap/slapd.conf.bak
/usr/lib/tmpfiles.d/slapd.conf
/usr/share/man/man5/slapd.conf.5.gz
/usr/share/openldap-servers/DB_CONFIG.example
[root@ldap1 ~]#

啓動LDAP服務並配置開機自啓動

[root@ldap1 ~]# systemctl start slapd
[root@ldap1 ~]# systemctl enable slapd

驗證啓動成功

[root@ldap1 ~]# netstat -nltp | grep slapd
tcp        0      0 0.0.0.0:389             0.0.0.0:*               LISTEN      2600/slapd          
tcp6       0      0 :::389                  :::*                    LISTEN      2600/slapd          
[root@ldap1 ~]#

默認OpenLDAP服務使用端口389,此端口採用明文傳輸數據,數據信息得不到保障。所以可以通過配置CA及結合TLS/SASL實現數據加密傳輸,所使用端口爲636。

3.2    設置OpenLDAP管理員密碼

使用slappasswd命令生成管理員(admin)密碼,編寫LDIF(一種LDAP專用的數據交換格式)文件並通過ldapadd命令將管理員密碼導入到LDAP配置文件中。

生成管理員密碼

[root@ldap1 ~]# slappasswd -h {SSHA} -s ldappassword
{SSHA}WdSz3/BHCjBsKrclQy6VsICw+ezxtcxx
[root@ldap1 ~]#

注意:產生的SSHA密碼後面的配置文件會用到。

3.3    配置OpenLDAP服務

OpenLDAP服務器配置文件位於/etc/openldap/slapd.d/中。 要開始配置LDAP,我們需要更新變量“olcSuffix”和“olcRootDN”。
•    olcSuffix:數據庫後綴,它是LDAP服務器提供信息的域名
•    olcRootDN:具有對LDAP執行所有管理活動的無限制訪問權限的用戶的專有名稱(DN)條目,如root用戶。
•    olcRootPW:RootDN的LDAP管理員密碼。
以上這些變量的修改需要作用於/etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif文件,但是這個文件進去第一行明確提示不要直接修改。正確的姿勢是使用ldapmodify命令來修改。

3.3.1    配置hdb.ldif

創建一個.ldif文件

[root@ldap1 ~]# vi db.ldif
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=domain,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=ldapadm,dc=domain,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}WdSz3/BHCjBsKrclQy6VsICw+ezxtcxx

使用ldapmodify命令執行

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

modifying entry "olcDatabase={2}hdb,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

[root@ldap1 ~]#

3.3.2    配置monitor.ldif

更改監控認證,只允許root(ldapadm)用戶訪問。
創建.ldif文件

[root@ldap1 ~]# vi 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=ldapadm,dc=domain,dc=com" read by * none

ldapmodify執行修改

[root@ldap1 ~]# 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"

[root@ldap1 ~]#

3.4    配置LDAP數據庫

3.4.1    拷貝數據庫配置文件

[root@ldap1 ~]# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
[root@ldap1 ~]# chown ldap:ldap /var/lib/ldap/*

DB_CONFIG中主要是關於Berkeley DB的一些配置。


3.4.2    導入schema

[root@ldap1 ~]# 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@ldap1 ~]# 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@ldap1 ~]# 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@ldap1 ~]#

3.4.3    爲根域創建基礎模板

[root@ldap1 ~]# vi base.ldif
dn: dc=domain,dc=com
dc: domain
objectClass: top
objectClass: domain

dn: cn=ldapadm ,dc=domain,dc=com
objectClass: organizationalRole
cn: ldapadm
description: LDAP Manager

dn: ou=People,dc=domain,dc=com
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=domain,dc=com
objectClass: organizationalUnit
ou: Group

寫入數據庫

[root@ldap1 ~]# ldapadd -x -W -D "cn=ldapadm ,dc=domain,dc=com" -f base.ldif
Enter LDAP Password: ldappassword
adding new entry "dc=domain,dc=com"

adding new entry "cn=ldapadm ,dc=domain,dc=com"

adding new entry "ou=People,dc=domain,dc=com"

adding new entry "ou=Group,dc=domain,dc=com"

[root@ldap1 ~]#


3.5    創建和刪除LDAP用戶

3.5.1    新建用戶

編寫ldif文件

[root@ldap1 ~]# vi user01.ldif
dn: uid=user01,ou=People,dc=domain,dc=com
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: user01
uid: user01
uidNumber: 9999
gidNumber: 100
homeDirectory: /home/user01
loginShell: /bin/bash
gecos: User01 [Admin (at) DOMAIN]
userPassword: {crypt}x
shadowLastChange: 17058
shadowMin: 0
shadowMax: 99999
shadowWarning: 7

添加到LDAP

[root@ldap1 ~]# ldapadd -x -W -D "cn=ldapadm ,dc=domain,dc=com" -f user01.ldif 
Enter LDAP Password: ldappassword
adding new entry "uid=user01,ou=People,dc=domain,dc=com"

[root@ldap1 ~]#

3.5.2    設置用戶密碼

爲新添加的用戶設置密碼

[root@ldap1 ~]# ldappasswd -s user123 -W -D "cn=ldapadm ,dc=domain,dc=com" -x "uid=user01,ou=People,dc=domain,dc=com"
Enter LDAP Password: ldappassword
[root@ldap1 ~]#

驗證用戶是否創建成功

[root@ldap1 ~]# ldapsearch -x cn=user01 -b dc=domain,dc=com
# extended LDIF
#
# LDAPv3
# base <dc=domain,dc=com> with scope subtree
# filter: cn=user01
# requesting: ALL
#

# user01, People, domain.com
dn: uid=user01,ou=People,dc=domain,dc=com
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: user01
uid: user01
uidNumber: 9999
gidNumber: 100
homeDirectory: /home/user01
loginShell: /bin/bash
gecos: User01 [Admin (at) DOMAIN]
shadowLastChange: 17058
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
userPassword:: e1NTSEF9UVlla2V1NndxMkR4ZGhzUUgvMzBEc0I2RHVHbHdyME4=

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1
[root@ldap1 ~]#

3.5.3    刪除用戶

[root@ldap1 ~]# ldapdelete -W -D "cn=ldapadm ,dc=domain,dc=com" "uid=user01,ou=People,dc=domain,dc=com"
Enter LDAP Password: ldappassword
[root@ldap1 ~]#

3.6    啓用LDAP日誌

修改rsyslog.conf配置文件

[root@ldap1 ~]# vi /etc/rsyslog.conf
local4.*                                                /var/log/ldap.log

重啓rsyslog服務

[root@ldap1 ~]# systemctl restart rsyslog

3.7    打開防火牆

環境安裝完成以後,打開防火牆,配置允許ldap服務端口通過防火牆

[root@ldap1 ~]# systemctl start firewalld
[root@ldap1 ~]# firewall-cmd --permanent --add-service=ldap
[root@ldap1 ~]# firewall-cmd --reload
[root@ldap1 ~]# systemctl enable firewalld


4.    OpenLDAP客戶端安裝(Client主機)

安裝openldap客戶端

[root@ldap1 ~]# yum install -y openldap-clients nss-pam-ldapd

設置客戶端到服務端的單點登錄

[root@ldap2 ~]# authconfig --enableldap --enableldapauth --ldapserver=192.168.1.3 --ldapbasedn="dc=domain,dc=com" --enablemkhomedir --update
[root@ldap2 ~]#

重啓LDAP客戶端

[root@ldap2 ~]# systemctl restart nslcd

驗證LDAP用戶登錄

[root@ldap2 ~]# getent passwd user01

查看輸出結果

 

5.    安裝LDAP管理工具(Master主機)


PHPldapadmin和ldap-account-management(lam)是兩款LDAP的Web管理工具。
安裝lam參考:https://juejin.im/post/5b588a255188251aef4e6694
同時也有GUI工具可視化操作ldap數據庫,例如:http://www.ldapadmin.org/

5.1    安裝前準備

5.1.1    安裝httpd服務

安裝httpd服務

[root@openldap ~]# yum -y install httpd

修改配置文件

[root@ldap1 ~]# vi /etc/httpd/conf/httpd.conf
<Directory />
    # AllowOverride none
    # Require all denied
    Options Indexes FollowSymLinks
    AllowOverride None
</Directory>

啓動httpd服務

[root@ldap1 ~]# systemctl start httpd
[root@ldap1 ~]# systemctl enable httpd

設置防火牆

[root@ldap1 ~]# firewall-cmd --permanent --zone=public --add-port=80/tcp
[root@ldap1 ~]# firewall-cmd --reload 
[root@ldap1 ~]# firewall-cmd --zone=public --permanent --list-ports
80/tcp
[root@ldap1 ~]#

5.1.2    安裝php及依賴

[root@openldap ~]# yum -y install php
[root@openldap ~]# yum -y install php-ldap 
[root@openldap ~]# yum -y install php-gd 
[root@openldap ~]# yum -y install php-mbstring 
[root@openldap ~]# yum -y install php-pear 
[root@openldap ~]# yum -y install php-bcmath 
[root@openldap ~]# yum -y install php-xml

5.2    安裝LAM(推薦安裝)

要求:php>5.6,apache(推薦)或者nginx。

5.2.1    升級php

CentOS7自帶的php爲5.4版本,升級php

[root@ldap1 ~]# php -v
PHP 5.4.16 (cli) (built: Oct 30 2018 19:30:51) 
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
[root@ldap1 ~]#

移除當前PHP安裝包避免起衝突

[root@ldap1 ~]# yum list installed | grep php 
[root@ldap1 ~]# yum -y remove php*

默認的yum源無法升級PHP,需要添加第三方yum源,我們選擇webtatic庫
CentOs 6.x

[root@ldap1 ~]# rpm -Uvh http://mirror.webtatic.com/yum/el6/latest.rpm

CentOs 7.X

[root@ldap1 ~]# rpm -Uvh https://mirror.webtatic.com/yum/el7/epel-release.rpm
[root@ldap1 ~]# rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

安裝php7.1

[root@ldap1 ~]# yum install -y php71w-fpm php71w-opcache php71w-cli php71w-gd php71w-imap php71w-mysqlnd php71w-mbstring php71w-mcrypt php71w-pdo php71w-pecl-apcu php71w-pecl-mongodb php71w-pecl-redis php71w-pgsql php71w-xml php71w-xmlrpc php71w-devel mod_php71w php71w-ldap

查看版本

[root@ldap1 ~]# php -v
PHP 7.1.25 (cli) (built: Dec  6 2018 22:54:10) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.1.25, Copyright (c) 1999-2018, by Zend Technologies
[root@ldap1 ~]#

php升級完成。

5.2.2    安裝LAM

下載安裝LAM

[root@ldap1 ~]# wget https://nchc.dl.sourceforge.net/project/lam/LAM/6.5/ldap-account-manager-6.5.tar.bz2
[root@ldap1 ~]# tar -xjf ldap-account-manager-6.5.tar.bz2
[root@ldap1 ~]# mv ldap-account-manager-6.5 /var/www/html/lam
[root@ldap1 ~]# chmod 777 -R /var/www/html/lam/
[root@ldap1 ~]# cd /var/www/html/lam/config/
[root@ldap1 config]# cp config.cfg.sample config.cfg
[root@ldap1 config]# chmod 777 config.cfg

瀏覽器訪問http://192.168.1.3/lam/templates/login.php
 
5.2.3    配置LAM

官方文檔:
https://www.ldap-account-manager.org/static/doc/manual/ch03s02.html#idm753

1)    Edit general settings
點擊LAM configuration – Edit general settings


 
配置ldap-account-manager登錄密碼。這裏要求寫的登錄密碼在LAM安裝目錄下的README文件裏面

[root@ldap1 ~]# vi /var/www/html/lam/README
  Default password:
    The default password to edit the configuration options is "lam".

 
Allowed hosts填入*
 
網頁最底部可以修改默認密碼,這裏我們修改爲:ldappassword


 
修改完成之後點擊Ok保存。

2)    Edit server profiles
點擊LAM configuration – Edit server profiles – Manage server profiles
在Profile management標籤下面填寫如下信息
•    Profile name:domain-profile
•    Profile password:ldappassword
•    Reenter password:ldappassword
•    Template:unix

點擊Add,輸入Master password(ldappassword),確定

 

3)    管理Server Profiles

Server settings 標籤

Server settings

  • Server address: ldap://localhost:389
  • Tree suffix: dc=domain,dc=com

Language settings

  • Default language: 簡體中文(中國)
  • Time zone: Asia/Shanghai

Security settings

  • Login method: LDAP search
  • LDAP suffix:dc=domain,dc=com
  • LDAP filter:cn=%USER%

Account types 標籤

Users

  • LDAP suffix: ou=People,dc=domain,dc=com
  • List attributes:#uid;#givenName;#sn;#uidNumber;#gidNumber

Groups

  • LDAP suffix: ou=Group,dc=domain,dc=com
  • List attributes:#cn;#gidNumber;#memberUID;#description

修改完成之後點擊保存,跳轉到LAM登錄頁面,用admin/ldappassword登錄

至此,LAM安裝成功。

 

5.3    安裝PHPldapadmin(備選)

安裝PHPldapadmin

[root@openldap ~]# yum -y install phpldapadmin

設置ldapadmin訪問權限

[root@ldap1 ~]# vi /etc/httpd/conf.d/phpldapadmin.conf
<Directory /usr/share/phpldapadmin/htdocs>
    Order Deny,Allow
</Directory>

設置ldap登錄方式

[root@ldap1 ~]# vi /etc/phpldapadmin/config.php
$servers->setValue('login','attr','dn');        # 397行取消註釋
// $servers->setValue('login','attr','uid');      #398行添加註釋

重啓httpd服務

[root@ldap1 ~]# systemctl restart httpd

瀏覽器訪問http://192.168.1.2/phpldapadmin/,並登錄(登錄DN:cn=ldapadm,dc=domain,dc=com,密碼:ldappassword)

 至此,PHPldapadmin安裝完成。

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