使用 Docker 建置 LDAP 系統

OpenLdap + phpldapadmin 安裝教學

Chris Lee
7 min readDec 4, 2020

輕型目錄存取協定 LDAP (Lightweight Directory Access Protocol),只要是從事 IT 工作肯定聽過這個東西,最常拿來作為組織目錄管理的工具,尤其是人事、物件、系統登入等工具,過往建立一個 LDAP 系統過程繁複,以下就透過 Docker 容器化的方式,建立一個簡單地 LDAP 系統。

環境安裝

隨著資安意識抬頭,許多公司都開始使用 RedHat 作為系統 OS,而 LDAP 這種最常出現在公司內的東西,當然也是建在 RedHat 環境最主流,但因 RedHat OS 其實是要錢的,所以我們改用開源的 CentOS 作為示範,以下使用 CentOS 7。

1. 安裝 Docker

首先參考官方文件,把程式碼逐一貼上執行安裝,先確認當前環境沒有安裝任何 Docker:

sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

接下來設定安裝來源:

sudo yum install -y yum-utils

sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

開始安裝Docker:

sudo yum install docker-ce docker-ce-cli containerd.io

接下來使用以下語法,啟動 Docker:

sudo systemctl start docker

啟動後就可以開始用 Docker 功能了,如果會跳出權限問題,可以用下面語法將當前使用者加入 Docker 的使用群組,重新登入即可:

sudo usermod -aG docker $USER
docker ps 確認沒東西

其他 Docker 相關操作可以參考之前的文章

2. 安裝 LDAP

LDAP 除了 Windows 的 AD (Active Directory) 最常見,另外就是開源的 OpenLDAP ,下面選擇 OpenLDAP 作為示範,首先使用 Docker 搜尋相關的 image 看一下:

再來我們希望 LDAP 可以透過瀏覽器直接管理,不用每次都要進 CLI 操作,所以使用 phpLDAPadmin 這個工具,輔助我們後續開發,一樣搜尋一下相關 image 看一下:

聰明的你一定發現到,兩個的第一個來源都是 osixia,代表相容性沒問題。這樣我們可以寫一個 docker-compose 把兩個 image 一次抓下來安裝,我們先在目錄下建立一個叫 ldap 的資料夾,並撰寫程式碼:

mkdir ldap
cd ldap
vim docker-compose.yml

然後安裝一下 docker-compose:

sudo yum install docker-compose

執行安裝,如果想背景執行請最後面 -d:

docker-compose up

打開瀏覽器打上 URL 及設定好的 port,就可以看到安裝好的管理畫面:

第一次登入的資訊如下:使用者名稱:cn=admin,dc=example,dc=org
密碼:admin

系統說明

LDAP 基本上就是個樹狀目錄系統,可以根據需求增加節點,例如公司叫「example」,下面有兩個部門人資「People」及IT「Servers」,人資下面有個員工,如下圖示意:

圖示來源:http://dbaontap.com/2016/07/20/oem-13c-ldap-authentication/

相關詳細說明可以參考鳥哥的網站,講的內容非常詳細。下面就用最簡單方式簡述:

> DN(Distinguished Name):識別名稱,絕對位置
> RDN(Relative Distinguished Name):相對識別名稱,相對位置
> CN(Common Name) :名稱
> OU(Organizational Unit Name):組織名稱
> O (Organizational Unit ):組織
> DC(Domain Componet):網域元件

值得注意的是,LDAP表示方式都是由小到大,如剛剛登入的帳號,就是先說他是誰,後面才描述其他屬性。

如果要新增節點非常簡單,只要在要新增節點的上一層,點擊下面的 Create a child entry,就可以新增節點。

節點的種類很多,最常使用的為左邊的 Generic 的類別,我們可以根據需求建立多個

例如我在數據團隊 DataTeam 的組織中,裡面有兩個部門,分別是數據分析師 DataUser 及數據管理者 DatrAdmin,然後我在兩個單位內分別建立兩個角色,Chris Lee 及 Jack Wu。

為了確認有沒有成功,我們可以另外建一台機器,安裝 openldap-clients 來測試,安裝語法如下:

yum install openldap-clients

然後我們使用語法來查詢,詳細可以看這裡,下面用簡單示範,如果要看 DataTeam 下面有哪些資訊,可以打:

ldapsearch -x -H ldap://35.239.254.125:8389 -b ou=datateam,dc=example,dc=org -D "cn=admin,dc=example,dc=org" -w admin

如果有正常出現結果,代表成功囉,接下來就可以研究如何讓應用程式的登入系統對接 LDAP。

備份系統與還原

如果使用的是 Docker container 及 phpldapadmin 來管理的話,備份與還原可以說非常容易,首先是系統方面,因為使用 container 容器化處理,所以可以輕易地 export 成 image 並帶到任何地方。

資料方面因為有 phpldapadmin,可以使用上面的 import/export 功能,記得匯出時要讓所有子項一起匯出。

LDAP 是營運架構的一個基礎系統,未來將在其他文章說明怎麼對接熱門的數據產品。

--

--

Chris Lee

隱身在金融業的資料科學家,部分文章會在個人部落格唷 https://chrisnote.com/