1

Мне нужно, чтобы один скрипт выполнял большинство своих команд от имени другого пользователя, но не хочу указывать своим пользователям вызывать его через sudo. Выполнение команд с EOF здесь документ не работает, так как есть много переменных для передачи из ввода в различные функции, которые определяет сценарий. Есть ли другой способ для меня запускать функции от имени другого пользователя, сохраняя при этом входные данные и переменные? Можно ли это сделать без вызова группы внешних файлов или добавления sudo к почти 300 командам?

2 ответа2

1

Вы можете использовать команду su следующим образом, чтобы сделать это в скрипте bash:

su -c "command" -s /bin/sh Username

Где параметр -c указывает тратить одну команду на оболочку, а -s используется для указания, какая оболочка вызывать команду.

Другой способ сделать это - использовать sudo следующим образом:

sudo -H -u Username bash -c "command" 

Параметр -h - это политика безопасности, которая позволяет задавать переменную среды HOME для указанного пользователя (по умолчанию используется root). -u указывает пользователя для запуска команды.

1

Поместив это перед вызовом основных функций, у меня получилось:

    if [ "`whoami`" != "runasuser" ]; then
        sudo -u runasuser bash "$0" "$@"
        exit
    fi

Это вызовет текущий сценарий в вложенной оболочке как пользователя по вашему выбору и передаст все ваши данные в него.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .