最近になって、FreeBSD には pw という、バッチコマンド形式でユーザー登録やグループ登録、削除や変更を行える pw コマンドがあるのを知りました。
FreeBSD サーバー構築時、OSをインストールしたあと継続して行う初期設定時に、初期グループ、初期アカウントを設定してていたため、追加ユーザー登録は adduser で、追加グループ登録という作業はほぼ発生せず、必要な場合は /etc/group を直接編集で済ませるため、それ以外のコマンドを特に必要としていなかった ということが背景です。複数ユーザーを一度にまとめて登録する機会はあるものの、adduser コマンドはバッチでも対話型でも動きますからね。
FreeBSD11を試そうとして、freebsd.org が公開してくれている VM イメージを直接利用できれば楽では?と思いつきました。VirtualBox用イメージをダウンロードして VirtualBox で立ち上げてみると、本当にな〜んにも設定されていない素のまま。/etc/rc.conf が無いので、コンソールからログインしても、ネットワークさえ使えない!
一つ一つ手で設定して行くのは困りませんが、Raspberry Pi2 も FreeBSD で動かす予定なので、この際、バッチファイルを一発叩いて何度かリブートすれば、私仕様のFreeBSD サーバー構築が終わるようなコマンドファイルを作ろうかと考え始めました。
まとまったコマンドファイル作成は先になるとしても、インタラクティブモードではなく、ユーザー登録やグループ登録、inetd.conf の編集など全部バッチファイルでやってみようとトライ開始。
まずは、自分ユーザーアカウントの登録。これは adduser で出来るのですけど、staff グループ以外のユーザーグループを作ろうとしたところ、(今までエディタで直接 /etc/group を編集していたので)グループ登録コマンドが見つからない!staff グループだけでもいいのですが、後々メーリングリストなどのネットワークサービスプログラムを動かそうとするとそれらのデータは staff とは別けておきたいわけで、staff グループ以外のグループも必要。ユーザー登録が adduser なので、addgroup が(昔は)あったと思ったんですけど、FreeBSD11 では存在しない!
echo "users:*:1001:" >> /etc/group
と強制的にファイルに付加してもいいのですけど、登録コマンドがあるならそれを使いたいと探し回っていると、pw というコマンドが見つかりました。pw という名前から、最初は /etc/passwd だけに関与するコマンドかと思っていたら、group も守備範囲だそうです。
pw で新規グループを作る
pw groupadd -n <グループ名> -g <グループID>
という書式で新規グループを追加できます。
中途半端なグループIDを取られても困るので、-g 1001 と決め撃ちします。
pw groupadd -n users -g 1001
書式さえわかってしまえば簡単。
pw で新規ユーザーを追加する
adduser でユーザー登録しようと考えていたのですが、pw で一貫性を持たせる方が良さそうなので、pw useradd で登録することにしました。
書式は、
pw useradd -n <my_name> -c "First Last" -g users -G wheel -G staff -s /bin/tcsh -u 1001 -w yes -m -p "dd-mmm-yyyy"
という感じ。オプションは他にもありますが、自分のアカウントはこれらのオプションで追加しました。
- -n <登録するアカウント>
- -c “Aomori Ringo ” で囲んでフルネーム
- -g <プライマリグループ> これがデフォルトのグループになります。
- -G <付加グループ> 管理者としても使うので、wheel と staff にも登録しておきます。wheel を登録しないと、su コマンドで管理者になれません。
- -s ログインシェル sh,csh,tcsh から選択します。
- -w yes を指定すると、初期パスワードがアカウント名と同じになります。
- -m は $HOME を自動作成するためのオプション
- -p “dd-mmm-yyyy” は初回ログイン時にパスワード変更を促すために指定しました。
上で -w yes を選択した為、パスワードとアカウントが同じになって長時間放置すると危険です。-p dd-mmm-yyyy をコマンド発行日にしておくと、一度はアカウント名と同じパスワードでログインできますが、その場でパスワードを再設定するように求められます。
次が実際のコマンド。
pw useradd -n apple -c "Aomori Ringo" -g users -G wheel -G staff -s /bin/tcsh -u 1001 -w yes -m -p "04-Nov-2016"
これで、ユーザー登録できました。
まとめ
FreeBSD11 で対話型コマンドを使わず、バッチコマンドを使ってアカウントとグループ管理をするには pw コマンドを使います。