LDAP安裝與簡介

介紹

LDAP是輕量目錄訪問協議,英文全稱是Lightweight Directory Access Protocol,一般都簡稱爲LDAP。LDAP的目錄服務其實也是一種數據庫系統(Berkeley DB),只是這種數據庫是一種樹形結構(B Tree),適合讀不適合頻繁寫,不支持事務不能回滾。

我們用LDAP實現多個組件的用戶管理,比如把gitlab和harbor等組件的用戶放在LDAP一起管理,組件只負責權限管理。用戶在這些組件登錄時都走LDAP的認證,讓用戶可以用一套用戶名密碼即可登錄所有組件。

接下來我們一邊安裝一邊學習。

yum安裝OpenLDAP,設置數據庫配置文件

[root@ldap ~]# yum -y openldap-servers openldap-clients
[root@ldap ~]# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
[root@ldap ~]# chown ldap.ldap /var/lib/ldap/DB_CONFIG
[root@ldap ~]# systemctl start slapd
[root@ldap ~]# systemctl enable slapd

默認情況下,slapd服務監聽的是389端口。

設置OpenLDAP 的管理員用戶的密碼

[root@ldap ~]# slappasswd
New password:
Re-enter new password:
{SSHA}xxxxxxxxxxxxxxxxxxxxxxxx

這裏使用了slappasswd命令,返回了加密後的密碼,將這個密碼添加到OpenLDAP的ldif文件中,LDIF(LDAP Interchange Format)用文本格式表示目錄數據庫的信息,以方便用戶創建、閱讀和修改。

創建一個名爲的chrootpw.ldif的文件,其實名字叫什麼無所謂,內容如下:

dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}xxxxxxxxxxxxxxxxxxxxxxxx

介紹一下dn(Distinguished Name)的概念,LDAP的樹形存儲類似DNS,從葉子到根的這條“路徑”是一條數據,稱爲條目(Entry),dn就是這條數據的全局唯一標識。它的值我們後邊再講。

changetype: modify表示我們要修改,add表示我們要添加一條,類似還有replace替換。接下來,執行編輯好的 chrootpw.ldif 文件。

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

ldapadd命令就是通過這個文件執行添加數據操作,類似還有命令ldapmodify進行修改。

添加幾個基礎的 Schema

在LDAP中,schema用來指定一個目錄中所包含的對象(objects)的類型(objectClass),以及每一個類型(objectClass)中必須提供的屬性(Atrribute)和可選的屬性。可將schema理解爲面向對象程序設計中的類,通過類定義一個具體的對象。LDIF中的數據條目可理解爲是一個具體的對象,是通過schema來規劃創建的。因此,schema是一個數據模型,用來決定數據按什麼方式存儲,並定義存儲在不同的條目(Entry)下的數據之間的關係。

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

此處添加的 Schema 主要用於記錄人員信息。也可以按照需要導入別的Schema。

在 LDAP 數據庫中設置根域和數據庫超級管理員

這裏的“根域”我們設置爲 dc=colinlee,dc=fish,即樹的根節點爲colinlee.fish

  • dc(Domain Component)是域名的一部分,把完整的域名拆開。
  • ou(Organization Unit)是組織單元。
  • cn(Common Name)一般是用戶的名字。
  • sn(Surname)一般是姓。
  • uid(User Id)一般是用戶登錄id。

舉個例子,如圖:
在這裏插入圖片描述

數據庫管理員和上面設置過的 OpenLDAP 管理員並非同一管理員。此處的設置同樣需要一個用 slappasswd 命令生成的密碼,爲了方便管理,我們使用剛剛生成的密碼,不再重新生成。

創建一個新的 ldif 文件domain-dbadmin.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=admin,dc=colinlee,dc=fish" read
  by * none

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=colinlee,dc=fish

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

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}xxxxxxxxxxxxxxxxxxxxxxxx

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange
  by dn="cn=admin,dc=colinlee,dc=fish" write
  by anonymous auth
  by self write
  by * none
olcAccess: {1}to dn.base=""
  by * read
olcAccess: {2}to *
  by dn="cn=admin,dc=colinlee,dc=fish" write
  by * read

然後執行該 ldif 文件:

[root@ldap ~]# ldapmodify -Y EXTERNAL -H ldapi:/// -f domain-dbadmin.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"

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

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

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

新增數據(創建節點)

這一步新增了三條數據,預期結果如圖:
在這裏插入圖片描述
我們創建一個新的 ldif 文件basedomain.ldif,內容如下:

dn: dc=colinlee,dc=fish
objectClass: top
objectClass: dcObject
objectclass: organization
o: Example Inc.
dc: colinlee

dn: ou=user,dc=colinlee,dc=fish
objectClass: organizationalUnit
ou: user

dn: ou=group,dc=colinlee,dc=fish
objectClass: organizationalUnit
ou: group

dn: cn=admin,dc=colinlee,dc=fish
objectClass: organizationalRole
cn: admin
description: Directory Administrator

這個文件的格式簡單說明一下。dn唯一標識一個條目,objectClass是這個條目所包含的屬性,可以有多個,如上述第一個條目就有3個。條目的屬性根據objectClass的不同而不同,有的objectClass有必須設置的屬性,我們需要對屬性賦值。還以第一個條目爲例,top沒有必須定義的屬性,dcobject必須定義屬性dc,用來表示一個域名的部分,而organization必須定義屬性o,用來表示一個組織的名稱。多個條目之間用一個空行分隔。

LDAP中,一個條目必須包含一個objectClass屬性,且需要賦予至少一個值。objectClass有着嚴格的等級之分,最頂層是top和alias。例如,organizationalPerson這個objectClass就隸屬於person,而person又隸屬於top。在OpenLDAP的schema中定義了很多objectClass,按需查找。

執行該文件使內容生效。此處使用了數據庫超級管理員的身份,需要輸入我們之前設置的密碼:

[root@ldap ~]# ldapadd -x -D cn=admin,dc=colinlee,dc=fish -W -f basedomain.ldif
Enter LDAP Password:
adding new entry "dc=colinlee,dc=fish"

adding new entry "ou=user,dc=colinlee,dc=fish"

adding new entry "ou=group,dc=colinlee,dc=fish"

adding new entry "cn=admin,dc=colinlee,dc=fish"

安裝LDAP管理工具PHPldapadmin

首選yum安裝Apache和PHP:

yum -y install httpd php php-ldap php-gd php-mbstring php-pear php-bcmath php-xml

接着安裝phpldapadmin:

yum -y install epel-release
yum --enablerepo=epel -y install phpldapadmin

然後修改配置:

vim /etc/phpldapadmin/config.php
#397行取消註釋,398行添加註釋,修改爲dn登錄
$servers->setValue('login','attr','dn');
// $servers->setValue('login','attr','uid');
// 保存退出修改另一個配置
vim /etc/httpd/conf.d/phpldapadmin.conf
<IfModule mod_authz_core.c>
# Apache 2.4
#Require local
#註釋掉上邊這句,添加一行內容,指定可訪問的ip段爲全部
Require all granted
</IfModule>

啓動服務並查看:

systemctl start httpd && systemctl enable httpd

瀏覽器登錄http://LDAP所在機器ip:80/phpldapadmin/。端口是Apache的,可自行修改。如果按照本文的命令複製粘貼走下來,登錄用戶名爲cn=admin,dc=colinlee,dc=fish,密碼爲之前自己設置的管理員密碼。如圖:
在這裏插入圖片描述

參考自:
https://www.jianshu.com/p/dc7112873e68
https://cloud.tencent.com/developer/article/1026304
https://blog.51cto.com/11555417/2065747

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