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 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 對話窗。


參考