第8章 付録: Image Mode for RHEL でのユーザー、グループ、SSH キー、シークレットの管理
Image Mode for RHEL でのユーザー、グループ、SSH キー、およびシークレットの管理について説明します。
8.1. ユーザーとグループの設定
Image Mode for RHEL は、汎用的なオペレーティングシステムの更新および設定メカニズムです。ユーザーまたはグループを設定するために使用することはできません。唯一の例外は、--root-ssh-authorized-keys
オプションを持つ bootc install
コマンドです。
- 汎用ベースイメージのユーザーとグループの設定
- 通常、ディストリビューションのベースイメージには設定がありません。セキュリティーリスクがあるため、汎用イメージ内の公開されている秘密鍵を使用してパスワードと SSH キーを暗号化しないでください。
systemd
認証情報を使用した SSH キーの注入-
一部の環境では、
systemd
を使用して、root パスワードまたは SSHauthorized_keys
ファイルを注入できます。たとえば、System Management BIOS (SMBIOS) を使用して、SSH キーシステムファームウェアを注入します。これは、qemu
などのローカルな仮想化環境で設定できます。 cloud-init
を使用したユーザーと SSH キーの注入-
多くの Infrastructure as a Service (IaaS) および仮想化システムは、
cloud-init
やignition
などのソフトウェアによって一般的に処理されるメタデータサーバーを使用します。AWS instance metadata を参照してください。cloud-init
または Ignition は、使用しているベースイメージに含まれる場合があります。または、独自の派生イメージにインストールすることもできます。このモデルでは、SSH 設定は bootc イメージの外部で管理されます。 - コンテナーまたはユニットのカスタムロジックを使用したユーザーと認証情報の追加
-
cloud-init
などのシステムには特権がありません。コンテナーイメージを起動する方法で、認証情報を管理するための任意のロジックを注入できます。たとえば、systemd
ユニットを使用できます。認証情報を管理するには、FreeIPA などのカスタムのネットワークホストソースを使用できます。 - コンテナービルドでのユーザーと認証情報の静的な追加
パッケージ指向のシステムでは、次のコマンドにより、派生ビルドを使用してユーザーと認証情報を注入できます。
RUN useradd someuser
shadow-utils
のデフォルトのuseradd
実装に問題がある場合があります。ユーザーとグループの ID が動的に割り当てられることにより、ドリフトが発生する可能性があります。- ユーザーとグループのホームディレクトリーと
/var
ディレクトリー 永続的に
/home
に設定されたシステムの場合、最初のインストール後にコンテナーイメージで行われた/var/home /var
への変更は、その後の更新には適用されません。たとえば、コンテナービルドに
/var/home/someuser/.ssh/authorized_keys
を注入した場合、既存のシステムは更新されたauthorized_keys
ファイルを取得しません。systemd
ユニットでの DynamicUser=yes の使用システムユーザーの場合、可能な場合は
systemd
DynamicUser=yes
オプションを使用します。これは、潜在的な UID または GID のドリフトを回避できるため、パッケージのインストール時にユーザーまたはグループを割り当てるパターンよりもはるかに優れています。
systemd-sysusers
の使用たとえば、派生ビルドでは
systemd-sysusers
を使用します。詳細は、systemd-sysusers
のドキュメントを参照してください。COPY mycustom-user.conf /usr/lib/sysusers.d
sysusers
ツールは、必要に応じて起動時に従来の/etc/passwd
ファイルに変更を加えます。/etc
が永続的であれば、UID
またはGID
のドリフトを回避できます。つまり、UID
またはGID
の割り当ては、特定のマシンがどのようにアップグレードされてきたかによって異なります。systemd
JSON ユーザーレコードの使用-
JSON user records の
systemd
に関するドキュメントを参照してください。sysusers
とは異なり、これらのユーザーの標準的な状態は/usr
にあります。後続のイメージでユーザーレコードが破棄されると、そのレコードはシステムからも消えます。 nss-altfiles
の使用nss-altfiles
を使用すると、systemd
の JSON ユーザーレコードを削除できます。これは、システムユーザーを/usr/lib/passwd
と/usr/lib/group
に分割します。OSTree プロジェクトが/etc/passwd
に関連する/etc
の 3 方向マージを処理する方法と整合します。現在、ローカルシステムで/etc/passwd
ファイルが何らかの方法で変更された場合、その後コンテナーイメージの/etc/passwd
に対して行われた変更は適用されません。rpm-ostree
によってビルドされたベースイメージでは、nns-altfiles
がデフォルトで有効になっています。また、ベースイメージには、UID または GID のドリフトを回避するために、NSS ファイルによって事前に割り当てられ、管理されるシステムユーザーがあります。
派生コンテナービルドでは、たとえば
/usr/lib/passwd
にユーザーを追加することもできます。sysusers.d
またはDynamicUser=yes
を使用します。- ユーザーのマシンローカル状態
ファイルシステムのレイアウトは、ベースイメージによって異なります。
デフォルトでは、ユーザーデータはベースイメージに応じて、
/etc
、/etc/passwd
、/etc/shadow
およびgroups
と、/home
との両方に保存されます。ただし、いずれの汎用ベースイメージもマシンローカルな永続状態である必要があります。このモデルでは、/home
は/var/home/user
へのシンボリックリンクです。- システムプロビジョニング時のユーザーと SSH キーの注入
/etc
と/var
がデフォルトで永続化するように設定されたベースイメージの場合、Anaconda やキックスタートなどのインストーラーを使用してユーザーを注入できます。通常、汎用インストーラーは 1 回限りのブートストラップ用に設計されています。その後、設定はミュータブルなマシンローカル状態になり、他のメカニズムを使用して Day 2 操作で変更できるようになります。
Anaconda インストーラーを使用して初期パスワードを設定できます。ただし、この初期パスワードを変更するには、
passwd
などの別のシステム内ツールが必要です。これらのフローは
bootc-compatible
システムでも同様に機能します。異なるシステム内ツールに変更する必要なく、ユーザーが汎用ベースイメージを直接インストールすることをサポートします。- 一時的なホームディレクトリー
多くのオペレーティングシステムのデプロイメントでは、永続的でミュータブルかつ実行可能な状態が最小限に抑えられます。これにより、ユーザーのホームディレクトリーが破損する可能性があります。
/home
ディレクトリーをtmpfs
として設定すると、再起動後にユーザーデータが確実に消去されます。このアプローチは、一時的な/etc
ディレクトリーと組み合わせると特に効果的です。たとえば、SSH
authorized_keys
やその他のファイルを注入するようにユーザーのホームディレクトリーをセットアップするには、systemd
tmpfiles.d
スニペットを使用します。f~ /home/user/.ssh/authorized_keys 600 user user - <base64 encoded data>
SSH は、
/usr/lib/tmpfiles.d/<username-keys.conf
としてイメージ内に埋め込まれています。もう 1 つの例は、ネットワークからキーを取得して書き込むことができる、イメージに埋め込まれたサービスです。これはcloud-init
で使用されるパターンです。- UID と GID のドリフト
-
/etc/passwd
および同様のファイルは、名前と数値識別子間のマッピングです。マッピングが動的で、"ステートレス" なコンテナーイメージビルドと組み合わされると、問題が発生する可能性があります。各コンテナーイメージビルドでは、RPM のインストール順序やその他の理由により、UID が変更される場合があります。当該ユーザーが永続状態を維持する場合、これは問題になる可能性があります。このようなケースに対処するには、sysusers.d
を使用するか、DynamicUser=yes
を使用するように変換します。