仮想化全盛のこの世の中、OSインストール直後の各種設定はなるだけ無人化したい。
そこでFreeBSDでのユーザ設定の無人化について。
pw(8)
pwを使う。
man pwすると画面いっぱいに広がるSYNOPSISにまずのけぞる。
そのくらい、たくさんのことができるpwコマンドであるが、使うのは二つだけ。
pw groupadd
pw useradd
グループ追加とユーザ追加ですな。
pwでのグループ追加
書式は以下の通り
pw groupadd -q -n <グループ名> -g <GID>
-qはエラーメッセージの抑制。
じゃ実際にエラーが発生したらどうすんだ、って話になるが、そこはステータスコードを使う。
グループ:testgをgroup ID:10010で追加するなら、以下の通り。
pw groupadd -q -n testg -g 10010
pwでのユーザ追加
グループ追加に比べ、こちらはちょっと複雑。
書式は以下の通り。
pw useradd -n <ユーザ名> -u <UID> -s <シェル> \
-m -d <ホームディレクトリ> -G <グループ名> \
-c <コメント>
特に-mを除いて説明の必要はないと思う。
-mはホームディレクトリを新規に作る、という意味。
しかしこれだけだとパスワードを訊かれてしまう。
パスワード設定も無人でしたい。
パスワード設定も自動化するには、以下のようにする。
echo -n '<パスワード>' |\
pw useradd -n <ユーザ名> -u <UID> -s <シェル> \
-m -d <ホームディレクトリ> -G <グループ名> \
-c <コメント> \
-h 0
-h 0をオプションとして与えると、pw はパスワード設定を標準入力から受け付けてくれる。
つまり、パスワードをechoし、その標準入力を-h 0オプションを与えたpw useraddにパイプすればよい。
パスワードにtest, uidに10010, シェルに/bin/sh, ホームディレクトリは/home/test, グループ:testに所属するユーザtestを作成するには、以下のように。
echo -n 'test' |\
pw useradd -n test -u 10010 -s /bin/sh \
-m -d /home/test -G test -c 'test user' \
-h 0
いや、でもさあ、パスワード丸見えじゃないか。
そう思ったあなたは正しい。
上記のスクリプトは使うべきでない。
暗号化済みのパスワードを無人で設定するには。
前章で追加した-hオプションを-Hにすれば、pwは暗号化済みのパスワードを受け付けてくれる。
こうしておけば、仮にスクリプトを覗かれたって、パスワードを平文で書いてあるよりははるかに危険度は少ない。
パスワードにtest, uidに10010, シェルに/bin/sh, ホームディレクトリは/home/test, グループ:testに所属するユーザtestを作成するケースを考える。
この記事で触れた方法でパスワードを暗号化する。この例ではsaltは"SALTsalt"。
$ perl -e 'print crypt("test", "\$6\$SALTsalt");'
$6$SALTsalt$gH47I0mRGadJVVlIpeTxVlYw.SjkPOZ7lJoGkqOyhyeUJ7PV5QWuYpIG6D5ggew6RXLpl1eA72TpgX5pGDpr/.
得た文字列をechoしてpwに渡す。※文字列長いので省略してます。
echo -n '<暗号化済みパスワード>' |\
pw useradd -n test -u 10010 -s /bin/sh \
-m -d /home/test -G test -c 'test user' \
-H 0
自分のシステムがどの方法でパスワードを暗号化しているか、確認するのを忘れないこと。
MD5ならまずどのシステムでも大丈夫だが、MD5は今じゃちょっと危ないからね。
以上