Назад | Перейти на главную страницу

Удаление установщика с помощью Packer

Когда виртуальная машина создается впервые, она получает пользователя-установщика, который используется для запуска подготовки. Я хочу удалить этого пользователя на последнем этапе, потому что это не обязательно безопасно и не нужно. Однако Packer запускает все инициаторы от имени этого пользователя. Я пробовал использовать Ansible, но, похоже, он все еще использует этого пользователя в некоторой степени, и, таким образом, книга воспроизведения Ansible не может удалить его без сбоев (говоря, что есть программы, все еще работающие от имени данного пользователя). Вместо того, чтобы бездельничать, я спрашиваю, есть ли у кого-нибудь идеи относительно того, как достичь этой цели, которая должна быть простой, а оказалось, что нет.

Я понимаю, что это довольно старый вопрос, но мне не понравилась идея использовать cronjob (или cloud-init, или что-то еще, что происходит после создания экземпляра изображения) для этого, и я нашел то, что я считаю лучшим раствор с использованием самого пакера. Это работает в 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 - он использует Пакера skip_clean возможность пропустить удаление сценария оболочки после inline раздел завершается (что, учитывая, что fedora пользователь больше не существует, был гарантирован сбой).

Также обратите внимание, что если у вас включена пересылка агента SSH с упаковщиком, это может оставить следы сокета агента на изображении.

Запланируйте задание cron для удаления пользователя с @reboot вариант или добавьте несколько строк в сценарии rc, чтобы сделать то же самое.