systemd-homed

提供: ArchWiki
2022年10月17日 (月) 12:25時点におけるAshMyzk (トーク | 投稿記録)による版 (→‎LUKS ホームディレクトリ: 同期)
ナビゲーションに移動 検索に移動

関連記事

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

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

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

インストール

systemd-homedsystemd に含まれています。pambase パッケージのバージョン 20200721.1-2 以降には、systemd-homed のユーザーセッションで必要となる PAMの設定 が付属しています。

ただし、systemd-homed.service起動有効化する必要があります。

ユーティリティ

homectl

homectl は、homed で使用する主なユーティリティです。このユーティリティを使えば、ユーザ、ホームディレクトリ、systemd-homed(8) サービスによって管理されている ~/.identity ファイルを作成、更新、調査することができます。

homectl の最も単純な使用例は:

# homectl create username

このコマンドはユーザを作成します。ユーザ名は username で、UID は 60001–60513 の範囲で使用されていないものになります。さらに、同じ名前のグループを作成し、GID は先の UID と同じになり、作成したユーザはこのグループに追加されます。そして、ユーザのデフォルトシェルは /bin/bash に設定されます。

ホームディレクトリのマウントポイントは /home/username に設定されます。ストレージ方式は以下の順番で選択されます:

  1. luks: サポートされている場合。
  2. subvolume: LUKS がサポートされておらず、サブボリュームはサポートされている場合。
  3. directory: 上記のいずれもサポートされておらず、手動で他のオプションも指定されていない場合。

LUKS 方式でのイメージのパスは、/home/username.home に設定されます。ディレクトリ方式でのディレクトリのパスは、/home/username.homedir に設定されます。

ノート: homectl は、systemd-homed によって管理されているユーザの名前と ID に一致するユーザ以外は、グループの作成や削除を管理しません。
警告: ~/.identity ファイルは署名されているため、テキストエディタを使って直接編集してはいけません。署名が破壊され不正なファイルとなってしまいます。編集するときは homectl update --identity=/path/to/.identity を使ってください。

userdbctl

古典的な UNIX のユーザー管理機構と systemd-homed の両方によって提供されているユーザー、グループ、グループのメンバーを調査するためのクエリツール。

ストレージ方式

LUKS ホームディレクトリ

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

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

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

fscrypt ディレクトリ

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

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

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

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

CIFS サーバー

この方式では、ホームディレクトリはログイン時に CIFS (Common Internet File System) サーバからマウントされます。この CIFS は Samba プロトコルによって実装されています。この方式を使う際は --storage=cifshomectlに指定して下さい。また、ローカルパスワードが CIFS サービスへのログイン情報としても使われます。

ユーザーレコードの属性

ユーザーレコードを見るには次のようにします:

# homectl inspect username

また、変更、追加したい場合は次のようにします:

# homectl update username --property=VALUE

オプションの詳細は homectl(1) を参照してください。

ユーザを管理する

作成

LUKS の暗号化を使ってユーザを作成する:

# homectl create username --storage=luks

fscrypt の暗号化を使ってユーザを作成する (fscrypt がファイルシステムで有効化されていることを確認してください):

# homectl create username --storage=fscrypt

特定の UID、シェル、グループのユーザを作成する:

# homectl create username --shell=/usr/bin/zsh --uid=60100 --member-of=wheel,adm,uucp

他のオプションは homectl(1) § USER RECORD PROPERTIES で見られます。

削除

警告: ユーザの削除は即座に実行されます。注意してください。

複数のユーザを同時に削除することができます。以下のコマンドを root として実行することで、2つのユーザを即座に削除できます:

# homectl remove username username2

ヒントとテクニック

Forget key on suspend

警告: Mistakes in PAM configuration can break the system authorization up to not being able to login even as root. Backing up existing configuration files is recommended before making any changes.

The suspend option can be used with pam_systemd_home.so entries in the files in /etc/pam.d/ to enable forget key on suspend. No session manager at the moment supports this feature. Furthermore, TTY sessions do not support the reauthentication mechanism. So, when session managers start supporting this feature, the suspend option should only be enabled for them. Read pam_systemd_home(8) and the Linux-PAM System Administrators' Guide[リンク切れ 2022-09-23] for more details.

SSH リモートアンロック

systemd-homed はパスワードを使用してホームディレクトリを暗号化します。なので、公開鍵認証で設定された SSH ではホームディレクトリをマウントできず、authorized_keys も読み込めません。可能な解決策としては、authorized keys をあなたのユーザレコードに追加し、認証のために公開鍵とパスワードの両方を要求するというものがあります。以下を /etc/ssh/sshd_config に追加してください:

/etc/ssh/sshd_config
PasswordAuthentication yes
PubkeyAuthentication yes
AuthenticationMethods publickey,password
AuthorizedKeysCommand /usr/bin/userdbctl ssh-authorized-keys %u
AuthorizedKeysCommandUser root

ユーザがアンロックされている間、以下を使って authorized keys でユーザレコードを更新してください:

# homectl update username --ssh-authorized-keys=@/path/to/mounted/home/.ssh/authorized_keys

これで、鍵による認証を終えた後に SSH はあなたのパスワードを尋ねてくるようになります。systemd-homed はそのパスワードをホームディレクトリのマウントのために使用します。

暗号化されたホームディレクトリをレスキュー時にマウントする

systemd-homed で暗号化されたディレクトリをレスキューディスクや他のマシンからマウントする必要がある場合、systemd-homed フレームワークの外からそのディレクトリを復号する必要があります。緊急時のためにフォーラムからこの解決策のテキストファイルやスクリプトをレスキューディスクに保存しておくと良いでしょう:

# losetup -fP --show username.home
# cryptsetup open /dev/loopXpY mappername
# mount /dev/mapper/mappername /mnt/mountpoint
  • username.home/home ディレクトリ内にあるファイルです。ファイル名はユーザ名と拡張子 .home です。
  • loopXpY/dev ディレクトリ内のデバイスです。ファイル名は、前のステップで作成したループバックデバイスのループ番号と、関連するパーティションのパーティション番号です (おそらく /dev/loop0p1)。
  • mappername は、マップされたデバイスを受け入れる任意のエイリアスです (例: user_oldhome)。
  • /mnt/mountpoint は、復号されたホームディレクトリをマウントする任意のマウントポイントです。

Setup user with fido2 hmac-secret for authentication and encryption

This setup requires a fido2 security device and ask for a pin to login and decrypt the home directory:

# homectl create username --storage=fscrypt --fido2-device=auto --fido2-with-client-pin=yes --fido2-with-user-presence=no --recovery-key=yes

Setting up a recovery key is recommended in case the device is lost or broken. The recovery key will be used like a password to access the user and files. Instead of using a device pin, it is also possible to ask only for user presence, which requires touching the security device. Currently, homectl also requires the user to set a password as alternative login which also works as a backup secret.

トラブルシューティング

Plasma からログアウトした後もホームディレクトリがアクティブなままになる

Plasma からログアウトした後もアクティブなユーザプロセス (例: dbus-daemon) が残ることがあります。そのようなプロセスがホームディレクトリのアクティブ化解除を妨げてしまいます。

これは、Plasma の systemd スタートアップを有効化することで解決できます。

ユーザマスクが無視される

現在、/etc/profileumask が設定されている場合、homectl によって設定された独自の umask は無視されます。systemd issue 23007 を見てください。

これを解決するには、ログインシェルのスタートアップファイル (例えば ~/.bash_profile~/.zprofile) で umask を設定してください。

参照