這是關於堡壘跳板機的第三篇文章,以前介紹了實現堡壘跳板機的總體三層架構 和 設計實現:
堡壘跳板機總體架構
堡壘跳板機架構實現segmentfault
本篇介紹整個體系中的一個補充,對第三層ldap架構的實現的具體操做進行下記錄。後端
後端服務器數量日益增長,帳號的數量也在不斷增長,帳號的統一管理變得尤其重要。結合堡壘機,主要針對服務器帳號體系接入LDAP管理作以下主要工做:服務器
ldap server主從的搭建,ldap主從考慮用同步複製(syncrepl)實現,大體爲slave到master以拉的模式同步目錄樹,master負責讀寫,slave只讀。另外主從都需接入負載均衡提供讀服務;session
服務器帳號接入ldap,客戶端能夠ssh遠程鏈接服務器用戶名和密碼登陸;架構
ldap管理客戶端的公鑰,使客戶端能夠ssh服務器免密碼登陸;app
ldap管理服務器用戶的sudo權限負載均衡
openldap有自帶的幾種同步模式,也能夠採用inotify+rsync
或者rsync
加入定時任務等方法。這裏採用的是syncrepl
同步機制,syncrepl
是OpenLDAP服務器之間同步所使用的協議, 且屬於slapd
的一個模塊。在它基本的refreshOnly
同步模式下, 提供者使用基於拉模式的同步, 在拉模式同步下, 消費者按期拉取提供者( master) 服務器的內容來更新本地目錄樹並應用。 less
從庫寫入數據將出現此提示:ssh
Enter LDAP Password: adding new entry "uid=test4,ou=people,dc=lianjia,dc=com" ldap_add: Server is unwilling to perform (53)
1) OpenLDAP服務器之間須要保持時間同步。
2) OpenLDAP軟件包版本保持一致。
3) OpenLDAP節點之間域名能夠互相解析。
4) 配置OpenLDAP同步複製, 須要提供徹底同樣的配置及目錄樹信息。
5) 數據條目保持一致。
6) 額外的schema文件保持一致。ide
此種模式的優點就是簡單,僅slave
按期從master
拉取數據就行,而且可以徹底同步,缺點是面對上萬條的大量數據,而且寫操做較多時,壓力就會產生,鑑於ldap
自己的優點就是提供讀的服務爲主,可能一天的寫進數據量都不會太大,此種模式理論上是可行的。
主master:
modulepath /usr/lib/openldap modulepath /usr/lib64/openldap moduleload syncprov.la #以上爲開啓同步模塊 index entryCSN,entryUUID eq #添加索引,提升性能,此索引主要用於提升同步速度,同步須要使用到這二個字段 overlay syncprov #後端工做在overlay模式(不明,缺乏此參數同步不能進行) syncprov-checkpoint 100 10 #當知足修改100個條目或者10分鐘的條件時主動以推的方式執行 syncprov-sessionlog 100 #同步時的會話日誌量
從slave:
modulepath /usr/lib/openldap modulepath /usr/lib64/openldap moduleload syncprov.la index entryCSN,entryUUID eq syncrepl rid=002 #節點ID必須在整個OpenLDAP集羣中是惟一的, serverID與MySQL複製中的server-id是同等的概念 provider=ldap://admin.lianjia.com:389/ #主OpenLDAP服務器IP地址及端口 type=refreshOnly #設定模式爲拉 retry="60 10 600 +" #在開始的10次每60秒重試一次,在10次之後每600秒重試一次 interval=00:00:00:10 #同步的時間間隔,interval格式day:hour:minitus:second) searchbase="dc=lianjia,dc=com" #從另一臺OpenLDAP服務器即master的根域同步條目 scope=sub #sub表明同步根域lianjia.com下的全部條目 schemachecking=off #不啓用schema語法檢測 bindmethod=simple #採用的同步驗證模式爲簡單 binddn="cn=admin,dc=lianjia,dc=com" #使用admin.lianjia.com即管理員讀取目錄樹信息 attrs="*,+" #同步全部屬性信息 credentials=***************** #密碼
openldap
oddjob
oddjob-mkhomedir
nss-pam-ldapd
openldap-clients
authconfig
openssh-ldap
messagebus
oddjobd
nslcd
sshd
authconfig --enablemkhomedir --enableldap --enableldapauth --ldapserver=ldap://admin.lianjia.com --ldapbasedn="dc=lianjia,dc=com" --enableforcelegacy --disablesssd --disablesssdauth --update --enablemkhomedir #建立家目錄並配置相關用戶家目錄的環境變量,建議都採用oddjob軟件的mkhomedir模塊 --enableldap --enableldapauth --ldapserver=ldap://admin.lianjia.com --ldapbasedn="dc=lianjia,dc=com" #接入ldapserver --enableforcelegacy --disablesssd --disablesssdauth #不採用sssd驗證的方式,默認會採用。 --update #對相關配置進行更新
/etc/sudo-ldap.conf:
uri ldap://admin.lianjia.com/' #ldap服務端地址 SUDOERS_BASE ou=sudoers,dc=lianjia,dc=com' #sudo的規則都在組織單元sudoers下,服務端需先存在組織單元ou=sudoers和sudo相關的schema文件
/etc/nsswitch.conf:
#認證的順序配置 原配置爲: passwd: files shadow: files group: files netgroup: nisplus automount: files nisplus 現有配置爲: passwd: files ldap shadow: files ldap group: files ldap netgroup: files ldap automount: files ldap sudoers: files ldap #配置ldap管理sudo規則時新增的
/etc/ssh/sshd_config:
PubkeyAuthentication yes #容許sshpublickey驗證 AuthorizedKeysCommand /usr/libexec/openssh/ssh-ldap-wrapper #抓取ldapserver的用戶配置的公鑰的腳本 AuthorizedKeysCommandRunAs root #運行腳本命令用戶爲root
/etc/ssh/ldap.conf:
URI ldap://admin.lianjia.com BASE dc=lianjia,dc=com #服務端需先配置導入sshpublickey相關的schema文件 port 389 ssl off
/etc/nslcd.conf:
#配置客戶端與後端的ldap認證服務器進行交互,新增以下 uid nslcd #默認 gid ldap #默認 uri ldap://admin.lianjia.com base dc=lianjia,dc=com ssl no tls_cacertdir /etc/openldap/cacerts
/etc/pam_ldap.conf:
#配置c/s交互中走pam的認證 uri ldap://admin.lianjia.com ssl no tls_cacertdir /etc/openldap/cacerts pam_password md5
/etc/pam.d/system-auth:
#系統認證走ldap,如su - user(ldap),debug打印相關日誌信息 auth required pam_env.so debug auth sufficient pam_unix.so nullok try_first_pass debug auth requisite pam_succeed_if.so uid >= 500 quiet auth sufficient pam_ldap.so use_first_pass debug #新增行 auth required pam_deny.so account required pam_unix.so broken_shadow debug #新增broken_shadow參數,在做爲account使用時,該參數用來忽略對影子密碼的讀錯誤 account sufficient pam_localuser.so account sufficient pam_succeed_if.so uid < 500 quiet account [default=bad success=ok user_unknown=ignore] pam_ldap.so debug #新增行 account required pam_permit.so password requisite pam_cracklib.so try_first_pass debug retry=3 type= password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok debug password sufficient pam_ldap.so use_authtok debug #新增行 password required pam_deny.so session optional pam_keyinit.so revoke session required pam_limits.so debug session optional pam_oddjob_mkhomedir.so umask=0022 debug #新增行,authconfig自動配置時,家目錄umas爲0077,手動改的0022 session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid session required pam_unix.so debug session optional pam_ldap.so debug
/etc/sysconfig/authconfig:
#authconfig軟件安裝後所帶的配置文件,配置文件用來跟蹤LDAP身份認證機制是否正確啓用,好比裏面就配置了關閉sssd認證採用ldap認證,並配置家目錄等等。 修改後的內容以下:(no-->yes) USESHADOW=yes USELDAPAUTH=yes USELOCAUTHORIZE=yes USELDAP=yes FORCELEGACY爲yes
/etc/openldap/ldap.conf:
#主要用於客戶端查詢OpenLDAP服務器條目信息。 新增以下: TLS_CACERTDIR /etc/openldap/cacerts URI ldap://admin.lianjia.com BASE dc=lianjia,dc=com #以上內容除了/etc/nsswitch.conf配置文件的新增行sudoers: files ldap外,所有經過authconfig命令實現批量配置,操做前作了初始化的備份,不指定備份,authconfig也將上一次的配置備份。備份目錄在/var/lib/authconfig/。
變動過程當中涉及到的配置文件有:
/etc/nsswitch.conf #配置認證順序,好比認證時先走file仍是ldap仍是nis等等 /etc/nslcd.conf #這裏是經過nslcd方式與OpenLDAP服務端進行交互。nslcd進程由nss-pam-ldapd軟件包提供, 根據nslcd.conf配置信息, 與後端的認證服務器進行交互。 /etc/pam_ldap.conf #實現ldapclient與ldapserver的交互 /etc/openldap/ldap.conf #主要用於查詢OpenLDAP服務器全部條目信息。 /etc/pam.d/system-auth #加入了pam_ldap.so的模塊,主要用於系統自己的一些認證如:su - user /etc/pam.d/password-auth #各類密碼的認證走的一個配置文件,其中sshd會include這個模塊,因此sshd認證的相關參數配置在此 /etc/sysconfig/authconfig #authconfig軟件安裝後所帶的配置文件,配置文件用來跟蹤LDAP身份認證機制是否正確啓用,好比裏面就配置了關閉sssd認證採用ldap認證,並配置家目錄等等。
有測試過程當中出現安裝完nslcd軟件(nslcd用於與後端的ldap認證服務器進行交互),可是卻沒有自動建立nslcd的帳戶,本來應建立以下兩個帳戶:
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin nslcd:x:65:55:LDAP Client User:/:/sbin/nologin
解決方案:yum reinstall -y nss-pam-ldapd
從新安裝此軟件
問題描述:
ldap初始化的機器以及兩臺ldap服務端登錄緩慢,將近一分鐘才能登錄上,watch -n 1 'netstat -apn | grep slapd'
發現ldap服務器的slapd
與客戶端nslcd
創建的ESTABLISHED
很是之多,而且鏈接數一直在增加。
問題緣由:
鏈接數太高時候(超過默認1024),slapd
就會hang死,而且此時打開的文件數也異常之高。服務端一直保持與客戶端創建長鏈接,不主動釋放鏈接,同時客戶端默認與服務端是緊耦合的鏈接方式,會一直嘗試鏈接服務端。
問題解決:
更改客戶端與服務端的ESTABLISH POLICY
,將客戶端/etc/pam_ldap.conf
中bind_policy hard
改成bind_policy soft
。/etc/pam_ldap.conf
與/etc/nslcd.conf
中的idle_timelimit timelimit bind_timelimit
(分別爲不須要鏈接服務端時的鏈接斷開時間,查詢服務器數據的超時斷開時間,鏈接服務器超時的鏈接斷開時間)調整爲5秒。將服務端idletimeout
調整爲5秒,這樣客戶端在不須要ldap認證時,服務端會在5秒斷開鏈接。這樣,服務端只在客戶端請求ldap認證時才與客戶端創建鏈接,而且閒置時間爲5秒即斷開鏈接,這樣鏈接數不會過高,而且打開的文件數也不會過高,同時客戶端也不會由於服務端不響應而一直嘗試鏈接服務端。