镜像内用户
用户记录位于 os.users。它们在镜像内创建账户; 与 OpenFactory 网站账户或组织角色无关。
规范形状
{
"os": {
"users": [
{
"username": "deploy",
"full_name": "Deployment Operator",
"groups": ["sudo"],
"shell": "/bin/bash"
}
]
}
}支持的字段包括 username、可选的 password、full_name、groups、shell,以及 Elster/Vyatta 镜像使用的目标特定 level。包含 home 或 comment 的旧示例不符合规范模型,可能会被忽略。
用户名和组名受限于安全的 Linux 账户字符和长度。shell 必须是不含空白或 shell 元字符的绝对路径。
密码行为
不设置 password 会创建密码已锁定的账户。对于仅密钥 SSH、首次引导登记或部署时身份集成,这是首选的配方状态。
如果包含明文密码,它会成为敏感构建输入,并可能通过保存的配方、日志或导出暴露。不要在配方中使用真实的生产凭据。Phone 配方必须在设备上收集凭据,而不是把它们烘焙进镜像。
在禁用 SSH 密码认证之前,确认已批准的公钥或其他访问方法存在且经过测试。否则,正确加固的镜像可能无法进入。
组与特权
sudo和wheel可按发行版授予管理权限。docker通常通过守护进程套接字授予等效于 root 的控制。kvm在存在时授予对虚拟化设备的访问。adm可能暴露敏感日志。
把这些当作特权组,只授予账户所需的内容。发行版特定的组名不可移植。
服务账户
对于非交互服务账户,选择目标上可用的禁止登录 shell,并省略管理组。确认生成器和服务单元保留了预期身份; 如果省略 groups,配方默认可能会添加 sudo,因此在适当时提供明确的空组列表。
验证
测试真正重要的属性:
- 账户存在于预期 UID 范围内;
- 主组和附加组正确;
- 登录 shell 和密码锁定状态正确;
- 若在其他地方生成,家目录和文件所有权正确;
- 未授权的 sudo 和服务访问被拒绝; 以及
- 已批准的登录或登记路径成功。
不要仅从账户创建推断最小特权。