同步滾動:
什么是LDAP
什么是LDAP?
要想知道一個概念,最簡單的辦法就是wikipedia,當然也可以百科。
LDAP全稱是輕型目錄訪問協議(Lightweight Directory Access Protocol)是一個開放的,中立的,工業標准的應用協議,通過IP協議提供訪問控制和維護分布式信息的目錄信息。
簡單理解起來就是LADP包含一個數據庫存儲了樹狀結構組織數據,和一套協議,第三方可通過這套協議進行數據的查詢與搜索的功能。
它用的協議基於X.500標准的輕量級目錄訪問協議,是一種開放Internet標准,LADP協議是跨平台的Internt協議,
總結來說LDAP是由目錄數據庫和一套訪問協議組成的系統。
為什么用LDAP
要知道為什么,我們就需要了解LDAP能解決什么問題?
眾所周知,當一個公司規模之后,會有無數的系統進行工作,如果每一個系統都需要注冊自己的用戶名,每一個系統的用戶名與密碼可能都不一樣。對個人來說就是一件折騰的事情,從公司的IT安全角度來說更是麻煩。
所以需要統一認證,單點登錄。
LDAP就是最適合在單點登錄中使用的系統了。
因為LDAP是一個開放的,中立的,工業標准的應用協議,它支持跨平台,數據配置簡單且功能單一,穩定性高且查詢性能好,使用它做認證服務可降低重復開發和對接的成本。
LDAP 的基本數據模型
LDAP 的基本數據模型就是一種樹狀的組織數據,但就是這些名稱有點叫人哭笑不得。要了解LDAP,至少要了解以下概念。
LDAP的數據是樹狀結構, 所有條目(或者對象)都定義在樹結構中。
條目下的樹狀結構稱為目錄信息樹(DIT)。
一個完整的條目有唯一可識別的名稱,我們叫之為區別名(DN)。
在DN的子節點下的一個單獨節點或者路徑,我們稱之為RDU。
通常一個條目(或者對象)在存儲在這兩種類型對象中
-
容器(container):這種對象本身可以包含其他對象。 例如:root(目錄樹的根元素,它實際上並不存在),c(國家/地區),ou(組織單位)和dc(域)。 容器(container)與與文件系統中的目錄相當。
-
(葉子節點)leaf:這種對象位於節點的末端,不能再包含其它對象。 例如person,InetOrgPerson,groupofNames。
每一個對象有包含一些屬性,屬性的值決定了該對象必須遵循的一些規則。
最后還需要記住LDAP里的簡稱
- o:organization(組織-公司)
- ou:organization unit(組織單元-部門)
- c:countryName(國家)
- dc:domainComponent(域名)
- sn:suer name(真實名稱)
- cn:common name(常用名稱)
例子:
例如上圖的babs條目中:
DN:uid=babs,ou=people,dc=example,dc=com
相對於ou=people,dc=example,dc=com 節點的RDN:uid=babs ObjectClass:Person
本文只提一些關鍵的LDAP概念,更詳細更具體請自己學習官方文檔。
搭建LDAP服務器
使用的環境:OpenLDAP 2.4, Centos7.6
第一步 更新環境
運行: yum update
第二步 安裝 OpenLdap
安裝OPenLDAP與相關安裝包
yum -y install openldap compat-openldap openldap-clients openldap-servers openldap-servers-sql openldap-devel
安裝完之后,可以直接啟動服務並且將服務設置為自啟動狀態。運行如下命令
systemctl start slapd
systemctl enable slapd
啟動完之后可以查驗slapd服務是否正在運行
netstat -antup | grep -i 389
可看到如下圖
第三步 創建LDAP的根密碼
此密碼用於整個安裝過程,是LADP的管理員根密碼,使用slappasswd 命令生成密碼
輸入slappasswd后提示輸入密碼與確認密碼,系統會輸出一串SSHA加密后的字符串,請Copy出來保存在記事本中。
我設置的密碼是Ricman,加密后出來的字符串是
{SSHA}KUYZ4irDCPN8seoOg1zNNVzh70jVr1c8
第四步 配置LDAP服務
這是整個過程中最難的地方,目前整個網絡上能搜索到的,幾乎都是過時配置方式,Ricman也是踩着坑爬出來的,希望此文能給在今后的日子,能幫助道友們少走彎路。
要怎么修改配置,OPenLdap 2.4不再推薦直接使用配置文件方式,並且極容易出錯,修改的所有過程,均使用ldapmodify完成
我們可以先看一下目前配置都有哪些文件,執行命令
cd /etc/openldap/slapd.d/cn=config
ls
輸出如下圖,可能些人的結果不一樣,但是幾乎差不多,注意文件的名稱,一會修改配置的時候,會使用到。
當然,你可以使用cat 來查看文件內容,可以看到原始的內容。
我們要修改的字段有:
olcSuffix – 用於保存域信息,需要更新為自己的域
olcRootDN – 根的DN(唯一識別名),根的區別名,它用於根管理員在此節點下做所有的管理
olcRootPW – LDAP 管理員的根密碼,用剛剛第三步創建出來的密碼設置到這里
我們在任意目錄下創建 db.ldif文件。Ricman的經驗最好不要在/etc/openldap/slapd.d/cn=config目錄下創建,因為這目錄保存着原始的配置文件,當使用slaptest -u 測試配置時會報錯。我偷懶,直接在根目錄下創建,運行cd ~便可切換到根目錄(在根目錄下創建文件是不好行為,為方便說明安裝過程,就暫時使用)
修改db文件
這db文件不是數據庫文件,只是ldap中配置文件中一個,可能是mdb,也可能是各種*db,Ricman安裝的是hdb。
運行 vi db.ldif
在此文件中編輯的內容如下
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=ricman,dc=localhost
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=ricman,dc=localhost
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}KUYZ4irDCPN8seoOg1zNNVzh70jVr1c8
請注意上面內容中的olcSuffix, olcRootDN, olcRootPW這三個字段,是需要修改成自己的內容的。
特別需要注意是的olcRootPW字段,因為這個字段在剛剛查看olcDatabase={2}hdb.ldif中是不存在的,所以使用add,表示增加,如果字段已經存在,使用replace,表示進行替換內容
完成編輯后,使用ldapmodify讓修改的內容生效。
ldapmodify命令可在運行環境中直接修改配置文件並且不需要重啟就生效的命令,具體請看ldapmodify官方使用文檔。
在db.ldif目錄下運行命令
ldapmodify -Y EXTERNAL -H ldapi:/// -f db.ldif
輸出如下圖,一定要注意在有三個modifying entry才全部更新成功。
修改monitor文件
與修改db文件相似。在剛剛的db.ldif目錄下運行命令
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=Manager,dc=max,dc=localhost" read by * none
請自己修改db.base中的內容,這個等號后面的內容是上面db.ldif中的olcRootDN是一致的。
保存文件后同樣使用ldapmodify讓其生效。
ldapmodify -Y EXTERNAL -H ldapi:/// -f monitor.ldif
輸出如下圖
同樣,要出現modifying entry才成功。如上圖中Ricman在編輯文件時多寫了一行,所以出錯了。請注意檢查自己編輯的monitor文件。
創建ldap 基礎庫
這里創建的是一個基礎庫,用於保存數據。安裝ldap后會有一個example配置,需要我們復制一份配置文件並賦予它所有權限
運行以下命令
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap:ldap /var/lib/ldap/*
完成配置后,我們就可以向數據庫中增加schemas,需要增加的有:cosine , nis,inetorgperson
schemas是什么鬼,schemas就是數據庫表的定義文件,相當於關系數據庫中的表定義。當然稍有區別。具體可以參考文檔說明understanding-ldap-schema
執行ldapadd命令增加,命令如下
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
以上三條命令是一條一條執行,每一條輸出如下圖
完成以后,就可以創建base.ldif,在庫中增加自己管理域下的內容,運行命令
vi base.ldif
在文件中輸入以下內容
dn: dc=ricman,dc=localhost
dc: ricman
objectClass: top
objectClass: domain
dn: cn=Manager ,dc=ricman,dc=localhost
objectClass: organizationalRole
cn: Manager
description: LDAP Manager
dn: ou=People,dc=ricman,dc=localhost
objectClass: organizationalUnit
ou: People
dn: ou=Group,dc=ricman,dc=localhost
objectClass: organizationalUnit
ou: Group
同樣的,需要修改為你自己的域
運行命令將此數據保存到庫中去
ldapadd -x -W -D "cn=Manager,dc=ricman,dc=localhost" -f base.ldif
此命令會提示輸入ldap的密碼,輸入的密碼同上面第三步創建的密碼一致,我這里輸入:ricman
輸出如下圖
至此,完成基本的配置
管理Ldap
在網上下載Ldap Admin,我使用的是window7系統,直接使用Ldap admin來管理個人覺得還是很爽的。
連接之前,我們需要設置一下服務器的防火牆,允許ldap例外。
運行命令
firewall-cmd --permanent --add-service=ldap
firewall-cmd --reload
接下來,可以使用ldap admin進行管理了。點擊 connect->new connect
然后設置好 Host,Base以及用戶名與密碼
用戶名要使用管理員,本例子中是 cn=Manager ,dc=ricman,dc=localhost
密碼為上面第三步創建的密碼,本方使用的密碼為ricman
點擊測試連接,成功后直接點擊連接即可進入管理界面,如下圖
就可以使用工具創建自己所需要的用戶,組織
卸載 Ldap
如果需要卸載 ,需要先停止服務,然后yum remove
systemctl stop slapd
yum remove ompat-openldap openldap-clients openldap-servers
當然,別忘記了DB_CONFIG以及配置文件,也要將其刪除
rm -rf /var/lib/ldap/*
rm -rf /etc/openldap/slapd.d/*
至此全文結束。如有轉載,請標明轉載來源,謝謝
