FreeBSD13でのよくある設定集
FreeBSD 13.0-RELEASE環境におけるよく設定するような内容についてまとめる。 本記述は13.0-R時点での内容であるが、13.0-Rがリリースされたあとも調整する。
インストール および 初期設定 が完了しているものとするが、そう極端に依存はしてないはずである。
都度対応ケース
ユーザーおよびグループの追加
- 実行頻度: ユーザーおよびグループを追加したいと思った都度。
- いわゆるユーザーアカウントの管理をどうするかについてはここでは問わない。
- 管理ポリシーを決めた上で運用する際の手順をまとめる。
- ports/pkgシステムで追加されるユーザーおよびグループについて以下のファイルを参照すること(デフォルト設定)。
/usr/ports/UIDs
/usr/ports/GIDs
- もちろん事前に作成してしまってもかまわない(UIDを他の環境に合わせるなど)。
本設定においてはいくらか前提条件(/home がパーティションされてる)があるので留意すること。
ユーザーの追加
- ユーザー設定に必要なパラメータは以下の通り。
- ユーザー名
- ユーザーID
- グループ名(事前に設定しておくこと)
ログインシェルは /etc/shells ファイル内のリストから設定すること。
pw useradd ユーザー名 -u ユーザーID -g グループ名 -c "名前" -s ログインシェル
zfs create zroot/home/ユーザー名
chown ユーザー名:グループ名 /home/ユーザー名
- ここではホームディレクトリは作成しない。別途ZFSパーティションを切るものとする。
この時パスワードは無効になっている(パスワードフィールドが *)。
セカンダリグループを加えたい場合は -G オプション(複数指定はカンマ区切り)を指定すること。
- よく使われるセカンダリグループは以下の通り。
wheel: ルートになれるユーザー(管理者)が所属するグループ
operator: 再起動等のサーバーの操作ができるユーザー(オペレーター)が所属するグループ
dialer: シリアル通信したいユーザーが所属するグループ
後から修正したい場合は pw usermod を使う。
pw usermod ユーザー名 -G wheel,operator
パスワードの設定
パスワードは例えば makepasswd --chars=パスワード長 でランダムなパスワードを決める。
passwd ユーザー名
パスワードの無効化
pw usermod ユーザー名 -w no
グループの追加
- グループ設定に必要なパラメータは以下の通り。
- グループ名
- グループID
pw groupadd グループ名 -g グループID
SASL認証におけるユーザーの追加
- 実行頻度: SASL認証対象のユーザーを追加したいと思った都度。
- いわゆるレルムとの相関についてはここでは問わない。
- 本サービスを利用する側の運用ポリシーを決めた上で作業すること。
なおユーザー user@domain と、ユーザー user・レルム domain は扱いが違うので注意。
上位サービスによっては user@domain を user・domain に分解することがあるが、それはそっち側の話となる。
レルムを指定しない場合 hostname が指定された物として処理されるが、これが上位サービスから認識されるかは別の話になる。
SASLユーザーの追加
saslpasswd2 -c ユーザー
saslpasswd2 -c -u レルム ユーザー
SASLユーザーのパスワード変更
saslpasswd2 ユーザー
saslpasswd2 -u レルム ユーザー
SASLユーザーの一覧
sasldblistusers2
SASLユーザーの削除
saslpasswd2 -d ユーザー
saslpasswd2 -d -u レルム ユーザー
SASLユーザーの検証
testsaslauthd -u ユーザー名 -p パスワード
testsaslauthd -u ユーザー名 -p パスワード -r レルム
使用したい一回だけ設定すればいいもの
SASL認証サーバー
- 実行頻度:セットアップしたいと思った1回だけ。再起動不要。
- 認証のバックエンドはSASLデータベース、OS(PAM)、LDAP等選べるが、組み合わせての選択はできない。
- 今回はSASLデータベースによりOSのアカウントとは独立して認証を運用する。
- またSASLデータベースのバックエンドとしてナウでヤングなLMDBを採用する。
- SASL認証サーバーを使う場合、認証メカニズムは非暗号化パスワードしか扱えない点に注意。
PLAIN
LOGIN
- SYSLOGについてのメモ。
- いわゆるファシリティAUTHで出力される。
アイデント名は saslauthd か pwcheck である。
saslauthd -+- sasldb -+- BDB1 | +- BDB ※BDB5のこと | +- GDBM | +- LMDB +- getpwent -+- /etc/master.passwd + -kerberos5 +- pam -+- /etc/pam.d に設定に準拠 +- rimap +- ldap
/etc/make.conf
security_cyrus-sasl2_SET= LMDB LOGIN PLAIN
security_cyrus-sasl2_UNSET= OTP CRAM NTLM DIGEST SCRAM
security_cyrus-sasl2_UNSET+= BDB BDB1 ANONYMOUS ALWAYSTRUE AUTHDAEMOND
security_cyrus-sasl2_UNSET+= OBSOLETE_CRAM_ATTR OBSOLETE_DIGEST_ATTR
security_cyrus-sasl2-saslauthd_SET= LMDB
security_cyrus-sasl2-saslauthd_UNSET= BDB BDB1 HTTPFORM OPENLDAP OPENLDAP_SASL
インストール
cd /usr/ports/security/cyrus-sasl2-saslauthd
make install clean
sysrc saslauthd_enable="YES"
sysrc saslauthd_flags="-a sasldb"
service saslauthd start
デバッグメモ
認証動作に不良が見られる場合は以下の手順でデバッグすること。
saslauthd -a sasldb -d でデバッグモードで起動する。
testsaslauthd -u ユーザー名 -p パスワード でテストする。
testsaslauthd -u ユーザー名 -r レルム -p パスワード でテストする。
testsaslauthd を実行すると必ず saslauthd に接続するので、フロント側の切り分けができる。
また、saslauthd のデバッグログを読めば、バックエンド側の切り分けができる。
究極的には ktrace(1) / kdump(4) コマンドを使用して、アクセスしているファイルを確認する。
- これはファイルにアクセスできる・できないのエラー表示が無いためである。
- レルムとの相互関係についてはSASL認証をする上位サーバーアプリの振る舞いにもよるので、ここでは以上とする。
DNSキャッシュサーバーの運用
- 実行頻度:セットアップしたいと思った1回だけ。再起動不要。
- 自前でDNSキャッシュサーバー(フルリゾルバ)を運用したい場合の設定。
- デフォルトでお堅い設定なので若干緩くする。
具体的には、デフォルトで dig +trace 使えなくなるのだが、使えるように設定する。
access-control では allow の代わりに allow_snoop を有効にすると良い。
/etc/unbound/conf.d/local.conf
server: prefetch: yes rrset-cache-size: 64m rrset-roundrobin: yes access-control: 127.0.0.1/8 allow_snoop
準備
sysrc local_unbound_enable="YES"
service local_unbound setup
service local_unbound start
/etc/resolv.conf
以下の2行が追加されるので整理する。具体的には古い nameserver の指定を消す、options に組み込むなどである。
nameserver 127.0.0.1 options edns0
今時は edns0 オプションの指定をしなくても動くとのことで、消してしまっても問題無い。
シリアルコンソールを追加する
- 実行頻度:セットアップしたいと思った1回だけ。要再起動。
ビデオコンソール(vidconsole)と共にシリアルコンソール(comconsole)でも操作したい場合の設定。
/bootdir/boot.config
以下の内容のファイルを作成する。
-D
/boot/loader.conf
以下の内容をファイルに追加する。
boot_multicons="YES"
シリアルコンソールでの操作が遅いと思ったら comconsole_speed="115200" も追加する。その際通信条件も変更すること。
複数のシリアルポートがあって、どれか選択したい場合は hint.uart.n.flags (n≧0)を設定することで制御する。
使わないポートに対しては 0x0 を、使うポートには 0x10 を設定する。
この辺りの詳細はマニュアルを参照のこと。