站長新書 站長開講 首頁 最新文章 站長著作及審校 FreeBSD 筆記 Linux 筆記 Windows 筆記 虛擬化筆記 網管人雜誌 遊山玩水 關於本站
站長新書 VMware vSphere ICM 團購開跑了!!

OpenLDAP-ldaprmuser.sh Script

前言

繼上一篇 OpenLDAP-ldapadduser.sh Script,我們利用 Script 來簡化當有新進同仁加入時建帳號的過程,相對的當有同仁離職時我們也是要手動下一堆指令來處理 (ex. 刪除該帳號加到所屬的 Mail Aliases...etc),因此開始寫下面的 script 了。請注意:以下 Script 只適合我的環境,若您取用請自行調整,恕不負損壞之責。

rmuser_ldap.sh 達成如下需求

  1. 刪除 user dn 資料
  2. 刪除 user 家目錄及 (含 Maildir)
  3. 刪除 user 在 Mail Aliases 內 Reload Aliases
  4. 執行 slurpd One-shot 同步至 LDAP Slaver

實作環境

FreeBSD 6.1-STABLE

dialog version 0.3

rmuser_ldap.sh 內容

rmuser_ldap.sh Script 內容如下

 1 #!/bin/sh
 2 # $Id: adduser.sh,v 1.6 2006/12/18 weithenn Exp $
 3 # Remove LDAP User Script
 4
 5 USERNAME=`mktemp /tmp/dialog.XXXXXX` || exit 1
 6 LDAPUSER=`mktemp /tmp/dialog.XXXXXX` || exit 1
 7 ALIASESUSER=`mktemp /tmp/dialog.XXXXXX` || exit 1
 8 HOMEPATCH="/home/user"
 9 ALIASES="/usr/local/etc/postfix/aliases"
 10 TMPFILE="/tmp/dialog.aliases"
 11 TODAY=`date +%Y%m%d`
 12 DNBASE="dc=weithenn,dc=idv,dc=tw"
 13 TITLE="刪除 LDAP 使用者帳號"
 14 M4="/tmp/dialog.m4"
 15 M5="/tmp/dialog.m5"
 16 M6="/tmp/dialog.m6"
 17
 18 dialog --title "$TITLE" --inputbox "請輸入欲刪除的使用者帳號" 10 70 "ittest" 2>"$USERNAME"
 19
 20 #Read LDAP,aliases
 21 ldapsearch -x | grep -o `cat "$USERNAME"` | head -1 > "$LDAPUSER"
 22 grep -o `cat "$USERNAME"` ${ALIASES} | head -1 > "$ALIASESUSER"
 23
 24
 25 if [ `cat "$LDAPUSER"` = `cat "$USERNAME"` ]; then
 26    echo "dn: uid=`cat "$USERNAME"`,ou=People... Entry exist" > $M4
 27 else
 28    echo "【Warning】dn: uid=`cat "$USERNAME"`,ou=People... Entry does not exist!!" > $M4
 29 fi
 30
 31 if [ -d ${HOMEPATCH}/`cat "$USERNAME"` ]; then
 32    echo "`cat "$USERNAME"` Home Directory exist" > $M5
 33 else
 34    echo "【Warning】`cat "$USERNAME"` Home Directory does not exist!!" > $M5
 35 fi
 36
 37 if [ `cat "$ALIASESUSER"` = `cat "$USERNAME"` ]; then
 38    echo "`cat "$USERNAME"` Mail Aliases exist" > $M6
 39 else
 40    echo "【Warning】`cat "$USERNAME"` Mail Aliases does not exist!!" > $M6
 41 fi
 42
 43 dialog --yesno "確定刪除使用者:【`cat "$USERNAME"`】\n`cat "$M4"`\n`cat "$M5"`\n`cat "$M6"`" 10 70
 44
 45 #press yes then delete user data
 46 if [ $? = "0" ]; then
 47    ldapdelete -x -D "cn=Manager,${DNBASE}" -W "uid=`cat "$USERNAME"`,ou=People,${DNBASE}"
 48    sed -e 's/'`cat "$USERNAME"`',//' ${ALIASES} > ${TMPFILE}
 49    cp ${TMPFILE} ${TMPFILE}.${TODAY}
 50    mv ${TMPFILE} ${ALIASES}
 51    postalias ${ALIASES}
 52    rm -r "${HOMEPATCH}/`cat "$USERNAME"`"
 53    /usr/local/etc/rc.d/slurpd start
 54    dialog --title "$TITLE" --msgbox "Delete【`cat "$USERNAME"`】Successful!! \n\nDelete Entry in ou=People,${DNBASE} \nDelete Home Directory \nDelete in Mail Aliases \nReload Mail Aliases(postaliases)" 10 70
 55    rm /tmp/dialog.*
 56 else
 57    dialog --title "$TITLE" --msgbox "刪除【`cat "$USERNAME"`】失敗!!" 8 70
 58 fi

解說 rmuser_ldap.sh 內容:

5 ~ 16:定義參數

18:跳出 dialog 對話窗輸入欲刪除的使用者帳號。

21:執行 ldapsearch 搜尋 LDAP 是否有您剛才第 18 行 dialog 對話窗中輸入的 username 存在,若存在只取第一個 usernmae 即可,並寫入 $LDAPUSER 暫存檔內。

22:搜尋 /usr/local/etc/postfix/aliases 內是否有您剛才第 18 行 dialog 對話窗中輸入的 username 存在,若存在只取第一個 usernmae 即可,並寫入 $ALIASESUSER 暫存檔內。

25 ~ 41:判斷該使用者帳號 LDAP,Aliases,Home Direcotry 是否有重複。

43:跳出 dialog yes/no 對話窗,顯示剛才 18 行所輸入欲刪除的 LDAP User 資訊,若 25 ~ 41 判斷使用者不存在則顯示警告訊息。

46:若第 43 行按下 yes 則開始執行 46 ~ 55行內容。

47:刪除指定的 LDAP DN。

48 ~ 51:刪除 Aliases 內該使用者帳號,並 Reload Aliases 使剛才的修改生效。

52:刪除使用者家目錄。

53:執行 slurpd One-shot 同步至 LDAP Slaver。

55:刪除此 Shell Script 產生的暫存檔 /tmp/dialog.*

57:若第 43 行按下 no 後將不會執行任何動作並離開 dialog 對話窗。

參考

[ Linux程式設計 - Dialog]

[張耀仁-正規表示式的入門與應用(一)]

[博客來書籍館 - Shell Programming 333個應用範例技巧大全集]

Go To Oddmuse OrgGo To FreeBSD OrgCreative Commons 2.5 Taiwansitestates.com