古きよき /etc/passwd
adduser
と
rmuser
でユーザーのエントリだけでなく、ホームディレクトリも作ったり消したり、いっしょにやってくれて便利だ。
ホームディレクトリの準備は、ディレクトリを作成するだけでなく、スケルトンディレクトリの内容をコピーしてくるところまである。
それが pw
コマンドにくっついてしまっているのが /etc/passwd
以外を利用したい場合に面倒なところである。
LDAP とか AD をユーザー認証に使っている人はどうしているのか
LDAP とか Active Directory でユーザー認証しようという話って、認証するまでの話ばかりで 「ホームディレクトリをどうやって用意するか」という話がなおざりにされている気がしているのだけど どうなんだろう。 手作業でホームディレクトリを作成してスケルトンディレクトリの内容をコピーしてもいいし、 それをシェルスクリプトにして自動化してもいいんだけど、なんかこうもうちょっとうまくやれないかという気分になる。
ログイン時に自動でホームディレクトリを用意する
そういう時はだいたい同じようなことを考えている人がいて、FreeBSD の ports&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.conf
と pam.d/xdm
に
だいたい書かれている通りに仕込んだ。
pam.d/system
の方に仕込むべきだったかもしれないが、まあそこはそれ。
あと、上記ページでは /home/DOMAIN/USER の形式を推しているが、
大規模サイトではそういう運用がよさそうだが、ご家庭で複数ドメイン運用なんてことは
まずなさそうなので /home/USER 形式に変更してある。