b-shock. Fortress

FreeBSDでUserminをセットアップ

追記(2018/10/02)
リバースプロキシを併用した新しい手順の記事もあり。

ユーザー自身にパスワードを設定してもらう為に、FreeBSDサーバに Userminをセットアップした。

最初はパスワード変更ツールをPHPで書いてて、動くものが一旦は出来たのだが、Apacheの 実行ユーザー(FreeBSDではwww)をsudoerに加えてpwコマンドのみ実行を許す実装しか思いつかず (もちろん、手間をかければなくはないんだけど)、このままでは危険と判断した。 PHPにはpecl-pamというPECLモジュールもあるが、こちらも 本質的に同様の問題を抱えており、これを利用した実装が許される状況は 基本的にはない のでは ないかと思われる。w

Usermin自体はrootで実行されるが(パスワードの変更を行う為に、そうせざるを得ないのだが)、 パスワード変更機能のみをroot権限で実行する方がまだマシと判断した。

以下、実際の手順。
全て、suした後にroot権限で。

パッケージインストール

1
2
pkg install usermin
sysrc usermin_enable="YES"

セットアップスクリプト

1
2
cd /usr/local/lib/usermin
./setup.sh

対話形式で設問に回答すると、 /usr/local/etc/usermin が作成される。

設定ファイルを編集

1
2
cd /usr/local/etc/usermin
vi miniserv.conf

以下の項目は修正必須。

  • 何故かSSLオフがデフォルトだが、利用目的と矛盾するんじゃないの?
  • SSL3どころかSSL2も許可できるようになってて、さすがにデフォルトではオフになってるが、 今後オンにすることはあり得ないのでは?w
  • rootの接続は当然拒否すべき。デフォルトでそうなっていないのはどうなのよ?

以下、実行。

1
echo 'user: procmail changepass' > webmin.acl
  • デフォルトで非常にたくさんの設定が行える様に設定されているが、 一般ユーザーに開放すると危険な設定項目が満載。最低限のものにするべきではないか?
  • procmailが含まれているのは、ユーザー自身がメール転送の設定を行う想定で。 procmailを使用していないなら、当然この項目も削除していい。

証明書更新

Let’s Encryptによる example.com というコモンネームの証明書があると仮定して。
以下、実行。

1
2
mv miniserv.pem miniserv.pem.org
cat /usr/local/etc/letsencrypt/live/example.com/fullchain.pem /usr/local/etc/letsencrypt/live/example.com/privkey.pem > miniserv.pem

また、Let’s Encryptを運用しているなら、通常はcertbot renewを含んだシェルスクリプト等、 何かしら証明書の自動更新を構築しているはず。
Userminはcertbotが生成した証明書をそのままでは利用できないので、certbot renewの実行後に 上記コマンド(証明書の結合)も実行し、なおかつUsermin自体を再起動する必要があるだろう。

起動

以下、実行。又はサーバをリブート。

1
service usermin start

以上。