ldap部署相關,ldap雙機\LAM配置管理\ldap備份還原


前言

接之前我的文章,django+ldap+memcache實現單點登錄+統一認證 就單點登錄實現過程進行詳細記錄,ldap是一切的基礎,可以把它理解成一個讀強寫弱的文件類型數據庫,統一認證我們通過ldap來實現,里邊保存了賬戶信息。為什么不用其他的關系型數據庫呢?我這里的需求是因為在使用的很多軟件默認都支持ldap,比如我們后續要接入的svn、vpn、jira等,使用ldap可以更方便一些。
ldap相關部署的文檔網上資料比較多,這邊就不着重說明了,請參考這篇文章http://www.cnblogs.com/AloneSword/p/4758814.html
寫的很細致了,我這邊使用的場景是,未使用tls傳輸加密,配置了openldap的雙主(通過mirrormode),通過ldap account manager對用戶和組進行管理

補充說明

上邊的文章中,lam講解的相對不多。我這邊再補充一些
其實我自己的生產環境最后用的是lam進行管理,全稱ldap account manager
先從官網下載rpm
yum install ldap-account-manager-5.5-0.fedora.1.noarch.rpm
對應的配置自動放進了apache的目錄里
lam的核心配置在/usr/share/ldap-account-manager/config/lam.conf 但其實這個文件不需要人工編輯,直接從管理頁面編輯

基本上所有信息都可以通過頁面配置了,這個細說起來篇幅會非常多。因為是中文界面,官網也有demo進行參考,這邊就不額外說明如何通過瀏覽器配置lam本身了。官網:https://www.ldap-account-manager.org/lamcms/
默認lam的登錄用戶為manager這個是在/etc/openldap/slapd.conf 中配置的,關鍵參數為rootdn相當於超級管理員,我們為了后續程序調用,可以寫入ldap,最好再新建一個ldap可寫用戶,首先可以通過lam創建一個普通用戶,之后在配置文件中授予這個用戶更大的權限,之后/etc/init.d/slapd restart

access to *
        by dn="uid=ssoadmin,ou=People,dc=ldap,dc=test,dc=net" write
        by self write
        by users read
        by anonymous auth
        

同時可以在lam中配置一下,以便通過lam的用戶可以進行管理

添加一個ssoadmin,這樣在登錄時就可以選擇ssoadmin用戶了

當然這個用戶的密碼是在用戶信息里設置的(可通過lam控制),但此用戶所有的權限都通過配置文件完成
最終,我的賬戶類型用的是

屬性列表即為lam首頁顯示的信息,可根據屬性列表自己定義,另外我的用戶和組的模塊是如下配置

ldap可定義的對象類非常的多,可以參考schema瀏覽器自行學習,選擇你需要的類型

這個要說起來,感覺寫本書都夠了,ldap本身的配置類型還是非常豐富並且復雜的,有興趣的可以自行學習/etc/openldap/schema目錄下的ldif和schema配置,如果自帶的配置無法滿足需求,也可以自定義ldif,通過自定義schema來生成ldif,這塊自我感覺十分復雜,好在我的需求只是需要用戶和組的關系,用戶的關鍵信息有郵箱、中文名、用戶名(再加個手機)就夠了,這樣使用inetOrgPerson\posixAccount\posixGroup剛好夠用,並且lam默認對posix的2個模塊支持的很好,可以較為方便的通過頁面設定用戶和組關系。


ldap的備份和還原

備份:
ldapsearch -x -b "dc=ldap,dc=test,dc=net" -D "cn=Manager,dc=ldap,dc=test,dc=net" -w "password" > ldap.ldif
刪除:
ldapdelete -x -c -D "cn=Manager,dc=ldap,dc=test,dc=net" -w "password" -r 'dc=ldap,dc=test,dc=net'
還原:
ldapadd -x -c -D "cn=Manager,dc=ldap,dc=test,dc=net" -w "password" -f ldap.ldif
因為我的ldap做了mirror,只需在一台還原即可,另一台稍等一會會自動同步

最后附上一個日常備份的腳本,請放在每日2點運行,由於做了雙機mirror,不擔心某台ldap down機,日常的備份是用於減少誤刪除數據的損失

#!/bin/bash
rq=$(date +%Y%m%d)
LOG=/Data/shell/ldap_backup/logs/${rq}.log
BACKUPDATA=/Data/shell/ldap_backup/data
BACKUPCMD=/usr/bin/ldapsearch
LDAPUSER="cn=Manager,dc=ldap,dc=test,dc=net"
LDAPPASSWD="password"
LDAPBN="dc=ldap,dc=test,dc=net"
mkdir -p /Data/shell/ldap_backup/logs
fenge="=============="
echo ${fenge} >> ${LOG}

mkdir -p $BACKUPDATA/
# backup everyday at 2:00
cd $BACKUPDATA/
$BACKUPCMD -x -b ${LDAPBN} -D ${LDAPUSER} -w ${LDAPPASSWD} > ldap_${rq}.ldif
/bin/tar zcf ldap_${rq}.tar.gz ldap_${rq}.ldif && echo "tar zcf ldap_${rq}.ldif --- [OK]">>${LOG} || echo "tar zcf ldap_${rq}.ldif --- [FAILED]">>${LOG}

find $BACKUPDATA -name "*.ldif" -mtime +3 -exec rm -f {} \;
find $BACKUPDATA -name "*.tar.gz" -mtime +30 -exec rm -f {} \;

還原腳本

#!/bin/bash

if [ -z $1 ];then
        echo "請輸入參數1"
        echo "Usage: $0 /Data/shell/ldap_backup/data/ldap_20161110.ldif"
        exit 2
fi

LOG=/Data/shell/ldap_backup/logs/${rq}.log
BACKUPDATA=/Data/shell/ldap_backup/data
DELCMD=/usr/bin/ldapdelete
RECCMD=/usr/bin/ldapadd
LDAPUSER="cn=Manager,dc=ldap,dc=test,dc=net"
LDAPPASSWD="password"
LDAPBN="dc=ldap,dc=test,dc=net"

# delete all
echo "確認刪除ldap原有數據並恢復?(y/n)"
read deleteldap
if [[ "$deleteldap" == 'y' ]];then
        ${DELCMD} -x -c -D ${LDAPUSER} -w ${LDAPPASSWD} -r ${LDAPBN}
        # recovery ldap data
        ${RECCMD} -x -c -D ${LDAPUSER} -w ${LDAPPASSWD} -f $1
fi

參考資料

http://www.cnblogs.com/AloneSword/p/4758814.html
https://segmentfault.com/a/1190000002607140


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM