systemd-homed

提供: ArchWiki
2020年3月18日 (水) 08:11時点におけるKusakata (トーク | 投稿記録)による版 (ページの作成:「{{lowercase title}} Category:セキュリティ en:Systemd-homed {{Related articles start}} {{Related|fscrypt}} {{Related|セキュリティ}} {{Related|PAM}} {{R…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

関連記事

systemd-homed は現在のシステム構成に依存しないポータブルなユーザーアカウントを提供する systemd サービスです。

ポータビリティを実現するために、systemd-homed は全てのユーザー関連情報をストレージメディアに移動して、可能であれば暗号化を行い、ユーザーに関する署名済み情報 (パスワードやユーザーが属するグループ、UID/GID、その他 / に散在する情報) を含む ~/.identity ファイルを作成します。

ポータブルなホームディレクトリを可能にするだけではなく、ログイン時に /home を暗号化しシステムの停止時にフォルダに施錠するという管理を自動化することでセキュリティも確保されます。

インストール

systemd-homedsystemd に含まれています。

ユーティリティ

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
ノート: homectl はグループの作成・削除は管理しません。古典的なツールを使ってください。
警告: ~/.identity ファイルは署名されるためテキストエディタを使って直接編集してはありません。署名が破壊され不正なファイルとなってしまいます。編集するときは homectl update --identity=/path/to/.identity を使ってください。

userdbctl

古典的な Unix によるユーザー管理と systemd-homed によるユーザー管理、両方によるユーザー・グループ・グループ属性を調査するための問い合わせツール。

ストレージ方式

ディレクトリまたは btrfs サブボリューム

ユーザーのホームディレクトリは /home/user.homedir に保存され、ログイン時にバインドマウントを使って /home/user にマウントされます。この方式では暗号化は行われません。 この方式を使う際は --storage=directory または --storage=subvolumehomectl に指定してください。

fscrypt ディレクトリ

ヒント: fscrypt をサポートしているファイルシステムには ext4F2FS があります。

上記の方法と同じようにユーザーのホームディレクトリが保存されますが、ファイルシステムネイティブの暗号化が使われます。この方式を使う場合は --storage=fscrypthomectl に指定してください。

LUKS ホームディレクトリ

ユーザーのホームディレクトリはループバックファイルあるいはリムーバルメディアの LUKS ボリューム内の Linux ファイルシステムに保存されます。この方式を使う際は --storage=lukshomectl に指定してください。

リムーバルメディアを使う場合は以下の条件を満たす必要があります:

  • イメージには GPT パーティションテーブルが必要です。現在のところ、そのパーティションひとつだけで、パーティションのタイプが UUID 773f91ef-66d4-49b5-bd83-d683bf40ad16 である必要があります。また、パーティションのラベルがユーザーの名前でなくてはなりません。
  • パーティションには LUKS2 ボリュームが必要で、ラベルがユーザー名と一致している必要があります。LUKS2 ボリュームには systemd-homed タイプの LUKS2 トークンフィールドが必要です。このトークンの JSON データには base64 でエンコードされたデータを含むレコードフィールドが必要です。このデータは JSON のユーザーレコードであり、~/.identity と同じようにシリアライゼーションされています。このトークンの JSON データには iv フィールドも必要で、暗号化のための base64 でエンコードされたバイナリ初期化ベクタを記述します。LUKS2 ボリュームが使用するのと同じ暗号化が使われ、同じボリュームキーで解錠されますが、自己の IV を使います。
  • LUKS2 ボリュームの中は ext4, btrfs, XFS のいずれかの Linux ファイルシステムである必要があり、ファイルシステムのラベルはユーザー名でなければなりません。
  • ファイルシステムにはユーザーと同じ名前のディレクトリが必要です。このディレクトリがログイン時にユーザーのホームディレクトリになります。他のストレージ方式と同じように ~/.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
ヒント: オプションについて詳しくは pam_systemd_home(8) を参照。

以下は 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

参照