堡壘跳板機實現——ldap配置

這是關於堡壘跳板機的第三篇文章,以前介紹了實現堡壘跳板機的總體三層架構 和 設計實現:
堡壘跳板機總體架構
堡壘跳板機架構實現segmentfault

本篇介紹整個體系中的一個補充,對第三層ldap架構的實現的具體操做進行下記錄。後端

總體目標

後端服務器數量日益增長,帳號的數量也在不斷增長,帳號的統一管理變得尤其重要。結合堡壘機,主要針對服務器帳號體系接入LDAP管理作以下主要工做:服務器

  • ldap server主從的搭建,ldap主從考慮用同步複製(syncrepl)實現,大體爲slave到master以拉的模式同步目錄樹,master負責讀寫,slave只讀。另外主從都需接入負載均衡提供讀服務;session

  • 服務器帳號接入ldap,客戶端能夠ssh遠程鏈接服務器用戶名和密碼登陸;架構

  • ldap管理客戶端的公鑰,使客戶端能夠ssh服務器免密碼登陸;app

  • ldap管理服務器用戶的sudo權限負載均衡

ldap主從

syncrepl同步機制說明

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)

OpenLDAP的同步模式要求

1) OpenLDAP服務器之間須要保持時間同步。
2) OpenLDAP軟件包版本保持一致。
3) OpenLDAP節點之間域名能夠互相解析。
4) 配置OpenLDAP同步複製, 須要提供徹底同樣的配置及目錄樹信息。
5) 數據條目保持一致。
6) 額外的schema文件保持一致。ide

syncrepl同步機制的優缺點

此種模式的優點就是簡單,僅slave按期從master拉取數據就行,而且可以徹底同步,缺點是面對上萬條的大量數據,而且寫操做較多時,壓力就會產生,鑑於ldap自己的優點就是提供讀的服務爲主,可能一天的寫進數據量都不會太大,此種模式理論上是可行的。

在slapd.conf中的配置

主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=*****************                    #密碼

Ldapclient(部署於服務器端)配置變動

相關package

  • openldap

  • oddjob

  • oddjob-mkhomedir

  • nss-pam-ldapd

  • openldap-clients

  • authconfig

  • openssh-ldap

開機自啓動

  • messagebus

  • oddjobd

  • nslcd

  • sshd

服務器接入ldap的配置命令

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軟件(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 從新安裝此軟件

服務端slapd與客戶端nslcd鏈接問題

問題描述:
ldap初始化的機器以及兩臺ldap服務端登錄緩慢,將近一分鐘才能登錄上,watch -n 1 'netstat -apn | grep slapd' 發現ldap服務器的slapd與客戶端nslcd創建的ESTABLISHED很是之多,而且鏈接數一直在增加。

問題緣由:
鏈接數太高時候(超過默認1024),slapd就會hang死,而且此時打開的文件數也異常之高。服務端一直保持與客戶端創建長鏈接,不主動釋放鏈接,同時客戶端默認與服務端是緊耦合的鏈接方式,會一直嘗試鏈接服務端。

問題解決:
更改客戶端與服務端的ESTABLISH POLICY,將客戶端/etc/pam_ldap.confbind_policy hard改成bind_policy soft
/etc/pam_ldap.conf/etc/nslcd.conf中的idle_timelimit timelimit bind_timelimit(分別爲不須要鏈接服務端時的鏈接斷開時間,查詢服務器數據的超時斷開時間,鏈接服務器超時的鏈接斷開時間)調整爲5秒。將服務端idletimeout調整爲5秒,這樣客戶端在不須要ldap認證時,服務端會在5秒斷開鏈接。這樣,服務端只在客戶端請求ldap認證時才與客戶端創建鏈接,而且閒置時間爲5秒即斷開鏈接,這樣鏈接數不會過高,而且打開的文件數也不會過高,同時客戶端也不會由於服務端不響應而一直嘗試鏈接服務端。

相關文章
相關標籤/搜索