systemd-homed
systemd-homed は現在のシステム構成に依存しないポータブルなユーザーアカウントを提供する systemd サービスです。
ポータビリティを実現するために、systemd-homed は全てのユーザー関連情報をストレージメディアに移動して、可能であれば暗号化を行い、ユーザーに関する署名済み情報 (パスワードやユーザーが属するグループ、UID/GID、その他 /
に散在する情報) を含む ~/.identity
ファイルを作成します。
ポータブルなホームディレクトリを可能にするだけではなく、ログイン時に /home
を暗号化しシステムの停止時にフォルダに施錠するという管理を自動化することでセキュリティも確保されます。
目次
インストール
systemd-homed は systemd に含まれています。
ユーティリティ
homectl
homectl を使うことでユーザーを作成・更新・調査して、ホームディレクトリと systemd-homed サービスで管理される ~/.identity
を作成することができます。
最初の空 UID を使用して、'archie' という名前のユーザーを作成 (同じ名前のグループを作成して GID と UID を同じにして archie をグループのメンバーに設定し、デフォルトシェルを /bin/bash
に設定):
# homectl create archie
上記のコマンドでホームディレクトリのマウントポイントは /home/archie
に設定されます。ストレージ方式は次の順番で選択されます (例えば LUKS がサポートされている場合 LUKS が選ばれます): LUKS, サブボリューム, ディレクトリ。LUKS のイメージパスは /home/archie.home
に、ディレクトリのディレクトリパスは /home/archie.homedir
に設定されます。
シェルを zsh に設定してユーザーを作成する例:
# homectl create archie --shell='/usr/bin/zsh'
作成したユーザー 'archie' を 'wheel' グループに追加する場合:
# homectl update archie -G wheel
userdbctl
古典的な Unix によるユーザー管理と systemd-homed によるユーザー管理、両方によるユーザー・グループ・グループ属性を調査するための問い合わせツール。
ストレージ方式
ディレクトリまたは btrfs サブボリューム
ユーザーのホームディレクトリは /home/user.homedir
に保存され、ログイン時にバインドマウントを使って /home/user
にマウントされます。この方式では暗号化は行われません。 この方式を使う際は --storage=directory
または --storage=subvolume
を homectl に指定してください。
fscrypt ディレクトリ
上記の方法と同じようにユーザーのホームディレクトリが保存されますが、ファイルシステムネイティブの暗号化が使われます。この方式を使う場合は --storage=fscrypt
を homectl に指定してください。
LUKS ホームディレクトリ
ユーザーのホームディレクトリはループバックファイルあるいはリムーバルメディアの LUKS ボリューム内の Linux ファイルシステムに保存されます。この方式を使う際は --storage=luks
を homectl に指定してください。
リムーバルメディアを使う場合は以下の条件を満たす必要があります:
- イメージには GPT パーティションテーブルが必要です。現在のところ、そのパーティションひとつだけで、パーティションのタイプが
UUID 773f91ef-66d4-49b5-bd83-d683bf40ad16
である必要があります。また、パーティションのラベルがユーザーの名前でなくてはなりません。
- パーティションには LUKS2 ボリュームが必要で、ラベルがユーザー名と一致している必要があります。LUKS2 ボリュームには systemd-homed タイプの LUKS2 トークンフィールドが必要です。このトークンの JSON データには base64 でエンコードされたデータを含むレコードフィールドが必要です。このデータは JSON のユーザーレコードであり、
~/.identity
と同じようにシリアライゼーションされています。このトークンの JSON データには iv フィールドも必要で、暗号化のための base64 でエンコードされたバイナリ初期化ベクタを記述します。LUKS2 ボリュームが使用するのと同じ暗号化が使われ、同じボリュームキーで解錠されますが、自己の IV を使います。
- ファイルシステムにはユーザーと同じ名前のディレクトリが必要です。このディレクトリがログイン時にユーザーのホームディレクトリになります。他のストレージ方式と同じように
~/.identity
ファイルにユーザーレコードのコピーを保持します。
PAM モジュールの有効化
systemd-homed のユーザーは伝統的な UNIX の NSS データベース (/etc/passwd
, /etc/shadow
, /etc/group
など) にレコードを記録しないため、デフォルトの pam_unix.so
モジュールではログインができません。提供されている PAM モジュールを使う必要があります。
例:
/etc/pam.d/system-auth
#%PAM-1.0 auth sufficient pam_unix.so try_first_pass nullok -auth sufficient pam_systemd_home.so auth optional pam_permit.so auth required pam_env.so auth required pam_deny.so account sufficient pam_unix.so -account sufficient pam_systemd_home.so account optional pam_permit.so account required pam_time.so -password sufficient pam_systemd_home.so password sufficient pam_unix.so try_first_pass nullok sha512 shadow password optional pam_permit.so session required pam_limits.so -session optional pam_systemd_home.so session required pam_unix.so session optional pam_permit.so
例
以下は homectl の使用例です。
fscrypt を使ってユーザー archie を作成
# homectl create archie --storage=fscrypt
UID とシェル、グループを指定してユーザー alan を作成
# homectl create alan --shell=/bin/zsh --uid=1001 -G wheel,storage,games
ユーザーの削除
# homectl remove archie