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安裝完成。