古老的ldap服務器部署centos7詳細步驟整理

網上部署ldap的資料比較雜,大多數都不詳細而且什麼版本都有,經過自己的11天瞎研究,能遇上的錯誤我基本全遇上了,終於成功並整理出較詳細的步驟和原理。

首先清楚Ldap是一個協議
有不同的實現方法,主要用openldap軟件。

LDAP功能簡介
公司內部會有許多第三方系統或服務,例如SVN、Git、VPN、Jira、Jenkins等等,每個系統都需要維護一份賬號密碼以支持用戶認證,當然公司也會有許多的主機或服務器,需要開放登錄權限給用戶登錄使用,每臺主機需要添加登錄的賬號密碼,這些操作不僅繁瑣且不方便管理,密碼記錯或遺忘的情況時有發生。

引入一套支持各系統、服務、主機單點認證的服務就顯得尤其迫切和重要。LDAP服務正是爲此而生,且經過長時間市場檢驗,安全穩定,文檔也比較豐富,方便上手。

市面上只要你能夠想像得到的所有工具軟件,全部都支持LDAP協議。比如說你公司要安裝一個項目管理工具,那麼這個工具幾乎必然支持LDAP協議,你公司要安裝一個bug管理工具,這工具必然也支持LDAP協議,你公司要安裝一套軟件版本管理工具,這工具也必然支持LDAP協議。LDAP協議的好處就是你公司的所有員工在所有這些工具裏共享同一套用戶名和密碼,來人的時候新增一個用戶就能自動訪問所有系統,走人的時候一鍵刪除就取消了他對所有系統的訪問權限,這就是LDAP。

可以通過以下三句話快速的認識一下LDAP:

LDAP:Lightweight Directory Access Protocol,輕量目錄訪問協議。

LDAP服務是一個爲只讀(查詢、瀏覽、搜索)訪問而優化的非關係型數據庫,呈樹狀結構組織數據。

LDAP主要用做用戶信息查詢(如郵箱、電話等)或對各種服務訪問做後臺認證以及用戶數據權限管控。

名詞解釋
接下來在LDAP的配置過程 中的一些名詞解釋,可以先不管,在後續遇到的時候還會有標註。

DC:domain component一般爲公司名,例如:dc=163,dc=com
OU:organization unit爲組織單元,最多可以有四級,每級最長32個字符,可以爲中文
CN:common name爲用戶名或者服務器名,最長可以到80個字符,可以爲中文
DN:distinguished name爲一條LDAP記錄項的名字,有唯一性,例如:

這些東西是按層級來排列的,最高層的永遠要寫在最後面
dc:“cn=admin,ou=developer,dc=163,dc=com”

slapd即standard alone ldap daemon,該進程默認監聽389端口
slapd是openldap的服務端應用程名,通常也是服務啓動名。

架構

實際上,我的操作步驟很多都是反的,架構這部分是最後才意識到的,但實際上從最一開始就應該先想到。實際上整個OpenLDAP的架構大致包含3個部分,而網上沒有教材提到這塊。

OpenLDAP

首先,是OpenLDAP的服務器本身,這個東西其實只相當於是一個mysql數據庫,它是沒有酷炫的圖形界面的,如果你願意每次都手敲一大堆代碼,也可以用它,但這種反人類的設計真的不是給人用的。

phpLDAPadmin

所以,你需要安裝一個叫作phpLDAPadmin的工具,好歹這是一個圖形界面,雖然奇醜無比,並且配置起來也並不容易。

PWM

光裝管理工具還不夠,你總要給用戶提供一個修改密碼的地方。

客戶端

最後,你還需要配置各種工具,像是httpd服務器來支撐phpldapadmin的web頁面

下面開始部署服務器
初始化環境

ntpdate -u ntp.api.bz && sed -i ‘/SELINUX/s/enforcing/disabled/’ /etc/selinux/config && setenforce 0&& systemctl disable firewalld.service && systemctl stop firewalld.service && shutdown -r now

如果selinux不關閉的話,後期使用phpldapadmin訪問web壓面的時候認證會報錯。
如果不關閉防火牆,打開389端口也可以

下面配置一個本地yum源
在這裏插入圖片描述

安裝軟件
yum -y install openldap compat-openldap openldap-clients openldap-servers openldap-servers-sql openldap-devel migrationtools
在這裏插入圖片描述
這個圖片是後期又安裝了後期phpldapadmin需要的devel包以後的已安裝軟件列表。
注意如果想刪除openldap的話 ,centos7自帶的openldap2.4,千萬不要用rpm -e來刪除系統自帶的openldap,一旦刪除了,會出現yum源不可用的情況,提示找不到python解釋器。ssh也不能用,在服務器連不上外網的情況我沒找到解決辦法,因爲這個直接搞崩了一臺虛擬機。
在這裏插入圖片描述

查看OpenLDAP版本,使用如下命令:

slapd -VV
在這裏插入圖片描述
配置OpenLDAP
OpenLDAP配置比較複雜牽涉到的內容比較多,接下來我們一步一步對其相關的配置進行介紹。

注意:從OpenLDAP2.4.23版本開始所有配置數據都保存在/etc/openldap/slapd.d/中,建議不再使用slapd.conf作爲配置文件。

網上很多文檔裏會告訴你去修改,/etc/openldap/slapd.conf文件,可能是很多年以前的文檔,經過我實驗是不需要的。

配置方法1:寫ldif再導入

這一塊在最一開始是最麻煩的部分,網上所有教程講的都不完美,而很多教程還停留在2008年甚至1998年。配置OpenLDAP最正確的姿勢是通過ldapmodify命令執行一系列自己寫好的ldif文件,而不要修改任何OpenLDAP裝好的配置文件。
先在/root/寫ldif文件,然後再使用命令導入配置文件
vim a_domain.ldif

在這裏插入圖片描述

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

replace: olcSuffix
olcSuffix: dc=bjums,dc=com

ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f a_domain.ldif

這麼長的命令是什麼意思?-Q表示安靜執行,-Y和後面的EXTERNAL表示,好吧,我也不知道什麼意思,總之需要這樣配合,然後-H表示地址,-f表示文件名。幾乎所有的ldapmodify命令都這麼執行就好了。

再來講解一下上面的ldif文件的內容,你不要問爲什麼叫ldif這麼一個破後綴,總之你記住它就是這個後綴就好了。dn表示你要修改什麼東西,在這裏我們用的是{2}bdb,你的系統不一定是{2}bdb,不管是幾,總之你去查一下目錄裏的內容就好了:

ls /etc/openldap/slapd.d/cn=config/

在這裏插入圖片描述
這裏面有一大堆奇奇怪怪的數字,不要擔心,我這裏會更多因爲我配置完了截的圖,其中有一個帶什麼db.ldif的就是你最終需要修改的數據庫文件,我這裏是hdb.ldif,你的可能是mdb.ldif,還有人是bdb.ldif,不管什麼db,總之你要改的是一個叫db的文件就對了,你可以cat打開看一看,但是不要用vi去修改它。

我們剛纔寫的ldif文件裏面會有這幾行關鍵字

changetype就是modify,表示我們要修改這個文件。第3行是replace,表示我們要替換裏面的某個值,你可以把這個操作理解爲mysql數據庫的update操作,如果你把第3行改成add,那就是mysql的insert操作了。不過這裏我們操作的只是配置文件本身,還牽涉不到添加用戶或者更改用戶,如果你以爲事情就這麼簡單,那就是你太天真了。

RootDN在這裏就表示你整個OpenLDAP系統的管理員用戶名是什麼,不要奇怪,後面這一砣都是用戶名cn=admin,dc=qiban,dc=com,長的有點像email地址,實際意思也差不多,但總之就不是email就行了。不要問爲什麼,總之cn就是email前面的那個名字,後面帶dc的都是域名。

真實情況是你還需要給這個用戶設置一個密碼。

配置OpenLDAP管理員密碼
依舊採用寫ldif文件再 導入的姿勢。
首先用命令生成一個管理員密碼的加密姿勢。
slappasswd -s 123456
在這裏插入圖片描述
上述加密後的字段保存下,等會我們在配置文件中會使用到。
這是我的
{SSHA}b8XZyXPKCHsbhRPO3heP1VPZ7n7owiuG

然後把這些內容寫入一個ldif文件中
在這裏插入圖片描述
ldapmodify -H ldapi:// -Y EXTERNAL -f b_rootpw.ldif
接下來使用此命令導入配置文件
再查看

cat /etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif
發現配置文件中多了 olcRootPW
在這裏插入圖片描述
添加memberOf模塊
這個工作應該一開始就做好,要不然後面要做的話,還得把建好的組全刪掉再重建。這個模塊的作用是當你建一個組的時候,把一些用戶添加到這個組裏去,它會自動給這些用戶添加一個memberOf屬性,有很多應用需要檢查這個屬性。

添加的時候比較麻煩,需要建3個ldif文件,然後1個執行ldapmodify,2個執行ldapadd,錯一點都不行:

memberof_config.ldif
再一次重申:文件名叫做什麼根本無所謂,只要後綴名爲ldif即可。
在這裏插入圖片描述

dn: cn=module,cn=config
cn: module
objectClass: olcModuleList
olcModuleLoad: memberof
olcModulePath: /usr/lib64/openldap

dn: olcOverlay={0}memberof,olcDatabase={2}hdb,cn=config
objectClass: olcConfig
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: top
olcOverlay: memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf

小心第5行和第7行,先找到你的模塊目錄是不是在/usr/lib64下面,然後看清楚你的數據庫類型和數字,不要瞎複製。

對於這個文件,我們需要執行ldapadd:

ldapadd -Q -Y EXTERNAL -H ldapi:/// -f memberof_config.ldif
執行完之後,檢查你的/etc/openldap/slapd.d/cn=config/,看是不是多了一個模塊,這個模塊的數字編號直接影響下一步操作。

refint1.ldif

dn: cn=module{0},cn=config
add: olcmoduleload
olcmoduleload: refint

這個文件裏我的memberOf是第一個模塊,所以編號是0,你的不一定,要看清楚到底第幾號模塊是memberof,然後就改成幾就可以了,對於這個文件,我們要執行ldapmodify操作:

ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f refint1.ldif

你如果能看懂它的意思的話,它的大意是說要修改我們剛剛添加的那個模塊文件的內容。

refint2.ldif

dn: olcOverlay={1}refint,olcDatabase={2}bdb,cn=config
objectClass: olcConfig
objectClass: olcOverlayConfig
objectClass: olcRefintConfig
objectClass: top
olcOverlay: {1}refint
olcRefintAttribute: memberof member manager owner

對這個文件執行ldapadd操作:

ldapadd -Q -Y EXTERNAL -H ldapi:/// -f refint2.ldif
還是要注意檢查db類型,否則你一定不能成功。

cat /etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif

配置方法二,如果上面方法報錯,再結合這個來做

修改olcDatabase={2}hdb.ldif文件
注意:其中cn=root中的root表示OpenLDAP管理員的用戶名,而olcRootPW表示OpenLDAP管理員的密碼。

vim /etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif

修改olcDatabase={2}hdb.ldif文件,對於該文件增加一行
*olcRootPW: {SSHA}b8XZyXPKCHsbhRPO3heP1VPZ7n7owiuG
然後修改域信息:
olcSuffix: dc=stephen,dc=com
olcRootDN: cn=root,dc=stephen,dc=com*

注意:其中cn=root中的root表示OpenLDAP管理員的用戶名,而olcRootPW表示OpenLDAP管理員的密碼。

實際修改如下:

vim /etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif

olcSuffix: dc=stephen,dc=com

olcRootDN: cn=root,dc=stephen,dc=com

olcRootPW:  {SSHA}b8XZyXPKCHsbhRPO3heP1VPZ7n7owiuG

在這裏插入圖片描述

修改olcDatabase={1}monitor.ldif文件

vim /etc/openldap/slapd.d/cn=config/olcDatabase={1}monitor.ldif

修改olcDatabase={1}monitor.ldif文件,如下:

vim /etc/openldap/slapd.d/cn=config/olcDatabase={1}monitor.ldif

olcAccess: {0}to * by dn.base=”gidNumber=0+uidNumber=0,cn=peercred,cn=extern
al,cn=auth” read by dn.base=”cn=root,dc=stephen,dc=com” read by * none

在這裏插入圖片描述

注意:該修改中的dn.base是修改OpenLDAP的管理員的相關信息的。

驗證OpenLDAP的基本配置,使用如下命令:
slapdtest -u
在這裏插入圖片描述
通過上圖,我們可以很明顯的看出OpenLDAP的基本配置是沒有問題。

啓動OpenLDAP服務,使用如下命令:
systemctl enable slapd
systemctl start slapd
systemctl status slapd

OpenLDAP默認監聽的端口是389,下面我們來看下是不是389端口,如下:
netstat -antup | grep 389
在這裏插入圖片描述

接下來配置數據庫 配置OpenLDAP數據庫
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap:ldap -R /var/lib/ldap
chmod 700 -R /var/lib/ldap
ll /var/lib/ldap/
注意:/var/lib/ldap/就是BerkeleyDB數據庫默認存儲的路徑。
在這裏插入圖片描述

導入基本Schema
導入基本Schema,使用如下命令:

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
在這裏插入圖片描述

修改migrate_common.ph文件
migrate_common.ph文件主要是用於生成ldif文件使用,修改migrate_common.ph文件,如下:

vim /usr/share/migrationtools/migrate_common.ph +71
$DEFAULT_MAIL_DOMAIN = “stephen.com”;
$DEFAULT_BASE = “dc=stephen,dc=com”;
$EXTENDED_SCHEMA = 1;
在這裏插入圖片描述

到此OpenLDAP的配置就已經全部完畢,下面我們來開始添加用戶到OpenLDAP中。

添加用戶及用戶組
默認情況下OpenLDAP是沒有普通用戶的,但是有一個管理員用戶。管理用戶就是前面我們剛剛配置的root。

現在我們把系統中的用戶,添加到OpenLDAP中。爲了進行區分,我們現在新加兩個用戶ldapuser1和ldapuser2,和兩個用戶組ldapgroup1和ldapgroup2,如下:

添加用戶組,使用如下命令:

groupadd ldapgroup1

groupadd ldapgroup2

添加用戶並設置密碼,使用如下命令:

useradd -g ldapgroup1 ldapuser1

useradd -g ldapgroup2 ldapuser2

echo ‘123456’ | passwd –stdin ldapuser1

echo ‘123456’ | passwd –stdin ldapuser2

在這裏插入圖片描述

把剛剛添加的用戶和用戶組提取出來,這包括該用戶的密碼和其他相關屬性,如下:
grep “:10[0-9][0-9]” /etc/passwd > /root/users
grep “:10[0-9][0-9]” /etc/group > /root/groups
cat users
cat groups
在這裏插入圖片描述

根據上述生成的用戶和用戶組屬性,使用migrate_passwd.pl文件生成要添加用戶和用戶組的ldif,如下:
/usr/share/migrationtools/migrate_passwd.pl /root/users > /root/users.ldif
/usr/share/migrationtools/migrate_group.pl /root/groups > /root/groups.ldif
cat users.ldif
cat groups.ldif

在這裏插入圖片描述

注意:後續如果要新加用戶到OpenLDAP中的話,我們可以直接修改users.ldif文件即可。

導入用戶及用戶組到OpenLDAP數據庫
配置openldap基礎的數據庫,如下:

cat > /root/base.ldif << EOF
dn: dc=stephen,dc=com
o: stephen com
dc: stephen
objectClass: top
objectClass: dcObject
objectclass: organization
dn: cn=root,dc=stephen,dc=com
cn: root
objectClass: organizationalRole
description: Directory Manager
dn: ou=People,dc=stephen,dc=com
ou: People
objectClass: top
objectClass: organizationalUnit
dn: ou=Group,dc=stephen,dc=com
ou: Group
objectClass: top
objectClass: organizationalUnit
EOF
 

在這裏插入圖片描述

導入基礎數據庫,使用如下命令
ldapadd -x -w “123456” -D “cn=root,dc=stephen,dc=com” -f /root/base.ldif
導入用戶到數據庫,使用如下命令:
ldapadd -x -w “123456” -D “cn=root,dc=stephen,dc=com” -f /root/users.ldif
導入用戶組到數據庫,使用如下命令:
ldapadd -x -w “123456” -D “cn=root,dc=stephen,dc=com” -f /root/groups.ldif
在這裏插入圖片描述
在這裏插入圖片描述

導入成功後會看到數據庫多了文件
ll /var/lib/ldap/
在這裏插入圖片描述

查詢OpenLDAP的相關信息
用戶和用戶組全部導入完畢後,我們就可以查詢OpenLDAP的相關信息。
查詢OpenLDAP全部信息,使用如下命令:
ldapsearch -x -b “dc=stephen,dc=com” -H ldap://127.0.0.1
在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述

查詢添加的OpenLDAP用戶信息,使用如下命令:
ldapsearch -LLL -x -D ‘cn=root,dc=stephen,dc=com’ -w “123456” -b ‘dc=stephen,dc=com’ ‘uid=ldapuser1’

查詢添加的OpenLDAP用戶組信息,使用如下命令:
ldapsearch -LLL -x -D ‘cn=root,dc=stephen,dc=com’ -w “123456” -b ‘dc=stephen,dc=com’ ‘cn=ldapgroup1’

把OpenLDAP用戶加入到用戶組
儘管我們已經把用戶和用戶組信息,導入到OpenLDAP數據庫中了。但實際上目前OpenLDAP用戶和用戶組之間是沒有任何關聯的。
如果我們要把OpenLDAP數據庫中的用戶和用戶組關聯起來的話,我們還需要做另外單獨的配置。

現在我們要把ldapuser1用戶加入到ldapgroup1用戶組,需要新建添加用戶到用戶組的ldif文件,如下:

cat > add_user_to_groups.ldif << “EOF”
dn: cn=ldapgroup1,ou=Group,dc=stephen,dc=com
changetype: modify
add: memberuid
memberuid: ldapuser1
EOF

在這裏插入圖片描述

執行如下命令:
ldapadd -x -w “123456” -D “cn=root,dc=stephen,dc=com” -f /root/add_user_to_groups.ldif

在這裏插入圖片描述

查詢添加的OpenLDAP用戶組信息,如下:

ldapsearch -LLL -x -D ‘cn=root,dc=stephen,dc=com’ -w “123456” -b ‘dc=stephen,dc=com’ ‘cn=ldapgroup1’

在這裏插入圖片描述
通過上圖,我們可以很明顯的看出ldapuser1用戶已經加入到ldapgroup1用戶組了。

開啓OpenLDAP日誌訪問功能
默認情況下OpenLDAP是沒有啓用日誌記錄功能的,但是在實際使用過程中,我們爲了定位問題需要使用到OpenLDAP日誌。

新建日誌配置ldif文件,如下:

cat > /root/loglevel.ldif << “EOF”

dn: cn=config

changetype: modify

replace: olcLogLevel

olcLogLevel: stats

EOF

導入到OpenLDAP中,並重啓OpenLDAP服務,如下:

ldapmodify -Y EXTERNAL -H ldapi:/// -f /root/loglevel.ldif

systemctl restart slapd

clip_image028

在這裏插入圖片描述

修改rsyslog配置文件,並重啓rsyslog服務,如下:

cat >> /etc/rsyslog.conf << “EOF”

local4.* /var/log/slapd.log

EOF

systemctl restart rsyslog

clip_image029

在這裏插入圖片描述
查看OpenLDAP日誌,如下:

tail -f /var/log/slapd.log

在這裏插入圖片描述

修改OpenLDAP默認監聽端口
在前面,我們已經介紹了OpenLDAP默認監聽的端口是389.如果我們現在要修改OpenLDAP監聽端口的話,我們可以修改/etc/sysconfig/slapd文件。例如我們現在把OpenLDAP監聽的端口修改爲4567,可以進行如下操作:

vim /etc/sysconfig/slapd

SLAPD_URLS=”ldapi://0.0.0.0:4567/ ldap://0.0.0.0:4567/”

重啓OpenLDAP服務,如下:

systemctl restart slapd.service

netstat -tunlp

使用ldapadmin工具查看

在大多數情況下,我們對OpenLDAP的操作都是在Windows下進行的。而在Windows下連接OpenLDAP的客戶端工具,使用最多的是ldapadmin。

接下里我會整理,這個部分 以及
如何配置web頁面讓讓OpenLDAP用戶自助修改其密碼。

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