公司內部會有許多第三方系統或服務,例如Svn,Git,VPN,Jira,Jenkins等等,每個系統都需要維護一份賬號密碼以支援使用者認證,當然公司也會有許多的主機或伺服器,需要開放登入許可權給使用者登入使用,每臺主機需要新增登入的賬號密碼,這些操作不僅繁瑣且不方便管理,密碼記錯或遺忘的情況時有發生。
引入一套支援各系統、服務、主機單點認證的服務就顯得尤其迫切和重要。LDAP服務正是為此而生,且經過長時間市場檢驗,安全穩定,文件也比較豐富,方便上手。
LDAP
可以通過以下三句話快速的認識一下LDAP:
- LDAP:Lightweight Directory Access Protocol,輕量目錄訪問協議。
- 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"
圖形示例
上邊來了一堆的名詞解釋,看的雲裡霧裡,還不是很明白,怎麼跟自己的組織架構對應起來呢?看看下邊的圖是不是清晰明瞭
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名字空間在這裡的根。設定想要建立的子樹的根DNrootdn "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介紹)。希望能達到的效果是:
- 管理員能夠有全部許可權,包含新建使用者,修改使用者屬性,充值使用者密碼等
- 普通使用者只能修改自己的密碼,別的許可權都沒有
配置如下:
# 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端配置,不需要去伺服器上修改一行程式碼,這個太好用了。
-
瀏覽器訪問後進入登入頁面,我們點選右上角"LAM configuratrion"來線上編輯配置檔案
-
看到如下頁面有兩個選項:"Edit general settings"來編輯通用配置,預設密碼lam,進入之後能配置密碼策略、日誌、管理員密碼,最重要的是更新掉管理員密碼,這個在後邊"Manage server profiles"管理的時候需要提供;"Edit server profiles"來編輯伺服器配置,我們先來編輯伺服器配置
-
進入如下頁面,輸入預設密碼lam即可編輯配置,這裡要說明一下的是紅框標註的"Manage server profiles"可以對伺服器的配置檔案進行配置,例如增加、刪除配置檔案、配置檔案重新命名,最重要的是可以設定配置檔案密碼(也就是我們剛輸入的密碼lam,但修改密碼需要管理員密碼,後邊配置)
-
輸入密碼lam後就正式進入伺服器配置頁,看到第一個標籤"General setting",(可以先改下語言簡體中文儲存,整站就給漢化啦,英文渣渣看起來就非常方便了),基本配置都看的很清晰了,主要是Tree suffix配置為自己的DC可以了
-
接著來看這個頁面,"security settings"非常重要,配置以何種方式登入web控制檯,預設為Fixed list模式,就是下邊列表裡配置的dn可以登入,我們ldap裡還沒有任何一個賬號(當我們建立了賬號之後可以選擇"LDAP serch"的模式,讓普通賬號也能登入以修改自己的密碼),這裡要選擇fixed list模式並配置為我們ldap的rootdn,設定一個密碼登入之後建立賬號等操作
-
接下來就是"Account types"標籤頁的配置,這裡配置我們登入web控制顯示的標籤,我這裡只需要他顯示使用者,就把Group之類的都刪除了,保留了User
-
"Modules"頁面配置上一個具體每個account type顯示的模組
-
"Models setting"頁面配置models具體要顯示的內容,不得不說配置非常詳細
-
經過上邊的配置就可以進入控制檯新建賬號了,新建賬號之前一個有用的操作是修改使用者的預設RDN標緻為uid,更高位置在登入web控制檯後右上角配置檔案編輯器裡邊
-
基本配置完成,可以開始使用了,中文介面比較清晰,無需過多解釋啦。
參考文件
參考了太多網上優秀的文章,向他們致敬,下邊列出的可能不全