「Systemd-homed」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎インストール: 必要なServiceを追記)
(英語版 649378 への追従。ただし一部は未翻訳。)
4行目: 4行目:
 
[[pt:Systemd-homed]]
 
[[pt:Systemd-homed]]
 
{{Related articles start}}
 
{{Related articles start}}
  +
{{Related|ユーザーとグループ}}
 
{{Related|fscrypt}}
 
{{Related|fscrypt}}
 
{{Related|セキュリティ}}
 
{{Related|セキュリティ}}
 
{{Related|PAM}}
 
{{Related|PAM}}
 
{{Related articles end}}
 
{{Related articles end}}
  +
 
'''systemd-homed''' は現在のシステム構成に依存しないポータブルなユーザーアカウントを提供する [[systemd]] サービスです。
 
'''systemd-homed''' は現在のシステム構成に依存しないポータブルなユーザーアカウントを提供する [[systemd]] サービスです。
   
16行目: 18行目:
 
== インストール ==
 
== インストール ==
   
''systemd-homed'' は {{Pkg|systemd}} に含まれています。{{ic|systemd-homed.service}} を[[起動]]・[[有効化]]してください。
+
''systemd-homed'' は {{Pkg|systemd}} に含まれています。{{ic|systemd-homed.service}} を[[起動]]・[[有効化]]してください。また、{{Pkg|pambase}} のバージョン 20200721.1-2 以降には、systemd-homed のユーザーセッションで必要となる [[PAM#設定 | PAMの設定]] が付属しています
   
 
== ユーティリティ ==
 
== ユーティリティ ==
22行目: 24行目:
 
=== homectl ===
 
=== homectl ===
   
homectl を使うことでユーザーを作成・更新・調査して、ホームディレクトリと systemd-homed サービスで管理される {{ic|~/.identity}} を作成することができます。
+
homectl を使うことでユーザーを作成・更新・調査して、ホームディレクトリと {{man|8|systemd-homed}} サービスで管理される {{ic|~/.identity}} を作成することができます。
   
最初の空 UID を使用して、'archie' という名前のユーザーを作成 (同じ名前のグループを作成して GID と UID を同じにして ''archie'' をグループのメンバーに設定し、デフォルトシェルを {{ic|/bin/bash}} に設定):
+
最初の空きの UID を使用して、'username' という名前のユーザーを作成 (同じ名前のグループを作成して GID と UID を同じにして ''username'' をグループのメンバーに設定し、デフォルトシェルを {{ic|/bin/bash}} に設定):
   
# homectl create archie
+
# homectl create username
   
上記のコマンドでホームディレクトリのマウントポイントは {{ic|/home/archie}} に設定されます。ストレージ方式は次の順番で選択されます (例えば LUKS がサポートされている場合 LUKS が選ばれます): '''LUKS''', '''サブボリューム''', '''ディレクトリ'''。'''LUKS''' のイメージパスは {{ic|/home/archie.home}} に、'''ディレクトリ'''のディレクトリパスは {{ic|/home/archie.homedir}} に設定されます。
+
上記のコマンドでホームディレクトリのマウントポイントは {{ic|/home/''username''}} に設定されます。ストレージ方式は次の順番で選択されます (例えば LUKS がサポートされている場合 LUKS が選ばれます): {{ic|luks}}, {{ic|サブボリューム}}, {{ic|ディレクトリ}}。'''LUKS''' のイメージパスは {{ic|/home/''username''.home}} に、'''ディレクトリ'''のディレクトリパスは {{ic|/home/''username''.homedir}} に設定されます。
   
シェルを [[zsh]] に設定してユーザーを作成する例:
+
シェルを [[zsh]] に設定してユーザー 'archie' を作成する例:
   
 
# homectl create archie --shell='/usr/bin/zsh'
 
# homectl create archie --shell='/usr/bin/zsh'
44行目: 46行目:
 
=== userdbctl ===
 
=== userdbctl ===
   
古典的な Unix によるユーザー管理と [[systemd-homed]] によるユーザー管理、両方によるユーザー・グループ・グループ属性を調査するための問い合わせツール。
+
古典的な UNIX によるユーザー管理と [[systemd-homed]] によるユーザー管理、両方によるユーザー・グループ・グループ属性を調査するための問い合わせツール。
   
 
== ストレージ方式 ==
 
== ストレージ方式 ==
 
=== ディレクトリまたは [[btrfs]] サブボリューム ===
 
 
ユーザーのホームディレクトリは {{ic|/home/user.homedir}} に保存され、ログイン時にバインド[[マウント]]を使って {{ic|/home/user}} にマウントされます。この方式では暗号化は行われません。 この方式を使う際は {{ic|1=--storage=directory}} または {{ic|1=--storage=subvolume}} を '''homectl''' に指定してください。
 
 
=== [[fscrypt]] ディレクトリ ===
 
 
{{Tip|fscrypt をサポートしているファイルシステムには [[ext4]] や [[F2FS]] があります。}}
 
上記の方法と同じようにユーザーのホームディレクトリが保存されますが、ファイルシステムネイティブの暗号化が使われます。この方式を使う場合は {{ic|1=--storage=fscrypt}} を '''homectl''' に指定してください。
 
   
 
=== [[LUKS]] ホームディレクトリ ===
 
=== [[LUKS]] ホームディレクトリ ===
71行目: 64行目:
 
* ファイルシステムにはユーザーと同じ名前のディレクトリが必要です。このディレクトリがログイン時にユーザーのホームディレクトリになります。他のストレージ方式と同じように {{ic|~/.identity}} ファイルにユーザーレコードのコピーを保持します。
 
* ファイルシステムにはユーザーと同じ名前のディレクトリが必要です。このディレクトリがログイン時にユーザーのホームディレクトリになります。他のストレージ方式と同じように {{ic|~/.identity}} ファイルにユーザーレコードのコピーを保持します。
   
  +
=== [[fscrypt]] ディレクトリ ===
== PAM モジュールの有効化 ==
 
''systemd-homed'' のユーザーは伝統的な UNIX の NSS データベース ({{ic|/etc/passwd}}, {{ic|/etc/shadow}}, {{ic|/etc/group}} など) にレコードを記録しないため、デフォルトの {{ic|pam_unix.so}} モジュールではログインができません。提供されている [[PAM]] モジュールを使う必要があります。
 
   
  +
{{Tip|fscrypt をサポートしているファイルシステムには [[ext4]] や [[F2FS]] があります。}}
例:
 
  +
上記の方法と同じようにユーザーのホームディレクトリが保存されますが、ファイルシステムネイティブの暗号化が使われます。この方式を使う場合は {{ic|1=--storage=fscrypt}} を '''homectl''' に指定してください。
{{hc|head=/etc/pam.d/system-auth|output=#%PAM-1.0
 
   
  +
=== ディレクトリまたは [[btrfs]] サブボリューム ===
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
 
   
  +
ユーザーのホームディレクトリは {{ic|/home/''username''.homedir}} に保存され、ログイン時にバインド[[マウント]]を使って {{ic|/home/''username''}} にマウントされます。この方式では暗号化は行われません。 この方式を使う際は {{ic|1=--storage=directory}} または {{ic|1=--storage=subvolume}} を '''homectl''' に指定してください。
account sufficient pam_unix.so
 
-account sufficient pam_systemd_home.so
 
account optional pam_permit.so
 
account required pam_time.so
 
   
  +
=== CIFS サーバー ===
-password sufficient pam_systemd_home.so
 
password sufficient pam_unix.so try_first_pass nullok sha512 shadow
 
password optional pam_permit.so
 
   
  +
この方式では、ホームディレクトリはログイン時に CIFS (''Common Internet File System'') サーバからマウントされます。この CIFS は [[Samba]] プロトコルによって実装されています。この方式を使う際は {{ic|1=--storage=cifs}} を'''homectl'''に指定して下さい。また、ローカルパスワードが CIFS サービスへのログイン情報としても使われます。
session required pam_limits.so
 
-session optional pam_systemd_home.so
 
session required pam_unix.so
 
session optional pam_permit.so}}
 
{{Tip|オプションについて詳しくは {{man|8|pam_systemd_home}} を参照。}}
 
   
  +
== ユーザーレコードの属性 ==
== 例 ==
 
   
  +
ユーザーレコードを見るには次のようにします:
以下は '''homectl''' の使用例です。
 
   
  +
# homectl inspect ''username''
=== fscrypt を使ってユーザー archie を作成 ===
 
   
  +
また、変更、追加したい場合は次のようにします:
# homectl create archie --storage=fscrypt
 
   
  +
# homectl update ''username'' --''property''=''VALUE''
=== UID とシェル、グループを指定してユーザー alan を作成 ===
 
   
  +
オプションの詳細は {{man|1|homectl}} を参照してください。
# homectl create alan --shell=/bin/zsh --uid=1001 -G wheel,storage,games
 
  +
  +
== ユーザー管理の例 ==
  +
  +
=== ユーザーの作成 ===
  +
  +
LUKS による暗号化を使ってユーザーを作成する:
  +
  +
# homectl create ''username'' --storage=luks
  +
  +
fscrypt を使ってユーザーを作成する (ただし、fscript が[[Fscrypt#ファイルシステム| ファイルシステムで有効化]] されているか気を付けてください):
  +
  +
# homectl create ''username'' --storage=fscrypt
  +
  +
UID とシェル、グループを指定してユーザーを作成する:
  +
  +
# homectl create ''username'' --shell=/bin/zsh --uid=60100 --member-of=wheel,adm,uucp
  +
  +
他のオプションは {{man|1|homectl|USER RECORD PROPERTIES}} を参照してください。
   
 
=== ユーザーの削除 ===
 
=== ユーザーの削除 ===
 
{{Warning|ユーザーの削除は即座に実行されます。注意してください。}}
 
{{Warning|ユーザーの削除は即座に実行されます。注意してください。}}
  +
# homectl remove archie
 
  +
複数のユーザーを同時に削除することができます。次のコマンドを実行することで 2 ユーザーが即座に削除されます:
  +
  +
# homectl remove ''username'' ''username2''
  +
  +
== ヒントとテクニック ==
  +
  +
  +
=== Forget key on suspend ===
  +
  +
{{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 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 ===
  +
  +
''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}}:
  +
  +
AuthenticationMethods publickey,password
  +
AuthorizedKeysCommand /usr/bin/userdbctl ssh-authorized-keys %u
  +
AuthorizedKeysCommandUser root
  +
  +
Make sure that you have not disabled password authentication:
  +
  +
#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.
  +
  +
== トラブルシューティング ==
  +
  +
=== SDDM がユーザーをリストしない ===
  +
  +
こちらを参照してください: [[SDDM#ユーザーが greeter に表示されない]]。
   
 
== 参照 ==
 
== 参照 ==

2021年1月30日 (土) 22:04時点における版

関連記事

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

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

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

インストール

systemd-homedsystemd に含まれています。systemd-homed.service起動有効化してください。また、pambase のバージョン 20200721.1-2 以降には、systemd-homed のユーザーセッションで必要となる PAMの設定 が付属しています。

ユーティリティ

homectl

homectl を使うことでユーザーを作成・更新・調査して、ホームディレクトリと systemd-homed(8) サービスで管理される ~/.identity を作成することができます。

最初の空きの UID を使用して、'username' という名前のユーザーを作成 (同じ名前のグループを作成して GID と UID を同じにして username をグループのメンバーに設定し、デフォルトシェルを /bin/bash に設定):

# homectl create username

上記のコマンドでホームディレクトリのマウントポイントは /home/username に設定されます。ストレージ方式は次の順番で選択されます (例えば LUKS がサポートされている場合 LUKS が選ばれます): luks, サブボリューム, ディレクトリLUKS のイメージパスは /home/username.home に、ディレクトリのディレクトリパスは /home/username.homedir に設定されます。

シェルを zsh に設定してユーザー 'archie' を作成する例:

# 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 によるユーザー管理、両方によるユーザー・グループ・グループ属性を調査するための問い合わせツール。

ストレージ方式

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 ファイルにユーザーレコードのコピーを保持します。

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 を使ってユーザーを作成する (ただし、fscript が ファイルシステムで有効化 されているか気を付けてください):

# homectl create username --storage=fscrypt

UID とシェル、グループを指定してユーザーを作成する:

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

他のオプションは homectl(1) § USER RECORD PROPERTIES を参照してください。

ユーザーの削除

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

複数のユーザーを同時に削除することができます。次のコマンドを実行することで 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 reathentication 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 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 sshd_config:

AuthenticationMethods publickey,password
AuthorizedKeysCommand /usr/bin/userdbctl ssh-authorized-keys %u
AuthorizedKeysCommandUser root

Make sure that you have not disabled password authentication:

#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.

トラブルシューティング

SDDM がユーザーをリストしない

こちらを参照してください: SDDM#ユーザーが greeter に表示されない

参照