每學年初都會由校務行政系統由擷取新的學生資料,並搭配亂數密碼,使用 awk 來大批產生學生帳號,在建立學生帳號時,可以建立硬碟容量限制 Quota、建立 Samba 密碼、建立學生個人網頁、設定帳號使用期限、初始化個人目錄設定…….等等,一些瑣碎的事都可以一個步驟完成。
在處理 Open LDAP Server 時,也想要利用這樣的方式來處理這個部份,稍微試了一下,看起來應該是沒有太大的問題。
底下是實驗的學生資料,以 csv 格式,每個學生一列資料,以空格當做欄位間隔
欄位分別是 班級 座號 姓名 帳號 密碼 群組
# head -2 102_class41.lst
四忠 01 蔡中火 s0990499 123456 s0990
四忠 02 陳大水 s0990999 234567 s0990[@more@]建立 LDAP 密碼檔
# vim mkldifpw.awk
# 產生密碼
{print “slappasswd -s “$5 }
測試
# awk -f mkldifpw.awk 102_class41.lst | sh
{SSHA}CmIwt8puhug01FSBsdqVSpQgMkkuuQWv
{SSHA}9sgDt6+WDZG4y9nZasVL5jRgpbkMq3AU
輸出成密碼檔
# awk -f mkldifpw.awk 102_class41.lst | sh > /root/102_class41_ldifpw.lst
把 102_class41.lst 和 102_class41_ldifpw.lst 組合起來
# paste -d ” ” 102_class41.lst 102_class41_ldifpw.lst > 102_class41_ldap.lst
四忠 01 蔡中火 s0990499 123456 s0990 {SSHA}xecUVfAyOlao7udDzLccUvf4fHOonjzN
四忠 02 陳大水 s0990999 234567 s0990 {SSHA}WqVy40LfOfoRV1KBwlJFPpfGNgnkIbtr
建立產生 ldif 的 awk 檔
# vim mkldif.awk
# 帳號密碼檔格式
四忠 01 蔡中火 s0990499 123456 s0990 {SSHA}xecUVfAyOlao7udDzLccUvf4fHOonjzN
{print “dn: uid=”$4″,ou=”$6″,ou=Student,dc=ldap,dc=tces.ilc.edu.tw” }
{print “uid: “$4 }
{print “cn: “$1$2$3 }
{print “sn: “$1$2$3 }
{print “mail: “$4″@tces.ilc.edu.tw” }
{print “objectClass: person” }
{print “objectClass: organizationalPerson” }
{print “objectClass: inetOrgPerson” }
{print “objectClass: posixAccount” }
{print “objectClass: top” }
{print “userPassword: “$7 }
{print “loginShell: /sbin/nologin” }
{print “uidNumber: 500” }
{print “gidNumber: 500” }
{print “homeDirectory: /home/”$6″/”$4 }
{print “gecos: “$1$2$3 }
{print “” }
測試一下
# awk -f mkldif.awk 102_class41_ldap.lst
dn: uid=s0990499,ou=s0990,ou=Student,dc=ldap,dc=tces.ilc.edu.tw
uid: s0990499
cn: 四忠01蔡中火
sn: 四忠01蔡中火
mail: s0990499@tces.ilc.edu.tw
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
userPassword: {SSHA}xecUVfAyOlao7udDzLccUvf4fHOonjzN
loginShell: /sbin/nologin
uidNumber: 500
gidNumber: 500
homeDirectory: /home/s0990/s0990499
gecos: 四忠01蔡中火
dn: uid=s0990999,ou=s0990,ou=Student,dc=ldap,dc=tces.ilc.edu.tw
uid: s0990999
cn: 四忠02陳大水
sn: 四忠02陳大水
mail: s0990999@tces.ilc.edu.tw
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
userPassword: {SSHA}WqVy40LfOfoRV1KBwlJFPpfGNgnkIbtr
loginShell: /sbin/nologin
uidNumber: 500
gidNumber: 500
homeDirectory: /home/s0990/s0990999
gecos: 四忠02陳大水
最後可能比較麻煩的是 uidNumber 的部份,因為 uidNumber 是建立帳號時,系統依帳號的使用而自動編號產生的,當然也可以在建立學生帳號時,直接指定使用者的 uidNumber
# useradd
-u, –uid UID user ID of the new account