使用 Packer 删除安装用户

使用 Packer 删除安装用户

首次创建虚拟机时,它会获得一个用于运行配置的安装用户。我想在最后一步删除此用户,因为它不一定安全,而且没有必要。但是,Packer 会以该用户的身份运行所有配置程序。我尝试使用 Ansible,但它似乎仍在以某种方式使用该用户,因此 Ansible 剧本无法真正删除它,否则会失败(说有程序仍以给定用户的身份运行)。我不想瞎折腾,而是想问问大家对如何实现这个目标有什么想法,这应该很简单,但结果却并非如此。

答案1

安排一个 cron 作业来使用选项删除用户@reboot或者在 rc 脚本中添加几行来执行相同操作。

答案2

我找到了另一种适用于 QEMU、VMware 和 VirtualBox 的 packer 1.7 的方法。您可以在关机命令中删除用户。此方法假定用户具有 sudo 访问权限。

shutdown_command   = "sudo su root -c \"userdel -rf packer; rm /etc/sudoers.d/90-cloud-init-users; /sbin/shutdown -hP now\""

答案3

我意识到这是一个相当老的问题,但我不喜欢使用 cronjob(或 cloud-init,或任何在图像实例化后发生的事情)的想法,我发现使用 packer 本身是一个更好的解决方案。这在 Packer 1.4 中有效:

{
    "type": "shell",
    "skip_clean": true,
    "execute_command": "chmod +x {{ .Path }}; sudo env {{ .Vars }} {{ .Path }} ; rm -f {{ .Path }}",
    "inline": [
        "rm -f /etc/sudoers.d/90-cloud-init-users",
        "/usr/sbin/userdel -r -f fedora",
    ]
}

这假设您的安装用户已被命名fedora- 它利用 Packer 的skip_clean选项在部分完成后跳过删除 shell 脚本inline(鉴于fedora用户不再存在,因此肯定会失败)。

另请注意,如果您使用打包程序打开了 SSH 代理转发,这可能会在图像中留下代理套接字的痕迹。

相关内容