「Systemd-homed」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎トラブルシューティング: Plasma からログアウトした後も、ホームディレクトリはアクティブな状態を翻訳して追加)
(→‎参照: update TranslationStatus.)
 
(3人の利用者による、間の31版が非表示)
1行目: 1行目:
{{lowercase title}}
+
{{Lowercase title}}
 
[[Category:セキュリティ]]
 
[[Category:セキュリティ]]
 
[[en:Systemd-homed]]
 
[[en:Systemd-homed]]
10行目: 10行目:
 
{{Related articles end}}
 
{{Related articles end}}
   
{{man|8|systemd-homed}} は現在のシステム構成に依存しないポータブルなユーザーアカウントを提供する [[systemd]] サービスです。
+
{{man|8|systemd-homed}} は現在のシステム構成に依存しないポータブルなユーザーアカウントを提供する [[systemd]] サービスです。
   
ポータビリティを実現するために、systemd-homed は全てのユーザー関連情報をストレージメディアに移動して、可能あれば暗号化を行い、ユーザーに関する署名済み情報 (パスワードやユーザーが属するグループ、UID/GID、その他 {{ic|/}} に散在する情報) を含む {{ic|~/.identity}} ファイルを作成します。
+
ポータビリティを実現するために、systemd-homed は全てのユーザー関連情報をストレージメディアに移動して、オプションで暗号化を行い、ユーザーに関する署名済み情報 (パスワードやユーザーが属するグループ、UID/GID、その他 {{ic|/}} に散在する情報) を含む {{ic|~/.identity}} ファイルを作成します。
   
ポータブルなホームディレクトリを可能にするだけではなく、ログイン時に {{ic|/home}} を暗号化しシステムの停止時にフォルダに施錠するという管理を自動化することでセキュリティも確保されます。
+
ポータブルなホームディレクトリを可能にするだけではなく、自動的にログイン時にホームディレクトリの暗号化を管理システムのサスペンド時にフォルダにロックすることでセキュリティも確保されます。
   
 
== インストール ==
 
== インストール ==
   
''systemd-homed'' は {{Pkg|systemd}} に含まれています。{{ic|systemd-homed.service}} を[[起動]]・[[有効化]]してください。また、{{Pkg|pambase}} のバージョン 20200721.1-2 以降には、systemd-homed のユーザーセッションで必要となる [[PAM#設定 | PAMの設定]] が付属しています。
+
''systemd-homed'' は {{Pkg|systemd}} に含まれています。{{Pkg|pambase}} パッケージのバージョン 20200721.1-2 以降には、systemd-homed のユーザーセッションで必要となる [[PAM#設定|PAMの設定]] が付属しています。
   
== ユーティリティ ==
+
== 使い方 ==
   
  +
{{ic|systemd-homed.service}} サービスを [[起動/有効化]] します。
=== homectl ===
 
   
  +
=== ユーティリティ ===
homectl を使うことでユーザーを作成・更新・調査して、ホームディレクトリと {{man|8|systemd-homed}} サービスで管理される {{ic|~/.identity}} を作成することができます。
 
   
  +
==== homectl ====
[https://systemd.io/UIDS-GIDS/ 60001–60513 の範囲で]空きの UID を使用して、'username' という名前のユーザーを作成 (同じ名前のグループを作成して GID と UID を同じにして ''username'' をグループのメンバーに設定し、デフォルトシェルを {{ic|/bin/bash}} に設定):
 
   
  +
''homectl'' は、homed で使用する主なユーティリティです。このユーティリティを使えば、ユーザ、ホームディレクトリ、{{man|8|systemd-homed}} サービスによって管理されている {{ic|~/.identity}} ファイルを作成、更新、調査することができます。
# homectl create username
 
   
  +
''homectl'' の最も単純な使用例は:
上記のコマンドでホームディレクトリのマウントポイントは {{ic|/home/''username''}} に設定されます。ストレージ方式は次の順番で選択されます:
 
   
  +
# homectl create ''username''
# {{ic|luks}}: LUKS がサポートされている場合。
 
# {{ic|サブボリューム}}: LUKS がサポートされておらず、サブボリュームはサポートされている場合。
 
# {{ic|ディレクトリ}}: 上のいずれもサポートされておらず他のマニュアルのオプションでも指定されていない場合。
 
   
  +
このコマンドはユーザを作成します。ユーザ名は ''username'' で、UID は [https://systemd.io/UIDS-GIDS/ 60001–60513 の範囲]で使用されていないものになります。さらに、同じ名前のグループを作成し、GID は先の UID と同じになり、作成したユーザはこのグループに追加されます。そして、ユーザのデフォルトシェルは {{ic|/bin/bash}} に設定されます。
'''LUKS''' のイメージパスは {{ic|/home/''username''.home}} に、'''ディレクトリ'''のディレクトリパスは {{ic|/home/''username''.homedir}} に設定されます。
 
   
  +
ホームディレクトリのマウントポイントは {{ic|/home/''username''}} に設定されます。ストレージ方式は以下の順番で選択されます:
{{Note| '''homectl''' は systemd-homedが管理し該当する名前とユーザーの ID 以外には、グループの作成・削除を管理しません。古典的なツールを使ってください。}}
 
   
  +
# {{ic|luks}}: サポートされている場合。
{{Warning|{{ic|~/.identity}} ファイルは署名されるためテキストエディタを使って直接編集してはありません。署名が破壊され不正なファイルとなってしまいます。編集するときは {{ic|1=homectl update --identity=/path/to/.identity}} を使ってください。}}
 
  +
# {{ic|subvolume}}: LUKS がサポートされておらず、サブボリュームはサポートされている場合。
  +
# {{ic|directory}}: 上記のいずれもサポートされておらず、手動で他のオプションも指定されていない場合。
   
  +
LUKS 方式でのイメージのパスは、{{ic|/home/''username''.home}} に設定されます。ディレクトリ方式でのディレクトリのパスは、{{ic|/home/''username''.homedir}} に設定されます。
=== userdbctl ===
 
   
古典的な UNIX によるユーザー管理[[systemd-homed]]るユーザー管理両方によるユーザー・グループ・グループ属性調査するための問い合わツール
+
{{Note|''homectl'' は、systemd-homed によって管理されているユーザの名前ID一致するユーザ以外は、グループの作成や削除管理しま}}
   
  +
{{Warning|{{ic|~/.identity}} ファイルは署名されているため、テキストエディタを使って直接編集してはいけません。署名が破壊され不正なファイルとなってしまいます。編集するときは {{ic|1=homectl update --identity=/path/to/.identity}} を使ってください。}}
== ストレージ方式 ==
 
   
  +
==== userdbctl ====
=== [[LUKS]] ホームディレクトリ ===
 
   
  +
古典的な UNIX のユーザー管理機構と [[systemd-homed]] の両方によって提供されているユーザー、グループ、グループのメンバーを調査するためのクエリツール。
ユーザーのホームディレクトリはループバックファイルあるいはリムーバルメディアの [[LUKS]] ボリューム内の Linux [[ファイルシステム]]に保存されます。この方式を使う際は {{ic|1=--storage=luks}} を '''homectl''' に指定してください。
 
  +
  +
=== ストレージ方式 ===
  +
  +
==== LUKS ホームディレクトリ ====
  +
  +
ユーザーのホームディレクトリは、ループバックファイルあるいはリムーバルメディア内の暗号化された [[LUKS]] (''Linux Unified Key Setup'') ボリューム内の Linux [[ファイルシステム]]に保存されます。この方式を使う際は {{ic|1=--storage=luks}} を ''homectl'' で指定してください。
   
 
リムーバルメディアを使う場合は以下の条件を満たす必要があります:
 
リムーバルメディアを使う場合は以下の条件を満たす必要があります:
   
* イメージには GPT パーティションテーブルが必要です。現在のところ、そのパーティションひとつだけで、パーティションのタイプ {{ic|UUID 773f91ef-66d4-49b5-bd83-d683bf40ad16}} である必要がありままた、パーティションのラベルユーザーのでなくてはなりません。
+
* イメージには GPT パーティションテーブルが含まれていること。現在のところ、イメージに含まれるパーティションは1つだけである必要がありかつそのパーティションのタイプ UUID は {{ic|773f91ef-66d4-49b5-bd83-d683bf40ad16}} でなければなりませんそのパーティションのラベルユーザ名と同じでなければなりません。
   
* パーティションには LUKS2 ボリュームが必要で、ラベルがユーザー名と一致している必要があります。LUKS2 ボリュームには systemd-homed タイプの LUKS2 トークンフィールドが必要です。このトークンの JSON データには base64 でエンコードされたデータを含むレコードフィールドが必要です。このデータは JSON のユーザーレコードであり、{{ic|~/.identity}} と同じようにシリアライゼーションされています。このトークンの JSON データには iv フィールドも必要で、暗号化のための base64 でエンコードされたバイナリ初期化ベクタを記述し。LUKS2 ボリュームが使用するのと同じ暗号化が使われ、同じボリュームキーで解錠されますが、自己の IV を使います。
+
* パーティションには LUKS2 ボリュームが必要で、ラベルがユーザー名と一致している必要があります。LUKS2 ボリュームには systemd-homed タイプの LUKS2 トークンフィールドが必要です。このトークンの JSON データには base64 でエンコードされたデータを含むレコードフィールドが必要です。このデータは JSON のユーザーレコードであり、暗号化されてはいますが、{{ic|~/.identity}} と同じようにシリアライズ化されています。このトークンの JSON データには iv フィールドも必要で、暗号化のための base64 でエンコードされたバイナリ初期化ベクタが含れていなければなりません。LUKS2 ボリュームが使用するのと同じ暗号化が使われ、同じボリュームキーで解錠されますが、自己の IV を使います。
  +
* LUKS2 ボリュームの中は [[ext4]]、[[btrfs]]、[[XFS]] のいずれかの Linux ファイルシステムである必要があり、ファイルシステムのラベルはユーザー名と同じでなければなりません。
  +
* このファイルシステムにはユーザーと同じ名前のディレクトリが含まれている必要があります。このディレクトリがログイン時にユーザーのホームディレクトリになります。他のストレージ方式と同じように {{ic|~/.identity}} ファイルにユーザーレコードのコピーを保持します。
   
  +
{{Warning| 強制的または予期せぬシャットダウンや停電の場合、ループバックファイルが汚れた状態で残される可能性があり、これによりユーザーが永久にロックアウトされることがあります。詳細は[[# ホームディレクトリが汚い状態にある]]を参照してください。}}
* LUKS2 ボリュームの中は [[ext4]], [[btrfs]], [[XFS]] のいずれかの Linux ファイルシステムである必要があり、ファイルシステムのラベルはユーザー名でなければなりません。
 
   
  +
==== fscrypt ディレクトリ ====
* ファイルシステムにはユーザーと同じ名前のディレクトリが必要です。このディレクトリがログイン時にユーザーのホームディレクトリになります。他のストレージ方式と同じように {{ic|~/.identity}} ファイルにユーザーレコードのコピーを保持します。
 
   
  +
上記の方法と同じようにユーザーのホームディレクトリが保存されますが、ファイルシステムネイティブの暗号化が使われます。この方式を使う場合は {{ic|1=--storage=fscrypt}} を ''homectl'' で指定してください。
=== [[fscrypt]] ディレクトリ ===
 
   
 
{{Tip|fscrypt をサポートしているファイルシステムには [[ext4]] や [[F2FS]] があります。}}
 
{{Tip|fscrypt をサポートしているファイルシステムには [[ext4]] や [[F2FS]] があります。}}
上記の方法と同じようにユーザーのホームディレクトリが保存されますが、ファイルシステムネイティブの暗号化が使われます。この方式を使う場合は {{ic|1=--storage=fscrypt}} を '''homectl''' に指定してください。
 
   
=== ディレクトリまたは [[btrfs]] サブボリューム ===
+
==== ディレクトリまたは Btrfs サブボリューム ====
   
ユーザーのホームディレクトリは {{ic|/home/''username''.homedir}} に保存され、ログイン時にバインド[[マウント]]を使って {{ic|/home/''username''}} にマウントされます。この方式では暗号化は行われません。 この方式を使う際は {{ic|1=--storage=directory}} または {{ic|1=--storage=subvolume}} を '''homectl''' 指定してください。
+
ユーザーのホームディレクトリは {{ic|/home/''username''.homedir}} に保存され、アンック時にバインド[[マウント]]を使って {{ic|/home/''username''}} にマウントされます。この方式では暗号化は行われません。この方式を使う際は {{ic|1=--storage=directory}} または {{ic|1=--storage=subvolume}} を ''homectl'' 指定してください。
   
=== CIFS サーバー ===
+
==== CIFS サーバー ====
   
この方式では、ホームディレクトリはログイン時に CIFS (''Common Internet File System'') サーバからマウントされます。この CIFS は [[Samba]] プロトコルによって実装されています。この方式を使う際は {{ic|1=--storage=cifs}} を'''homectl'''に指定して下さい。また、ローカルパスワードが CIFS サービスへのログイン情報としても使れます。
+
この方式では、ホームディレクトリはログイン時に CIFS (''Common Internet File System'') サーバからマウントされます。この CIFS は [[Samba]] プロトコルによって実装されています。この方式を使う際は {{ic|1=--storage=cifs}} を ''homectl'' コマンドラインで指定して下さい。ユーザのローカルパスワードが CIFS サービスへのログイン使用されます。
   
== ユーザーレコードの属性 ==
+
=== ユーザーレコードの属性 ===
   
 
ユーザーレコードを見るには次のようにします:
 
ユーザーレコードを見るには次のようにします:
87行目: 94行目:
 
オプションの詳細は {{man|1|homectl}} を参照してください。
 
オプションの詳細は {{man|1|homectl}} を参照してください。
   
== ユーザ管理の例 ==
+
=== ユーザ管理する ===
   
=== ユーザーの作成 ===
+
==== 作成 ====
   
LUKS による暗号化を使ってユーザを作成する:
+
LUKS 暗号化を使ってユーザを作成する:
   
 
# homectl create ''username'' --storage=luks
 
# homectl create ''username'' --storage=luks
   
fscrypt を使ってユーザを作成する (ただし、fscript が[[Fscrypt#ファイルシステム| ファイルシステムで有効化]] されているか気付けてください):
+
fscrypt の暗号化を使ってユーザを作成する (fscrypt が[[fscrypt#ファイルシステム|ファイルシステムで有効化されている]]こと確認してください):
   
 
# homectl create ''username'' --storage=fscrypt
 
# homectl create ''username'' --storage=fscrypt
   
UID シェル、グループを指定してユーザを作成する:
+
特定の UID、シェル、グループユーザを作成する:
   
# homectl create ''username'' --shell=/bin/zsh --uid=60100 --member-of=wheel,adm,uucp
+
# homectl create ''username'' --shell=/usr/bin/zsh --uid=60100 --member-of=wheel,adm,uucp
   
他のオプションは {{man|1|homectl|USER RECORD PROPERTIES}} を参照してください
+
他のオプションは {{man|1|homectl|USER RECORD PROPERTIES}} で見られます
  +
{{Note|[[ユーザーとグループ#ユーザー管理]]で説明されている注意点が適用されます: ログインシェルは {{ic|/etc/shells}} にリストされているもののうちの一つでなければなりません。}}
   
=== ユーザーの削除 ===
+
==== 削除 ====
{{Warning|ユーザーの削除は即座に実行されます。注意してください。}}
 
   
  +
{{Warning|ユーザの削除は即座に実行されます。注意してください。}}
複数のユーザーを同時に削除することができます。次のコマンドを実行することで 2 ユーザーが即座に削除されます:
 
  +
  +
複数のユーザを同時に削除することができます:
   
 
# homectl remove ''username'' ''username2''
 
# homectl remove ''username'' ''username2''
   
 
== ヒントとテクニック ==
 
== ヒントとテクニック ==
 
   
 
=== Forget key on suspend ===
 
=== Forget key on suspend ===
   
  +
{{Warning|[[PAM]] の設定を間違えると、システムの認証が壊れてしまい ''root'' にすらログインできなくなる可能性があります。変更を加える前に、既存の設定ファイルをバックアップすることが推奨されます。}}
{{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.}}
 
   
  +
{{ic|/etc/pam.d/}} 内のファイルで {{ic|suspend}} オプションを {{ic|pam_systemd_home.so}} エントリと一緒に使うことにより、forget key on suspend を有効化できます。現状では、この機能をサポートするセッションマネージャは'''存在しません'''。さらに、TTY セッションはこの再認証メカニズムをサポートしていません。なので、セッションマネージャがこの機能をサポートし始めたら、そのようなセッションマネージャに対してのみ suspend オプションを有効化すべきです。詳細は {{man|8|pam_systemd_home}} と [https://github.com/linux-pam/linux-pam/blob/master/doc/sag/Linux-PAM_SAG.xml Linux-PAM System Administrators' Guide] を読んでください。
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 reathentication 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] for more details.
 
   
=== SSH remote unlocking ===
+
=== SSH リモートアンロック ===
   
  +
''systemd-homed'' はパスワードを使用してホームディレクトリを暗号化します。なので、公開鍵認証で設定された SSH ではホームディレクトリをマウントできず、{{ic|authorized_keys}} も読み込めません。可能な解決策としては、authorized keys をあなたのユーザレコードに追加し、認証のために公開鍵とパスワードの両方を要求するというものがあります。以下を {{ic|/etc/ssh/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|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
  +
}}
   
  +
ユーザがアンロックされている間、以下を使って authorized keys でユーザレコードを更新してください:
Make sure that you have not disabled password authentication:
 
   
  +
# homectl update ''username'' --ssh-authorized-keys=@/path/to/mounted/home/.ssh/authorized_keys
#PasswordAuthentication yes
 
   
  +
これで、鍵による認証を終えた後に SSH はあなたのパスワードを尋ねてくるようになります。''systemd-homed'' はそのパスワードをホームディレクトリのマウントのために使用します。
Update your user record with your authorized keys using:
 
   
  +
=== 暗号化されたホームディレクトリをレスキュー時にマウントする ===
# homectl update ''username'' --ssh-authorized-keys=@/path/to/.ssh/authorized_keys
 
   
  +
''systemd-homed'' で暗号化されたディレクトリをレスキューディスクや他のマシンからマウントする必要がある場合、''systemd-homed'' フレームワークの外からそのディレクトリを復号する必要があります。緊急時のために[https://bbs.archlinux.org/viewtopic.php?id=258152 フォーラム]からこの解決策のテキストファイルやスクリプトをレスキューディスクに保存しておくと良いでしょう:
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.
 
   
  +
# losetup -fP --show ''username''.home
=== 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 [https://bbs.archlinux.org/viewtopic.php?id=258152 forums] on your rescue disk for emergencies:
 
 
# losetup -fP ''username''.home
 
 
# cryptsetup open /dev/''loopXpY'' ''mappername''
 
# cryptsetup open /dev/''loopXpY'' ''mappername''
 
# mount /dev/mapper/''mappername'' ''/mnt/mountpoint''
 
# mount /dev/mapper/''mappername'' ''/mnt/mountpoint''
   
  +
* {{ic|''username''.home}} は {{ic|/home}} ディレクトリ内にあるファイルです。ファイル名はユーザ名と拡張子 ''.home'' です。
where,
 
  +
* {{ic|''loopXpY''}} は {{ic|/dev}} ディレクトリ内のデバイスです。ファイル名は、前のステップで作成したループバックデバイスのループ番号と、関連するパーティションのパーティション番号です (おそらく {{ic|/dev/loop0p1}})。
  +
* {{ic|''mappername''}} は、マップされたデバイスを受け入れる任意のエイリアスです (例: {{ic|user_oldhome}})。
  +
* {{ic|''/mnt/mountpoint''}} は、復号されたホームディレクトリをマウントする任意のマウントポイントです。
  +
  +
=== 認証と暗号化のために FIDO2 hmac-secret でユーザをセットアップする ===
  +
  +
このセットアップでは FIDO2 セキュリティデバイスが必要で、ログインとホームディレクトリの復号に pin を尋ねてきます:
  +
  +
# homectl create ''username'' --storage=fscrypt --fido2-device=auto --fido2-with-client-pin=yes --fido2-with-user-presence=no --recovery-key=yes
   
  +
デバイスが紛失あるいは破損した場合に備えて、リカバリキーをセットアップしておくことが推奨されます。リカバリキーは、ユーザとファイルにアクセスするためにパスワードのように使用されます。デバイス pin を使うのではなく、ユーザの存在だけを尋ねるだけにすることも可能です。この場合、セキュリティデバイスに触れる必要があります。
* {{ic|''username''.home}} is the file in the {{ic|/home}} directory with your username and the ''.home'' extension as its name
 
  +
現在、''homectl'' では、代替のログインとしてユーザのパスワードも設定する必要があります。これはバックアップの秘密の質問としても機能します。
* {{ic|''loopXpY''}} is the device in the {{ic|/dev}} directory with the loop number of the loopback device created in the prior step and the partition number of the relevant partition, probably {{ic|/dev/loop0p1}}
 
* {{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
 
   
 
== トラブルシューティング ==
 
== トラブルシューティング ==
   
=== Plasma からログアウトした後もホームディレクトリアクティブな状態 ===
+
=== Plasma からログアウトした後もホームディレクトリアクティブなままになる ===
   
[[Plasma]] からログアウトした後、まだアクティブなユーザプロセスえば ''dbus-daemon''が残っていて、ホームディレクトリのアクティブ化を妨げている可能性があります。
+
[[Plasma]] からログアウトした後アクティブなユーザプロセス (: ''dbus-daemon'') が残ることがあります。そのようなプロセスがホームディレクトリのアクティブ化解除を妨げてしまいます。
   
これは [https://wiki.archlinux.org/title/KDE#systemd_startup enabling Plasma's systemd startup] によって解決することできます。
+
これは、[[KDE#systemd による起動|Plasma systemd スタートアップを有効化する]]ことで解決できます。
   
=== SDDM がユーザーをリトしない ===
+
=== ユーザクが無視される ===
   
  +
{{ic|/etc/login.defs}} には常に [[umask]] が設定されているため、[[#homectl|homectl]] を通じて設定されたユーザー自身の umask は現在無視されています。詳細は [https://github.com/systemd/systemd/issues/23007 systemd issue 23007] を参照してください。
こちらを参照してください: [[SDDM#ユーザーが greeter に表示されない]]
 
  +
  +
これを解決するには、[[コマンドラインシェル#ログインシェル|ログインシェル]]のスタートアップファイル (例えば {{ic|~/.bash_profile}} や {{ic|~/.zprofile}}) で umask を設定してください。
  +
  +
=== ホームディレクトリが汚い状態にある ===
  +
  +
強制的または予期しないシャットダウンや停電が発生した場合、ホーム ディレクトリが汚い状態のままになる可能性があります。この場合、ユーザーはロックアウトされ、ホームディレクトリへの認証に手動介入が ''必要になる場合があります。'' 次の手順では、[[LUKS|LUKS2]] 暗号化ループバックファイルストレージメカニズムが使用されており、基盤となるファイルシステムで [[fsck]] を使用して修復できることを前提としています。
  +
  +
まず、ループバックファイルが ''汚い'' 状態がであることを確認し、ユーザーのループバックファイルのパスを決定します:
  +
  +
$ homectl inspect ''username''
  +
  +
次に、ループバックファイルのパスを使用して、[[systemd-homed#暗号化されたホームディレクトリをレスキュー時にマウントする]] の手順に従います。
  +
  +
{{Note|この時点で LUKS2 デバイスを開くことができた場合、''fsck'' 使用後の潜在的なリスクを最小限に抑えるために、マウントされたデバイス内のデータをすべて回復することが賢明です。}}
  +
  +
最後に、開いた LUKS2 デバイス上で ''fsck'' を使用してファイルシステムの修復を試みます:
  +
  +
# fsck /dev/mapper/''mappername''
  +
  +
{{Warning|''fsck'' を実行する前に、{{ic|/dev/mapper/''mappername''}} のマウントポイントが存在しないことを確認してください。}}
  +
  +
この時点で修復が成功した場合は、LUKS2 コンテナを [[dm-crypt/デバイスの暗号化#デバイスマッパーで LUKS パーティションのロックを解除・マップ|閉じて]] ループバックデバイスを切断し、systemd-homed service を介して通常どおりに再認証を試みます。
  +
  +
{{Expansion|Add links to bug reports for the issues mentioned in the note.}}
  +
  +
{{Note|ループバックファイル自体が破損している場合など、その他の場合には、回復が不可能となり、ユーザーが '''永久''' にロックアウトされる可能性があります。さらに、homectl は現在、汚い状態から回復するためのネイティブコマンドを提供していません。これが懸念される場合は、ホーム ディレクトリの定期的なバックアップを準備するか、systemd-homed の使用を完全に控えてください。}}
   
 
== 参照 ==
 
== 参照 ==
170行目: 211行目:
 
* https://systemd.io/CONVERTING_TO_HOMED/
 
* https://systemd.io/CONVERTING_TO_HOMED/
 
* https://systemd.io/HOME_DIRECTORY/
 
* https://systemd.io/HOME_DIRECTORY/
  +
  +
{{TranslationStatus|systemd-homed|2024-4-18|806352}}

2024年4月18日 (木) 20:59時点における最新版

関連記事

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 ディレクトリ

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

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

ディレクトリまたは 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 で見られます。

ノート: ユーザーとグループ#ユーザー管理で説明されている注意点が適用されます: ログインシェルは /etc/shells にリストされているもののうちの一つでなければなりません。

削除

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

複数のユーザを同時に削除することができます:

# homectl remove username username2

ヒントとテクニック

Forget key on suspend

警告: PAM の設定を間違えると、システムの認証が壊れてしまい root にすらログインできなくなる可能性があります。変更を加える前に、既存の設定ファイルをバックアップすることが推奨されます。

/etc/pam.d/ 内のファイルで suspend オプションを pam_systemd_home.so エントリと一緒に使うことにより、forget key on suspend を有効化できます。現状では、この機能をサポートするセッションマネージャは存在しません。さらに、TTY セッションはこの再認証メカニズムをサポートしていません。なので、セッションマネージャがこの機能をサポートし始めたら、そのようなセッションマネージャに対してのみ suspend オプションを有効化すべきです。詳細は pam_systemd_home(8)Linux-PAM System Administrators' Guide を読んでください。

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 は、復号されたホームディレクトリをマウントする任意のマウントポイントです。

認証と暗号化のために FIDO2 hmac-secret でユーザをセットアップする

このセットアップでは FIDO2 セキュリティデバイスが必要で、ログインとホームディレクトリの復号に pin を尋ねてきます:

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

デバイスが紛失あるいは破損した場合に備えて、リカバリキーをセットアップしておくことが推奨されます。リカバリキーは、ユーザとファイルにアクセスするためにパスワードのように使用されます。デバイス pin を使うのではなく、ユーザの存在だけを尋ねるだけにすることも可能です。この場合、セキュリティデバイスに触れる必要があります。 現在、homectl では、代替のログインとしてユーザのパスワードも設定する必要があります。これはバックアップの秘密の質問としても機能します。

トラブルシューティング

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

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

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

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

/etc/login.defs には常に umask が設定されているため、homectl を通じて設定されたユーザー自身の umask は現在無視されています。詳細は systemd issue 23007 を参照してください。

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

ホームディレクトリが汚い状態にある

強制的または予期しないシャットダウンや停電が発生した場合、ホーム ディレクトリが汚い状態のままになる可能性があります。この場合、ユーザーはロックアウトされ、ホームディレクトリへの認証に手動介入が 必要になる場合があります。 次の手順では、LUKS2 暗号化ループバックファイルストレージメカニズムが使用されており、基盤となるファイルシステムで fsck を使用して修復できることを前提としています。

まず、ループバックファイルが 汚い 状態がであることを確認し、ユーザーのループバックファイルのパスを決定します:

$ homectl inspect username

次に、ループバックファイルのパスを使用して、systemd-homed#暗号化されたホームディレクトリをレスキュー時にマウントする の手順に従います。

ノート: この時点で LUKS2 デバイスを開くことができた場合、fsck 使用後の潜在的なリスクを最小限に抑えるために、マウントされたデバイス内のデータをすべて回復することが賢明です。

最後に、開いた LUKS2 デバイス上で fsck を使用してファイルシステムの修復を試みます:

# fsck /dev/mapper/mappername
警告: fsck を実行する前に、/dev/mapper/mappername のマウントポイントが存在しないことを確認してください。

この時点で修復が成功した場合は、LUKS2 コンテナを 閉じて ループバックデバイスを切断し、systemd-homed service を介して通常どおりに再認証を試みます。

この記事またはセクションは加筆を必要としています。
理由: Add links to bug reports for the issues mentioned in the note. (議論: トーク:Systemd-homed#)
ノート: ループバックファイル自体が破損している場合など、その他の場合には、回復が不可能となり、ユーザーが 永久 にロックアウトされる可能性があります。さらに、homectl は現在、汚い状態から回復するためのネイティブコマンドを提供していません。これが懸念される場合は、ホーム ディレクトリの定期的なバックアップを準備するか、systemd-homed の使用を完全に控えてください。

参照

翻訳ステータス: このページは en:systemd-homed の翻訳バージョンです。最後の翻訳日は 2024-4-18 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。