Как предоставить sudo pwd в средстве подготовки оболочки упаковщика

Я хочу создать AWS AMI с помощью packer. Частью процесса установки является запуск сценария сборки, который устанавливает службы и настраивает среду для обычного пользователя системы, который не является пользователем root. Сценарий установки в основном выглядит так:

# some cmds that need to be run by averagejoe
echo "alias ll='ls -Alfh'" > $HOME/.bashrc
# some cmds that need to be run by a privileged user
sudo firewall-cmd --zone=public --permanent --add-port=3389/tcp

Таким образом, часть сценария должна выполняться как системный пользователь averagejoe, часть сценария должна выполняться как привилегированный пользователь с использованием sudo. Следовательно, запуск всего сценария от имени привилегированного пользователя, как предлагается здесь , не является вариантом.

Как я могу предоставить sudo pwd, когда сценарий запускается установщиком упаковщика? Я подумал о трехэтапном подходе, сначала перенастроив sudo так, чтобы он не требовал пароля, затем запустил сценарий установки и затем сбросил sudo на запрос паролей, но есть ли что-нибудь более элегантное?

0
задан 25 June 2020 в 13:29
1 ответ

В итоге я отключил пароли sudo на время выполнения сценария установки, например так:

    "provisioners": [
    {
        "type": "shell",
        "script": "project/packer/pwd_less_sudo.sh",
        "execute_command": "echo {{user `password`}} | sudo -S bash -c '{{ .Path }}'"
    },
    {
        "type": "shell",
        "script": "project/scripts/bootstrap.sh",
        "execute_command": "{{ .Path }}  --branch feature/ods-devenv"
    },
    {
        "type": "shell",
        "script": "project/packer/pwd_sudo.sh",
        "execute_command": "echo {{user `password`}} | sudo -S bash -c '{{ .Path }}'"
    }
]

где pwd_less_sudo.sh

#!/usr/bin/env bash
# make wheel pwd free
sudo sed -i '0,/%wheel[[:space:]]*ALL=(ALL)[[:space:]]*ALL/{s||%wheel        ALL=(ALL)       NOPASSWD: ALL|}' /etc/sudoers

и pwd_sudo.sh

#!/usr/bin/env bash
# give wheel their pwd back
sudo sed -i '0,/%wheel[[:space:]]*ALL=(ALL)[[:space:]]*NOPASSWD:[[:space:]]*ALL/{s||%wheel  ALL=(ALL)       ALL|}' /etc/sudoers
0
ответ дан 25 June 2020 в 13:15

Теги

Похожие вопросы