Kickstart 自动化安装中的密码管理:rootpw 与 chpasswd 完全指南

在 Red Hat 系 Linux(如 CentOS 8)的自动化部署中,密码配置是安全性的关键一环。Kickstart 提供了 rootpw 命令设置 root 密码,而 chpasswd 则可以在安装后期批量修改或新增用户密码。本文将系统梳理这两种方法,涵盖明文、密文、哈希生成、后安装脚本等实用技巧。


一、rootpw:设置 root 密码

rootpw 命令位于 Kickstart 文件的主配置段,用于定义 root 用户的初始密码。

1.1 明文方式(不推荐)

bash 复制代码
rootpw --plaintext "YourPlainPassword"
# 或者简写
rootpw "YourPlainPassword"
  • 特点:密码以可读形式存储在 Kickstart 文件中。
  • 风险 :任何能查看 KS 文件的人均可直接获取 root 密码;若密码包含 #、$ 等特殊字符,可能被误解析。
  • 适用场景:仅限完全隔离的测试环境,且 KS 文件受严格权限控制。

1.2 密文方式(强烈推荐)

bash 复制代码
rootpw --iscrypted "EncryptedPasswordString"
  • 特点:密码经哈希算法(如 SHA-512)加密,即使 KS 文件泄露,攻击者也无法轻易还原原始密码。
  • 安全增强 :建议配合 auth 或 authselect 命令明确哈希算法。
bash 复制代码
authselect select sssd --force
# 或旧版语法
auth --enableshadow --passalgo=sha512

1.3 生成密文密码的三种方法

① Python(最通用,无需额外包)
bash 复制代码
python3 -c 'import crypt; print(crypt.crypt("你的密码", crypt.mksalt(crypt.METHOD_SHA512)))'

输出示例:$6$saltstring$hashedresult

② mkpasswd(需安装 expect)
bash 复制代码
sudo dnf install expect -y
mkpasswd -m sha-512 "你的密码"
③ openssl
bash 复制代码
openssl passwd -6 "你的密码"

参数 -6 代表 SHA-512 算法。


二、chpasswd:批量修改或创建用户密码

chpasswd 不是一个 Kickstart 直接命令,而是 Linux 系统中的一个实用工具。在自动化安装中,通常通过 Kickstart 的 %post 脚本调用它,以实现以下场景:

  • 为普通用户(非 root)设置初始密码。
  • 批量修改多个用户的密码。
  • 在安装结束后强制首次登录修改密码。

2.1 基本用法

chpasswd 从标准输入读取 用户名:密码 格式的行,并为这些用户更新密码。

bash 复制代码
echo "user1:password123" | chpasswd

默认情况下,密码会被视为明文 。如果需要使用密文,可以加上 -e 或 --encrypted 选项。

2.2 在 Kickstart %post 中使用 chpasswd

bash 复制代码
%post --log=/root/post_install.log
# 创建普通用户(如果尚未存在)
useradd -m -G wheel developer

# 明文方式设置密码(不推荐)
echo "developer:Dev@2026" | chpasswd

# 更安全:先生成密文,再用 chpasswd -e
ENCRYPTED_PASS=$(python3 -c 'import crypt; print(crypt.crypt("Dev@2026", crypt.mksalt(crypt.METHOD_SHA512)))')
echo "developer:$ENCRYPTED_PASS" | chpasswd -e

# 强制用户首次登录修改密码
passwd -e developer
%end

2.3 批量处理多个用户

创建一个包含多行的文本文件,每行格式 username:password,然后:

bash 复制代码
cat /tmp/userlist.txt | chpasswd

在 Kickstart 中可提前通过 %include 或 wget 获取该文件。

2.4 chpasswd 常用选项

选项 说明
-e 密码字段已经是加密过的哈希值
-c 指定加密算法(如 SHA512),需配合 -e 使用时注意
-h 显示帮助

三、安全最佳实践

3.1 密码存储原则

  • 永不使用明文 :无论是 rootpw 还是 chpasswd,都应优先采用密文形式。
  • 隔离 KS 文件:将 Kickstart 文件放在仅部署服务器可读的位置(如 HTTP 服务器设 IP 访问控制,或使用 HTTPS + 认证)。
  • 动态生成密码:对于生产环境,可结合自动化工具(如 Ansible、Hashicorp Vault)在部署时动态生成一次性密码,安装后再强制重置。

3.2 哈希算法的选择

  • 推荐 SHA-512 ($6$ 标识),它是当前 RHEL/CentOS 8 的默认算法。
  • 避免使用 MD5($1$)或 DES,它们已被认为不安全。

3.3 密码强度要求

即使使用密文存储,弱密码仍会被暴力破解。建议:

  • 最小长度 12 字符。
  • 包含大写、小写、数字、特殊符号。
  • 定期轮换(尤其在批量部署的测试环境中)。

3.4 安装后强制修改密码

对于 root 用户:

bash 复制代码
%post
passwd -e root   # 强制 root 首次登录时修改密码
%end

对于普通用户,同样使用 passwd -e username。


四、完整 Kickstart 示例

以下是一个整合了 rootpw 密文和 chpasswd 设置普通用户密码的示例片段:

bash 复制代码
# 主配置部分
rootpw --iscrypted "$6$m0c9JvZ4kLqE5XyG$W5zV3pQ8rT1uI2oN7sD4fG6hJ9kL2mP0vB3yR6tU8xY1eZ4aH7"
authselect select sssd --force

# 安装后脚本
%post --log=/root/post.log
# 创建运维用户
useradd -m -G wheel ops

# 使用 python 生成密文并设置密码(密码:Ops@CentOS8)
ENCRYPTED=$(python3 -c 'import crypt; print(crypt.crypt("Ops@CentOS8", crypt.mksalt(crypt.METHOD_SHA512)))')
echo "ops:$ENCRYPTED" | chpasswd -e

# 强制用户 ops 首次登录修改密码
passwd -e ops

# 禁止 root 直接 SSH 登录(可选)
echo "PermitRootLogin no" >> /etc/ssh/sshd_config
systemctl restart sshd
%end

五、常见问题与排错

问题 可能原因 解决方法
rootpw --iscrypted 不生效 密文字符串包含 $ 符号未被转义 确保整个密文字符串用双引号包裹,且无多余空格
chpasswd 提示 Invalid password 密码字段包含冒号或换行符 使用引号包裹密码,或通过 \: 转义
安装后 root 无法登录 密文生成时使用了错误的盐值或算法 重新生成并确认使用 SHA-512;检查 KS 中是否有 auth 冲突
%post 中 chpasswd 找不到命令 系统最小化安装未包含 chpasswd chpasswd 属于 shadow-utils,通常默认安装。若缺失可 dnf install -y shadow-utils

六、总结

方法 命令 适用场景 安全级别
rootpw 明文 rootpw "plain" 临时测试 ⚠️ 低
rootpw 密文 rootpw --iscrypted "hash" 生产部署 ✅ 高
chpasswd 明文 `echo "user:pass" chpasswd` 仅限内部可信环境
chpasswd 密文 `echo "user:hash" chpasswd -e` 批量设置用户密码

在自动化部署中,密码管理是安全的第一道防线。强烈建议:

  1. 始终使用 --iscrypted 和 chpasswd -e。
  2. 通过脚本或密码管理工具自动生成并注入哈希值。
  3. 配合安装后强制密码过期策略,实现首次登录必须修改。

通过本文介绍的 rootpw 和 chpasswd 组合,你可以在 CentOS 8 / RHEL 8 的 Kickstart 全自动安装中,安全、高效地完成所有用户的密码配置。

相关推荐
2302_805771071 分钟前
Day20:实战:接口自动化测试框架封装之一------接口关联封装
功能测试·自动化·测试用例
祖力554 分钟前
Linux系统移植、烧录与环境的搭建
linux·运维·服务器
对讲机数码科普12 分钟前
从电路原理到协议栈:模拟对讲机与数字对讲机的技术内核拆解
运维·网络·架构·软件工程
打工仔折腾 AI14 分钟前
极空间用 Docker 部署 Photopea:网页版 PS 的私有化实践
运维·后端·python·docker·容器·langchain·ai agent 实战
工具人555527 分钟前
Docker 最新超详细版教程
运维·docker·容器
我送炭你添花42 分钟前
ASA原理与电子维修实战:前言 一路修来,一路学习
运维·网络·学习
张小姐的猫1 小时前
【Linux】网络编程 —— 多路转接:epoll
linux·运维·网络
木卫二号Coding2 小时前
第八十六篇-Strata 部署指南(Ubuntu 22.04 + Tesla V100【单卡】)
linux·运维·人工智能·ubuntu
linweidong2 小时前
Redis 集群故障排查与修复实战:从 Connection refused 到内存打满的七个现场
运维·数据库·redis·缓存·redis集群·运维面经·实施面经