2019年7月28日 星期日

CentOS 7.6 上安裝 OpenLDAP 並實戰企業級應用管理



openLDAP(LDAP/ Lightweight Directory access protocol,輕量級目錄存取協定),同微軟赫赫有名的Active Directory都可以用來作為目錄存取管理的服務,只是微軟的AD要錢,而Linux的openLDAP不用錢,本文將以辦公室Windows網路共用槽為例,說明資訊人員如何建置openLDAP來串接Synology NAS的帳戶群組、以GUI介面
來管理openLDAP資料並讓用戶透過單一Web頁面對自身帳戶進行密碼修改。




lDAP Server端設定


CentOS 7.6x64 minimal環境下安裝 openLDAP套件
[root@server ~]# yum install openldap compat-openldap openldap-clients openldap-servers openldap-servers-sql openldap-devel
啟動slapd服務、設置為開機時啟動並檢查tcp 389埠號是否確實被slapd監聽
[root@server ~]# systemctl start slapd.service
[root@server ~]# systemctl enable slapd.service
[root@server ~]# netstat -tulnp | grep -i 389
將域名寫入hosts,本例為tomy168.com(請變更為您所使用的網域)
[root@server ~]# echo "192.168.88.14 tomy168.com" >> /etc/hosts
設置slapd管理密碼,本例為mypassword,隨後系統會返還一組加密後的雜湊字串,我們需要記住這組字串,下一步的設定會用到
[root@server ~]# slappasswd -h {SSHA} -s mypassword
{SSHA}6s2Q24/0ZMq5FK0cFUiqaf4rOeY8P2q7
編輯slapd設定檔
[root@server ~]# nano /etc/openldap/slapd.d/db.ldif
dc部分改為你欲使用的網域(本例為tomy168.com),最後一行貼上上述的加密雜湊字串
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=tomy168,dc=com

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

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}6s2Q24/0ZMq5FK0cFUiqaf4rOeY8P2q7
將db.ldif資料匯入openLDAP伺服器
[root@server ~]# ldapmodify -Y EXTERNAL -H ldapi:/// -f /etc/openldap/slapd.d/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"
編輯monitor.ldif
[root@server ~]# nano /etc/openldap/slapd.d/monitor.ldif
紅字的部分為ldap的管理者名稱,需設定對齊db.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=tomy168,dc=com" read by * none
將monitor.ldif資料匯入openLDAP伺服器
[root@server ~]# ldapmodify -Y EXTERNAL  -H ldapi:/// -f/etc/openldap/slapd.d/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"
將範本的資料庫設置檔複製到 /var/lib/ldap 並更新此目錄權限
[root@server ~]# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
[root@OpenLDAP ~]# chown ldap:ldap /var/lib/ldap/*
為了讓LDAP支援Samba的schema我們需要先安裝相關套件,此處我的Samba版本為4.8.3,請以你當下安裝的版本來替換拷貝的路徑
[root@server ~]# yum install samba samba-common
[root@server ~]# cp /usr/share/doc/samba-4.8.3/LDAP/samba.ldif /etc/openldap/schema/
[root@server ~]# cp /usr/share/doc/samba-4.8.3/LDAP/samba.schema /etc/openldap/schema/
匯入各種schema到openLDAP伺服器
[root@server ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
[root@server ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
[root@server ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
[root@server ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/samba.ldif
[root@server ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/ppolicy.ldif
現在萬事俱備只欠資料,為我們的openLDAP建立一個基本的人員群組的OU與LDAP資料
[root@server ~]# nano /etc/openldap/slapd.d/base.ldif
以下可依照你的需求設置,或是先建立一組最基本的人員群組OU資料,日後可以用GUI管理工具再來增建其內容,以下的設置分別是網域名稱、管理者名稱、People OU未來將存放user帳戶,以及Group OU未來將存放group群組
dn: dc=tomy168,dc=com
dc: tomy168
objectClass: top
objectClass: domain

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

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

dn: ou=Group,dc=tomy168,dc=com
objectClass: organizationalUnit
ou: Group
匯入相關基本資料到openLDAP伺服器
[root@server ~]# ldapadd -x -W -D "cn=ldapadm,dc=tomy168,dc=com" -f /etc/openldap/slapd.d/base.ldif
Enter LDAP Password:
adding new entry "dc=tomy168,dc=com"
adding new entry "cn=ldapadm ,dc=tomy168,dc=com"
adding new entry "ou=People,dc=tomy168,dc=com"
adding new entry "ou=Group,dc=tomy168,dc=com"
將openLDAP的日誌加入到syslog中
[root@server ~]# nano /etc/rsyslog.conf
找到boot.log後貼上紅字部分即可
# Save boot messages also to boot.log 
local7.*                                   /var/log/boot.log 

# OpenLDAP log 
local4.*                                   /var/log/ldap.log
重啟syslog服務
[root@server ~]# systemctl restart rsyslog
最後確認一下slapd的各項設置是否正確可行
[root@server ~]# slaptest -u 
config file testing succeeded



LDAP Admin 管理者GUI軟體


LDAP Admin是一款Windows平台下的LDAP GUI管理工具,對於企業中的IT人員來說自然是方便許多,首先前往 LDAP Admin 官網下載 LDAP GUI 管理軟體

解壓後直接執行LdapAdmin.exe

建立欲管理的LDAP伺服器

填入相關資料後連接它

可以看到當時我們在base.ldif中所建立的基本資料,此時先對People容器中按右鍵 New 建立第一位 User,下方記得打勾該帳號才能支援Samba或類Unix系統的串接

Samba頁籤處需指定網域

Bussiness頁籤處須填入該用戶附屬於此網域的mail,未來openLDAP在串接如GMAIL時帳戶才能對應上,也建議資訊人員應盡可能填寫此頁面的人員相關資料以便日後的行政或人事管理

Membership部分若已經建立群組的話便可以在此處進行分配,我們先按下方OK結束人員帳戶的創建,並對人員設置初始密碼,Encryption method建議選擇SHA1並將Posix password與samba password都打勾

接著到Group容器中按右鍵替組織中的人員建立群組(如資訊部、人事部等)

然後將先前所建立的人員加入這個新群組之中,如此一來帳戶管理最基本的人員與群組便設置完成了




openLDAP串接Synology NAS


前往Synology DS918+控制台的「網域/LDAP」編輯LDAP頁籤

輸入LDAP管理者名稱與LDAP管理密碼(mypassword)

Synology連線到LDAP服務器後會將LDAP用戶與LDAP群組都載入

對使用者名稱或群組名稱點選編輯可以配給LDAP用戶或群組在Synology上的共用資料夾、空間配額或應用程式等進行權限的設置


最後登出Synology後改以在LDAP建立的用戶bill登入看看

是不是!隸屬於IT群組的bill成功的登入Synology系統

能使用對應權限的應用程式

辦公室最常使用的 Windows連線網路磁碟機功能也沒問題




使用者自助密碼服務


從openLDAP伺服器架設、IT管理人員的LDAP GUI工具使用到終端用戶能以一組帳密使用各種服務,雖然IT管理者可以透過LDAP GUI工具協助用戶變更密碼,但始終不如給予用戶自行變更密碼來得方便有效率,因此我們還需要一個平易近人的工具讓用戶能輕易的操作自身LDAP帳號密碼的變更,這裡我們選擇的是「Self Service Password」這個網頁版工具


LDAP Server端添加ltb-project的yum源
[root@server ~]# nano /etc/yum.repos.d/ltb-project.repo

[[ltb-project-noarch] 

name=LTB project packages (noarch) 
baseurl=https://ltb-project.org/rpm/$releasever/noarch 
enabled=1 
gpgcheck=0 
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-LTB-project
安裝Self Service Password
[root@server ~]# yum install self-service-password

Dependencies Resolved 

==============================================================
 Package Arch Version Repository Size 
==============================================================
Installing: 
 self-service-password noarch 1.3-1.el7 ltb-project-noarch 1.6 M 
Installing for dependencies: 
 apr x86_64 1.4.8-3.el7_4.1 base 103 k 
 apr-util x86_64 1.5.2-6.el7 base 92 k 
 httpd x86_64 2.4.6-88.el7.centos base 2.7 M 
 httpd-tools x86_64 2.4.6-88.el7.centos base 90 k 
 libzip x86_64 0.10.1-8.el7 base 48 k 
 mailcap noarch 2.1.41-2.el7 base 31 k 
 php x86_64 5.4.16-46.el7 base 1.4 M 
 php-cli x86_64 5.4.16-46.el7 base 2.7 M 
 php-common x86_64 5.4.16-46.el7 base 565 k 
 php-ldap x86_64 5.4.16-46.el7 base 53 k 
 php-mbstring x86_64 5.4.16-46.el7 base 505 k 

Transaction Summary 
==============================================================
Install 1 Package (+11 Dependent packages) 

Total download size: 9.9 M 
Installed size: 31 M 
Is this ok [y/d/N]:
設置 Self Service Password的設定檔,最後一行可以輸入你的網域或是任意字串
[root@server ~]# nano /usr/share/self-service-password/conf/config.inc.php

# LDAP 
$ldap_url = "ldap://localhost:389"; 
$ldap_starttls = false; 
$ldap_binddn = "cn=ldapadm,dc=tomy168,dc=tw"; 
$ldap_bindpw = "mypassword"; 
$ldap_base = "dc=tomy168,dc=com"; 
$ldap_login_attribute = "uid"; 
$ldap_fullname_attribute = "cn"; 
$ldap_filter = "(&(objectClass=person)($ldap_login_attribute={login}))";

$samba_mode = true;
# Set password min/max age in Samba attributes
$samba_options['min_age'] = 6;
$samba_options['max_age'] = 20;

# Shadow options - require shadowAccount objectClass
# Update shadowLastChange
$shadow_options['update_shadowLastChange'] = true;
$shadow_options['update_shadowExpire'] = true;

$hash = "SHA";

# Who changes the password?
# Also applicable for question/answer save
# user: the user itself
# manager: the above binddn
$who_change_password = "manager";

## Token
# Use tokens?
# true (default)
# false
$use_tokens = false

# Use sms
$use_sms = false

# Encryption, decryption keyphrase, required if $crypt_tokens = true
# Please change it to anything long, random and complicated, you do not have to remember it
# Changing it will also invalidate all previous tokens and SMS codes
$keyphrase = "tomy168";
防火牆相關並啟動Web服務
[root@server ~]# firewall-cmd --permanent --add-service=http
[root@server ~]# firewall-cmd --reload
[root@server ~]# setenforce 0
[root@server ~]# systemctl start httpd
[root@server ~]# systemctl enable httpd
記得編輯 /etc/sysconfig/selinux、註解SELINUX=enforceing並新增加SELINUX=disabled
日後用戶想要更改密碼時便可以自助完成囉!

Self-Service-Password預設為簡體中文顯示,可至 /usr/share/self-service-password/lang/zh-CN.inc.php 語系檔將變數內容修改為繁體中文。
頁面的 header logo可藉由覆蓋 /usr/share/self-service-password/images/ltb-logo.png 來替換為公司所屬 logo(建議為去背的透明背景圖),以提升公司內部資訊系統的整體性。

0 意見: