第 13 章 在 RHEL 的镜像模式下管理用户、组、SSH 密钥和 secret


了解更多有关 RHEL 的镜像模式下用户、组、SSH 密钥和 secret 管理的信息。

13.1. 用户和组配置

RHEL 的镜像模式是通用操作系统的更新和配置机制。有关所选用例中的最佳实践,请查看以下列表:

通用基础镜像的用户和组配置
通常,分发基础镜像没有任何配置。因为安全风险,不要在通用镜像中使用公开可用的私钥加密密码和 SSH 密钥。
通过 systemd 凭证注入 SSH 密钥
您可以使用 systemd 在某些环境中注入 root 密码或 SSH authorized_keys 文件。例如,使用系统管理 BIOS (SMBIOS)注入 SSH 密钥系统固件。您可以在本地虚拟化环境中配置这个,如 qemu
使用 cloud-init注入用户和 SSH 密钥
许多基础架构即服务(IaaS)和虚拟化系统使用通常由软件(如 cloud-initignition )处理的元数据服务器。请参阅 AWS 实例元数据。您使用的基础镜像可能包括 cloud-init 或 Ignition,或者您可以将其安装在您自己的派生镜像中。在这个模型中,SSH 配置在 bootc 镜像之外管理。
使用容器或单元自定义逻辑添加用户和凭证
cloud-init 等系统没有特权。您可以以您要启动容器镜像的方式注入您要管理凭证的任何逻辑,例如使用 systemd 单元。要管理凭据,您可以使用自定义网络托管的源,如 FreeIPA
在容器构建中静态添加用户和凭证

在面向软件包的系统中,您可以使用以下命令,使用派生的构建来注入用户和凭证:

RUN useradd someuser
Copy to Clipboard Toggle word wrap

您可以在 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.dDynamicUser=yes

使用 systemd-sysusers

例如,在派生的构建中使用 systemd-sysusers。如需更多信息,请参阅 systemd -sysusers 文档。

COPY mycustom-user.conf /usr/lib/sysusers.d
Copy to Clipboard Toggle word wrap

sysusers 工具在引导过程中根据需要更改传统的 /etc/passwd 文件。如果 /etc 是持久的,则这可以避免 UIDGID 偏移。这意味着 UIDGID 分配取决于特定机器随时间升级的方式。

用户的机器本地状态

文件系统布局取决于基础镜像。

默认情况下,用户数据存储在 /etc/etc/passwd/etc/shadowgroups 以及 /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>
Copy to Clipboard Toggle word wrap

SSH 嵌入在镜像中,如:/usr/lib/tmpfiles.d/<username-keys.conf。另一个示例是嵌入在镜像中的服务,其可以从网络获取密钥并编写它们。这是 cloud-init 使用的模式。

UID 和 GID 偏移
/etc/passwd 和类似的文件是名称和数字标识符之间的映射。当映射是动态的,并与"无状态"容器镜像构建混合时,可能它可能会导致问题。每个容器镜像构建可能会因 RPM 安装顺序或其他原因而导致 UID 改变。如果该用户保持持久状态,则这可能是一个问题。要处理这种情况,请将其转换为使用 sysusers.d 或使用 DynamicUser=yes
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat