ホームディレクトリを自動で作成したい

古きよき /etc/passwd

adduserrmuser でユーザーのエントリだけでなく、ホームディレクトリも作ったり消したり、いっしょにやってくれて便利だ。 ホームディレクトリの準備は、ディレクトリを作成するだけでなく、スケルトディレクトリの内容をコピーしてくるところまである。 それが pw コマンドにくっついてしまっているのが /etc/passwd 以外を利用したい場合に面倒なところである。

LDAP とか AD をユーザー認証に使っている人はどうしているのか

LDAP とか Active Directory でユーザー認証しようという話って、認証するまでの話ばかりで 「ホームディレクトリをどうやって用意するか」という話がなおざりにされている気がしているのだけど どうなんだろう。 手作業でホームディレクトリを作成してスケルトディレクトリの内容をコピーしてもいいし、 それをシェルスクリプトにして自動化してもいいんだけど、なんかこうもうちょっとうまくやれないかという気分になる。

ログイン時に自動でホームディレクトリを用意する

そういう時はだいたい同じようなことを考えている人がいて、FreeBSDports&packages にも入っていることが多いよ というわけで探してみる。

pam_mkhomedir

名前からいかにもなのが pam_mkhomedir で、 これを /etc/pam.d の下に仕込んでおくと、ログイン時にホームディレクトリがなかったら自動で作成してくれる。 /etc/pam.d/system あたりに

session        required         pam_mkhomedir.so

という行を session セクションの終わりに足しておけばよい。

pam_winbind

Samba についてくる pam_winbind.so にも mkhomedir というオプションがあって、使ったことはないけれども下記のように書けるはず。

session        required         pam_winbind.so  mkhomedir

ZFS を活かしたい

でもさあ、せっかく zfs を使っているのだから、1ユーザー 1 (or more) ファイルシステムで使いたいではないですか。 そうすると、pam_mkhomedir も pam_winbind もちょっと使えない。 ではまた手動とかそういうのに戻るのかというとそれもなあと思っていた。

Automatic ZFS Home Directories on FreeBSD

そんなことを考えていたら、ひょんなことで https://github.com/fyrkat/zfsroot というものを見つけた。 なんと、FreeBSD で samba4 を使って Active Directory でユーザー認証して、 ZFS を使ってユーザーごとにファイルシステムを作成するという、 私の要件にどんぴしゃなものである。

ということで、ここから zfs-mkhomedir を拝借して、smb4.confpam.d/xdm に だいたい書かれている通りに仕込んだ。 pam.d/system の方に仕込むべきだったかもしれないが、まあそこはそれ。 あと、上記ページでは /home/DOMAIN/USER の形式を推しているが、 大規模サイトではそういう運用がよさそうだが、ご家庭で複数ドメイン運用なんてことは まずなさそうなので /home/USER 形式に変更してある。