第 13 章 在 RHEL 的镜像模式下管理用户、组、SSH 密钥和 secret
了解更多有关 RHEL 的镜像模式下用户、组、SSH 密钥和 secret 管理的信息。
13.1. 用户和组配置 复制链接链接已复制到粘贴板!
RHEL 的镜像模式是通用操作系统的更新和配置机制。有关所选用例中的最佳实践,请查看以下列表:
- 通用基础镜像的用户和组配置
- 通常,分发基础镜像没有任何配置。因为安全风险,不要在通用镜像中使用公开可用的私钥加密密码和 SSH 密钥。
- 通过
systemd
凭证注入 SSH 密钥 -
您可以使用
systemd
在某些环境中注入 root 密码或 SSHauthorized_keys
文件。例如,使用系统管理 BIOS (SMBIOS)注入 SSH 密钥系统固件。您可以在本地虚拟化环境中配置这个,如qemu
。 - 使用
cloud-init
注入用户和 SSH 密钥 -
许多基础架构即服务(IaaS)和虚拟化系统使用通常由软件(如
cloud-init
或ignition
)处理的元数据服务器。请参阅 AWS 实例元数据。您使用的基础镜像可能包括cloud-init
或 Ignition,或者您可以将其安装在您自己的派生镜像中。在这个模型中,SSH 配置在 bootc 镜像之外管理。 - 使用容器或单元自定义逻辑添加用户和凭证
-
cloud-init
等系统没有特权。您可以以您要启动容器镜像的方式注入您要管理凭证的任何逻辑,例如使用systemd
单元。要管理凭据,您可以使用自定义网络托管的源,如 FreeIPA。 - 在容器构建中静态添加用户和凭证
在面向软件包的系统中,您可以使用以下命令,使用派生的构建来注入用户和凭证:
RUN useradd someuser
RUN useradd someuser
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以在
useradd
的默认shadow-utils
实现中发现问题:用户和组 ID 是动态分配的,这可能导致偏移。- 用户和组主目录,以及
/var
目录 对于使用持久性
/home
配置的系统,在初始安装后,对容器镜像的/var/home /var
所做的任何更改都不会应用到后续更新中。例如,如果您将
/var/home/someuser/.ssh/authorized_keys
注入到一个容器构建中,则现有的系统不会获得更新的authorized_keys
文件。- 对
systemd
单元使用 DynamicUser=yes 对于系统用户,在可能的时候使用
systemd
DynamicUser=yes
选项。这比在软件包安装时分配用户或组的模式要好得多,因为它避免了潜在的 UID 或 GID 偏移。
- 使用
nss-altfiles
nss-altfiles
将系统用户分成/usr/lib/passwd
和/usr/lib/group
,与 OSTree 项目处理 3 的合并方式保持一致,因为它与/etc
/passwd/etc/passwd
文件在本地系统上以任何方式被修改,则不会在容器镜像中应用对/etc/passwd
的后续更改。rpm-ostree
构建的基础镜像默认启用了nss-altfiles
。另外,基础镜像有一个由 NSS 文件管理和预分配的系统用户,以避免 UID 或 GID 偏移。
在派生的容器构建中,您还可以将用户附加到
/usr/lib/passwd
中,例如:使用sysusers.d
或DynamicUser=yes
。- 使用
systemd
-sysusers 例如,在派生的构建中使用
systemd
-sysusers。如需更多信息,请参阅systemd
-sysusers 文档。COPY mycustom-user.conf /usr/lib/sysusers.d
COPY mycustom-user.conf /usr/lib/sysusers.d
Copy to Clipboard Copied! Toggle word wrap Toggle overflow sysusers
工具在引导过程中根据需要更改传统的/etc/passwd
文件。如果/etc
是持久的,则这可以避免UID
或GID
偏移。这意味着UID
或GID
分配取决于特定机器随时间升级的方式。- 用户的机器本地状态
文件系统布局取决于基础镜像。
默认情况下,用户数据存储在
/etc
、/etc/passwd
、/etc/shadow
、groups
以及/home
中,具体取决于基础镜像。但是,通用基础镜像必须是机器本地持久状态。在此模型中,/home
是到/var/home/user
的符号链接。- 在系统置备时注入用户和 SSH 密钥
对于
/etc
和/var
被默认配置为持久的基础镜像,您可以使用 Anaconda 或 Kickstart 等安装程序注入用户。通常,通用安装程序是为一次性 bootstrap 而设计的。然后,配置成为一个可变的机器本地状态,您可以使用一些其他机制在第 2 天操作中进行更改。
您可以使用 Anaconda 安装程序设置初始密码。但是,更改此初始密码需要不同的系统内工具,如
passwd
。这些流在
bootc 兼容
系统中等效地工作,以支持用户直接安装通用基础镜像,而无需更改为不同的系统内工具。- 临时主目录
许多操作系统部署最小化持久、可变和可执行状态。这可能会损坏用户主目录。
/home
目录可以被设置为tmpfs
,以确保用户数据在重启后被清除。当与临时/etc
目录结合时,此方法工作得非常好。要将用户的主目录设置为,例如,注入 SSH
authorized_keys
或其他文件,请使用systemd
tmpfiles.d
片断:f~ /home/user/.ssh/authorized_keys 600 user user - <base64 encoded data>
f~ /home/user/.ssh/authorized_keys 600 user user - <base64 encoded data>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow SSH 嵌入在镜像中,如:
/usr/lib/tmpfiles.d/<username-keys.conf
。另一个示例是嵌入在镜像中的服务,其可以从网络获取密钥并编写它们。这是cloud-init
使用的模式。- UID 和 GID 偏移
-
/etc/passwd
和类似的文件是名称和数字标识符之间的映射。当映射是动态的,并与"无状态"容器镜像构建混合时,可能它可能会导致问题。每个容器镜像构建可能会因 RPM 安装顺序或其他原因而导致 UID 改变。如果该用户保持持久状态,则这可能是一个问题。要处理这种情况,请将其转换为使用sysusers.d
或使用DynamicUser=yes
。