「Systemd-homed」の版間の差分
細 (→トラブルシューティング: リンクを修正) |
(→ヒントとテクニック: 同期) |
||
118行目: | 118行目: | ||
== ヒントとテクニック == |
== ヒントとテクニック == |
||
− | |||
=== Forget key on suspend === |
=== Forget key on suspend === |
||
124行目: | 123行目: | ||
{{Warning|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.}} |
{{Warning|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 {{ic|suspend}} option can be used with {{ic|pam_systemd_home.so}} entries in the files in {{ic|/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 |
+ | The {{ic|suspend}} option can be used with {{ic|pam_systemd_home.so}} entries in the files in {{ic|/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 {{man|8|pam_systemd_home}} and the [http://www.linux-pam.org/Linux-PAM-html/Linux-PAM_SAG.html Linux-PAM System Administrators' Guide]{{Dead link|2022|09|23|status=404}} for more details. |
=== SSH remote unlocking === |
=== SSH remote unlocking === |
||
− | ''systemd-homed'' encrypts your home directory using your password, so SSH configured for public key authentication cannot mount it or read {{ic|authorized_keys}}. A possible solution is to add authorized keys to your user record and require both public key and password for authentication. Add the following to {{ic|sshd_config}}: |
+ | ''systemd-homed'' encrypts your home directory using your password, so SSH configured for public key authentication cannot mount it or read {{ic|authorized_keys}}. A possible solution is to add authorized keys to your user record and require both public key and password for authentication. Add the following to {{ic|/etc/ssh/sshd_config}}: |
+ | {{hc|/etc/ssh/sshd_config| |
||
− | AuthenticationMethods publickey,password |
||
+ | PasswordAuthentication yes |
||
− | AuthorizedKeysCommand /usr/bin/userdbctl ssh-authorized-keys %u |
||
+ | PubkeyAuthentication yes |
||
− | AuthorizedKeysCommandUser root |
||
+ | AuthenticationMethods publickey,password |
||
+ | AuthorizedKeysCommand /usr/bin/userdbctl ssh-authorized-keys %u |
||
+ | AuthorizedKeysCommandUser root |
||
+ | }} |
||
+ | Update your user record with your authorized keys while the user is unlocked using: |
||
− | Make sure that you have not disabled password authentication: |
||
+ | # homectl update ''username'' --ssh-authorized-keys=@/path/to/mounted/home/.ssh/authorized_keys |
||
− | #PasswordAuthentication yes |
||
− | |||
− | Update your user record with your authorized keys using: |
||
− | |||
− | # homectl update ''username'' --ssh-authorized-keys=@/path/to/.ssh/authorized_keys |
||
From now on, SSH will ask you to enter your password after completing key-based authentication. ''systemd-homed'' will use it to unlock and mount your home directory. |
From now on, SSH will ask you to enter your password after completing key-based authentication. ''systemd-homed'' will use it to unlock and mount your home directory. |
||
148行目: | 147行目: | ||
If you need to mount a ''systemd-homed''-encrypted directory from a rescue disk or another machine, you will need to decrypt the directory outside of the ''systemd-homed'' framework. You may wish to keep a text file or script of this solution from the [https://bbs.archlinux.org/viewtopic.php?id=258152 forums] on your rescue disk for emergencies: |
If you need to mount a ''systemd-homed''-encrypted directory from a rescue disk or another machine, you will need to decrypt the directory outside of the ''systemd-homed'' framework. You may wish to keep a text file or script of this solution from the [https://bbs.archlinux.org/viewtopic.php?id=258152 forums] on your rescue disk for emergencies: |
||
− | # losetup -fP ''username''.home |
+ | # losetup -fP --show ''username''.home |
# cryptsetup open /dev/''loopXpY'' ''mappername'' |
# cryptsetup open /dev/''loopXpY'' ''mappername'' |
||
# mount /dev/mapper/''mappername'' ''/mnt/mountpoint'' |
# mount /dev/mapper/''mappername'' ''/mnt/mountpoint'' |
||
158行目: | 157行目: | ||
* {{ic|''mappername''}} is whatever alias you decide to adopt for the mapped device, e.g. {{ic|user_oldhome}} |
* {{ic|''mappername''}} is whatever alias you decide to adopt for the mapped device, e.g. {{ic|user_oldhome}} |
||
* {{ic|''/mnt/mountpoint''}} is wherever you want to mount your decrypted home directory |
* {{ic|''/mnt/mountpoint''}} is wherever you want to mount your decrypted home directory |
||
+ | |||
+ | === 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. |
||
== トラブルシューティング == |
== トラブルシューティング == |
2022年10月16日 (日) 22:03時点における版
systemd-homed(8) は、現在のシステム構成に依存しないポータブルなユーザーアカウントを提供する systemd サービスです。
ポータビリティを実現するために、systemd-homed は全てのユーザー関連情報をストレージメディアに移動して、オプションで暗号化を行い、ユーザーに関する署名済み情報 (パスワードやユーザーが属するグループ、UID/GID、その他 /
に散在する情報) を含む ~/.identity
ファイルを作成します。
ポータブルなホームディレクトリを可能にするだけではなく、自動的にログイン時にホームディレクトリの暗号化を管理し、システムのサスペンド時にフォルダにロックすることでセキュリティも確保されます。
インストール
systemd-homed は systemd に含まれています。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
に設定されます。ストレージ方式は以下の順番で選択されます:
luks
: サポートされている場合。subvolume
: LUKS がサポートされておらず、サブボリュームはサポートされている場合。directory
: 上記のいずれもサポートされておらず、手動で他のオプションも指定されていない場合。
LUKS 方式でのイメージのパスは、/home/username.home
に設定されます。ディレクトリ方式でのディレクトリのパスは、/home/username.homedir
に設定されます。
userdbctl
古典的な UNIX のユーザー管理機構と systemd-homed の両方によって提供されているユーザー、グループ、グループのメンバーを調査するためのクエリツール。
ストレージ方式
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
ファイルにユーザーレコードのコピーを保持します。
fscrypt ディレクトリ
上記の方法と同じようにユーザーのホームディレクトリが保存されますが、ファイルシステムネイティブの暗号化が使われます。この方式を使う場合は --storage=fscrypt
を homectl に指定してください。
ディレクトリまたは btrfs サブボリューム
ユーザーのホームディレクトリは /home/username.homedir
に保存され、ログイン時にバインドマウントを使って /home/username
にマウントされます。この方式では暗号化は行われません。 この方式を使う際は --storage=directory
または --storage=subvolume
を homectl に指定してください。
CIFS サーバー
この方式では、ホームディレクトリはログイン時に CIFS (Common Internet File System) サーバからマウントされます。この CIFS は Samba プロトコルによって実装されています。この方式を使う際は --storage=cifs
をhomectlに指定して下さい。また、ローカルパスワードが 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
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 remote unlocking
systemd-homed encrypts your home directory using your password, so SSH configured for public key authentication cannot mount it or read authorized_keys
. A possible solution is to add authorized keys to your user record and require both public key and password for authentication. Add the following to /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
Update your user record with your authorized keys while the user is unlocked using:
# homectl update username --ssh-authorized-keys=@/path/to/mounted/home/.ssh/authorized_keys
From now on, SSH will ask you to enter your password after completing key-based authentication. systemd-homed will use it to unlock and mount your home directory.
Mounting encrypted home directory for rescue
If you need to mount a systemd-homed-encrypted directory from a rescue disk or another machine, you will need to decrypt the directory outside of the systemd-homed framework. You may wish to keep a text file or script of this solution from the forums on your rescue disk for emergencies:
# losetup -fP --show username.home # cryptsetup open /dev/loopXpY mappername # mount /dev/mapper/mappername /mnt/mountpoint
where,
username.home
is the file in the/home
directory with your username and the .home extension as its nameloopXpY
is the device in the/dev
directory with the loop number of the loopback device created in the prior step and the partition number of the relevant partition, probably/dev/loop0p1
mappername
is whatever alias you decide to adopt for the mapped device, e.g.user_oldhome
/mnt/mountpoint
is wherever you want to mount your decrypted home directory
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/profile
で umask が設定されている場合、homectl によって設定された独自の umask は無視されます。systemd issue 23007 を見てください。
これを解決するには、ログインシェルのスタートアップファイル (例えば ~/.bash_profile
や ~/.zprofile
) で umask を設定してください。