古いSolarisで大量ユーザ登録

 何の因果か応報か、今時Solaris2.6(爆)でメールサーバ動かしてくれと頼まれた。
 どーしてそーゆー事になったのかは、我ながら信じられない事情なので省く。

しいていえば太陽のせいだ

 でまあ、OSやらsendmailやらqpopperやら、指定されたソフトのインストール自体は問題なかったのだが、ちょっと困ったのがここに数百人分のユーザ登録が必要、ということだったのである。

 Solaris2.6ではユーザ登録はadduserコマンドで行える。ユーザ自体の登録とホームディレクトリ掘りは、このコマンドで一発である。
 が、これを使ってもadmintoolを使っても、初期登録時はパスワードロックされており、必ずパスワードを登録しなければ使用開始できない。
 問題は、このパスワードの設定である。

 初期パスワード自体はアカウント名からのハナモゲラでよいということなので、自動生成できるとして、問題はそれをどうやってSolaris君に喰わせるか。

 ちょっと見てみたらSolaris2.6のpasswdコマンドは、入出力ともstderrであり、普通のシェルスクリプトでリダイレクトでコントロールするのが難しい。つまり、

passwd foo 12346
passwd baz 12346


みたいなコマンドをズラズラ書いたシェルスクリプトで一括登録!ってわけにはいかないんである。
 cryptを使って自前で暗号化したpasswdファイルを生成して差し替えてしまおうか、と思ったが、よく考えりゃあshadowパスワードだ。んな事やったことないからなぁ。Linuxみたいにshadow on/offができりゃあいいのだが、残念なことにSolaris2.6君はできないみたいだ。
 いずれにしてもこの方法だと、差し替える時にシングルユーザモードでないとまずそうだし、現に生きて動いているサーバの場合、こりゃあちょっとまずそうだ。

 うううううううううううううん。
 と10分ばかり考えた末、結局、telnetソフトのTeraTermを立ち上げた。


timeout = 1
fileopen fhandle 'passwd.txt' 0
:loop
filereadln fhandle uname
if result goto fclose
filereadln fhandle passtext
if result goto fclose
passcmd = 'passwd '
strconcat passcmd uname
sendln passcmd
wait "New password:"
sendln passtext
wait "Re-enter new password:"
sendln passtext
waitln "#"
goto loop
:fclose
fileclose fhandle


TeraTerm用に、概略上のようなマクロを書いた。

要するに、


ユーザー名
パスワード



というファイルを順次読み込んで、自動的にpasswdコマンドを次から次へと動かしてしまえ、という甚だカッチョ悪い方法である。おまけに死ぬほど遅い

 がこれにもいいところはあって、あくまでも正規のpasswdコマンドを通しているので間違いは少ないし、システムを停止する必要もない上、動かしっぱなしで帰ってしまえば翌日には終わってる(笑)

まあ、どう考えても良い方法ではないが、どうせ一発ものだし、うまくいったからどうでもいいか(爆)
[PR]
by SIGNAL-9 | 2005-03-25 18:42 | TIPSとかKludgeとか
<< Windowsイベントログの保存 失敗知識データベース >>