LDAP落地實戰(一):OpenLDAP部署及管理維護

運維咖啡吧發表於2018-07-25

公司內部會有許多第三方系統或服務,例如Svn,Git,VPN,Jira,Jenkins等等,每個系統都需要維護一份賬號密碼以支援使用者認證,當然公司也會有許多的主機或伺服器,需要開放登入許可權給使用者登入使用,每臺主機需要新增登入的賬號密碼,這些操作不僅繁瑣且不方便管理,密碼記錯或遺忘的情況時有發生。

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

LDAP

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

  1. LDAP:Lightweight Directory Access Protocol,輕量目錄訪問協議。
  2. LDAP服務是一個為只讀(查詢、瀏覽、搜尋)訪問而優化的非關係型資料庫,呈樹狀結構組織資料。
  3. 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"

圖形示例

上邊來了一堆的名詞解釋,看的雲裡霧裡,還不是很明白,怎麼跟自己的組織架構對應起來呢?看看下邊的圖是不是清晰明瞭

LDAP落地實戰(一):OpenLDAP部署及管理維護

OpenLDAP

上邊介紹了LDAP只是一個協議,基於這個協議實現伺服器端程式有OpenLDAP、Active Directory(微軟的域控制器)等等。

部署OpenLDAP

部署環境:Debian 8.4

1.安裝OpenLDAP,OpenLDAP服務端程式叫slapd

# apt-get install -y slapd
複製程式碼

2.安裝完成之後,會自動生成一個OpenLDAP的系統賬號

# cat /etc/passwd
openldap:x:110:115:OpenLDAP Server Account,,,:/var/lib/ldap:/bin/false
複製程式碼

3.生成OpenLDAP管理員賬號的密碼(後邊修改配置檔案需要使用)

# slappasswd
New password: 
Re-enter new password: 
{SSHA}TpWoSebaT5gKy2Y3EHmZh+Wc0hJaFp7y
複製程式碼

4.新建OpenLDAP配置檔案

# cp /usr/share/slapd/slapd.conf /etc/ldap/
# 配置檔案中有很多@xxx@的配置替換為真實配置

# slaptest -f /etc/ldap/slapd.conf 
5ad9b19d /etc/ldap/slapd.conf: line 105: rootdn is always granted unlimited privileges.
5ad9b19d /etc/ldap/slapd.conf: line 122: rootdn is always granted unlimited privileges.
config file testing succeeded
複製程式碼

配置檔案重要引數說明(需要自己修改的,其他未提到的可以不修改):

  • database bdb:定義使用的後端資料儲存格式,資料庫預設採用了berkeley db,其後可以跟的值有bdb、ldbm、passwd、shell。bdb指使用Berkley DB 4資料庫
  • suffix "dc=163,dc=com":suffix是"LDAP基準名",它是LDAP名字空間在這裡的根。設定想要建立的子樹的根DN
  • rootdn "cn=admin,dc=163,dc=com":設定管理LDAP目錄的超級使用者的DN。這個使用者名稱不要出現在/etc/passwd檔案裡
  • rootpw {SSHA}TpWoSebaT5gKy2Y3EHmZh+Wc0hJaFp7y:設定這個資料庫的超級使用者的口令驗證方式。也就是上邊rootdn設定的使用者的密碼。一定要用加密的口令儲存,可以使用的加密方式有:CRYPT、MD5、SMD5、SHA和SSHA,就是我們第三部生成的密碼
  • directory /var/lib/ldap:設定LDAP資料庫和索引檔案所在的目錄
  • access to:許可權配置下邊詳細說明

5.刪除原配置,生成新配置

# rm -rf /etc/ldap/slapd.d/*
# slaptest -f /etc/ldap/slapd.conf -F /etc/ldap/slapd.d/

# 給新生成的配置檔案賦予openldap的許可權
# chown -R openldap.openldap /etc/ldap/slapd.d/
複製程式碼

6.重啟openldap

# /etc/init.d/slapd restart
複製程式碼

ACL許可權控制

ACL訪問指令的格式:

access to [what]
    by [who] [control]
複製程式碼

簡單解釋:通過access to約束我們訪問的範圍(what),通過by設定哪個使用者(who)有什麼許可權(control)

ACL的詳細配置還是比較複雜的,可以看下下邊參考文件的第三篇,寫的比較詳細,這裡都不再贅述。

線上ACL控制配置解析

為了使用者能夠自主修改密碼,部署了lam給使用者使用(見下文lam介紹)。希望能達到的效果是:

  1. 管理員能夠有全部許可權,包含新建使用者,修改使用者屬性,充值使用者密碼等
  2. 普通使用者只能修改自己的密碼,別的許可權都沒有

配置如下:

# access to attrs=userPassword通過屬性找到訪問範圍密碼,
# 超級管理員也就是我們ldap配置檔案裡寫的rootdn:"cn=admin,dc=163,dc=com"有寫(write)許可權;
# 由於管理員可能不止一個,我建立了個管理員組"ou=Admin,dc=163,dc=com"把管理員統一都放到這個組下,管理員組下的所有使用者(dn.children)有寫許可權;
# 匿名使用者(anonymous)要通過驗證(auth);
# 自己(self)有對自己密碼的寫(write)許可權,其他人(*)都沒有許可權(none).
access to attrs=userPassword,shadowLastChange
        by dn="cn=admin,dc=163,dc=com" write
        by dn.children="ou=Admin,dc=163,dc=com" write
        by anonymous auth
        by self write
        by * none

# access to * 所有其他屬性,
# 超級管理員rootdn:"cn=admin,dc=163,dc=com"有寫(write)許可權;
# 管理員"ou=Admin,dc=163,dc=com"成員有寫(write)許可權;
# 其他人(*)只有讀(read)許可權
access to *
        by dn="cn=admin,dc=163,dc=com" write
        by dn.children="ou=Admin,dc=163,dc=com" write
        by * read
複製程式碼

備份和還原

備份

# ldapsearch -x -b "dc=163,dc=com" -D "uid=authz,ou=Public,dc=163,dc=com" -w "AzdfD863M4" > ldap.20180626.ldif
複製程式碼

引數說明:

  • -x:進行簡單的驗證
  • -D:用來繫結伺服器的DN
  • -w:繫結DN的密碼
  • -b:要查詢的根節點 authz賬號要有"dc=163,dc=com"的查詢許可權

還原

# ldapadd -x -c -D "cn=admin,dc=163,dc=com" -w "smile" -f ldap.20180626.ldif
複製程式碼

引數說明:

  • -c:出錯後繼續執行程式不終止,預設出錯即停止
  • -f:從檔案內讀取資訊還原,而不是標準輸入 還原的DN最好為管理員賬號,至少也要有要LDAP的寫入許可權

web管理工具

用了phpldapadmin和ldap-account-management(簡稱lam)兩款web管理工具,強烈推薦lam,所以這裡就不介紹其他的了

ldap-account-manager

安裝

1.安裝ldap-account-management

# apt-get install ldap-account-manager
複製程式碼

2.瀏覽器訪問

http://ip/lam
複製程式碼

配置

lam的所有配置都可以在web端配置,不需要去伺服器上修改一行程式碼,這個太好用了。

  1. 瀏覽器訪問後進入登入頁面,我們點選右上角"LAM configuratrion"來線上編輯配置檔案

    image

  2. 看到如下頁面有兩個選項:"Edit general settings"來編輯通用配置,預設密碼lam,進入之後能配置密碼策略、日誌、管理員密碼,最重要的是更新掉管理員密碼,這個在後邊"Manage server profiles"管理的時候需要提供;"Edit server profiles"來編輯伺服器配置,我們先來編輯伺服器配置

    image

  3. 進入如下頁面,輸入預設密碼lam即可編輯配置,這裡要說明一下的是紅框標註的"Manage server profiles"可以對伺服器的配置檔案進行配置,例如增加、刪除配置檔案、配置檔案重新命名,最重要的是可以設定配置檔案密碼(也就是我們剛輸入的密碼lam,但修改密碼需要管理員密碼,後邊配置)

    image

  4. 輸入密碼lam後就正式進入伺服器配置頁,看到第一個標籤"General setting",(可以先改下語言簡體中文儲存,整站就給漢化啦,英文渣渣看起來就非常方便了),基本配置都看的很清晰了,主要是Tree suffix配置為自己的DC可以了

    image

  5. 接著來看這個頁面,"security settings"非常重要,配置以何種方式登入web控制檯,預設為Fixed list模式,就是下邊列表裡配置的dn可以登入,我們ldap裡還沒有任何一個賬號(當我們建立了賬號之後可以選擇"LDAP serch"的模式,讓普通賬號也能登入以修改自己的密碼),這裡要選擇fixed list模式並配置為我們ldap的rootdn,設定一個密碼登入之後建立賬號等操作

    image

  6. 接下來就是"Account types"標籤頁的配置,這裡配置我們登入web控制顯示的標籤,我這裡只需要他顯示使用者,就把Group之類的都刪除了,保留了User

    image

  7. "Modules"頁面配置上一個具體每個account type顯示的模組

    image

  8. "Models setting"頁面配置models具體要顯示的內容,不得不說配置非常詳細

    image

  9. 經過上邊的配置就可以進入控制檯新建賬號了,新建賬號之前一個有用的操作是修改使用者的預設RDN標緻為uid,更高位置在登入web控制檯後右上角配置檔案編輯器裡邊

    image

  10. 基本配置完成,可以開始使用了,中文介面比較清晰,無需過多解釋啦。

參考文件

參考了太多網上優秀的文章,向他們致敬,下邊列出的可能不全

掃碼關注公眾號檢視更多原創文章

相關文章