my_pw (<– 點這裡下載)是我很久以前寫的一個小程式,這兩天在備份資料的時候不小心看到,想說分享出來,也許有人會用到。在這裡特別講一下,我個人相信這個程式在 linux 和 freebsd 上也可以正常的執行,但是我沒有這樣的機器,所以沒辦法確認,有興趣的人可以試試,請再告訴我你測試的結果。
我的目標是讓 root 在 Solaris 下可以「不」透過互動模式來修改使用者密碼,直接在命令列裡指定密碼,達到快速修改使用者密碼的目的。
舉個例子,底下是一個很標準的改密碼方式, root 執行 passwd yoyo 來改 yoyo 的密碼,系統會先問密碼要改成什麼,然後要你再打一次,
# passwd yoyo
New Password: <— 這裡要打一次密碼
Re-enter new Password: <— 要再打一次密碼
passwd: password successfully changed for yoyo
#
(最後,再手動記下 yoyo 的密碼,並且告訴 yoyo 他的密碼是什麼)
這樣改密碼,改一個是還好,但是如果一次要改500個密碼豈不是當場掛了?也許你會問,什麼時候會需要一次改500個密碼?可以想到的幾個情形是,
- 學校開學的時候會大量新建帳號,每個帳號都要有一個密碼。另外,針對每個帳號,要把帳號名稱和密碼印下來發給這些新使用者
- 某使用者的帳號遭盜用,有可能需要緊急更改所有使用者的密碼
- 為了某些原因,將幾個帳號移轉給一群人使用,事後要將密碼改回來
- …..
使用 my_pw,想要快速修改使用者密碼就不難了,只要執行 my_pw yoyo yoyo123 就可以把 yoyo 的密碼改成 yoyo123 ,
# my_pw yoyo yoyo123
Password has been successfully changed for user “yoyo”
加上 -v 的話,就會顯示出剛剛設定的密碼,很適合把這段結果印給 yoyo,
# my_pw -v yoyo yoyo123
Password has been successfully changed for user “yoyo”, password is yoyo123
執行這個指令的時候也可以不指定密碼,程式會隨機產生一個密碼指定給這個使用者(要 Solaris 8 或以上),
# my_pw -v yoyo
Password has been successfully changed for user “yoyo”, password is aSaamJbx
如以上所述,這個程式讓 root 可以快速修改「一個」使用者的密碼,所以如果想要大量修改使用者密碼,很容易,再寫一個 shell script,用 for/while 的方式來執行 my_pw 就可以了。
以下提供一個很簡單的範例,增加 53 個帳號並且隨機指定密碼,這 53 個帳號是 b7201001 到 b7201053,只要把底下這段程式碼存成一個檔案,加上執行的權限,再去執行這個檔案就可以了。有需要的人可以修改一下,想搞得多複雜都可以。
#!/bin/sh
#
# the example demonstrate a way to add 53 user accounts, from
# b7201001 to b7201053 and then set their password to a random string.
#
#
index=1
preceding=”b7201″
while [ "$index" -le 53 ]
do
account=`printf “${preceding}%03d” $index`
useradd $account
my_pw -v $account
index=`expr $index + 1`
done
執行了這個小程式之後,就會看到這樣的結果,
Password has been successfully changed for user “b7201001″, password is GQ3OUSTT
Password has been successfully changed for user “b7201002″, password is 0PADKsN4
Password has been successfully changed for user “b7201003″, password is t5LpQP0u
Password has been successfully changed for user “b7201004″, password is pUe0XCfi
…..
…..
Password has been successfully changed for user “b7201051″, password is An1xzQzU
Password has been successfully changed for user “b7201052″, password is 6DuOYAl9
Password has been successfully changed for user “b7201053″, password is gnWqjeTw