Мне нужно, чтобы один скрипт выполнял большинство своих команд от имени другого пользователя, но не хочу указывать своим пользователям вызывать его через sudo. Выполнение команд с EOF здесь документ не работает, так как есть много переменных для передачи из ввода в различные функции, которые определяет сценарий. Есть ли другой способ для меня запускать функции от имени другого пользователя, сохраняя при этом входные данные и переменные? Можно ли это сделать без вызова группы внешних файлов или добавления sudo к почти 300 командам?
2 ответа
Вы можете использовать команду su
следующим образом, чтобы сделать это в скрипте bash:
su -c "command" -s /bin/sh Username
Где параметр -c
указывает тратить одну команду на оболочку, а -s
используется для указания, какая оболочка вызывать команду.
Другой способ сделать это - использовать sudo следующим образом:
sudo -H -u Username bash -c "command"
Параметр -h
- это политика безопасности, которая позволяет задавать переменную среды HOME для указанного пользователя (по умолчанию используется root). -u
указывает пользователя для запуска команды.
Поместив это перед вызовом основных функций, у меня получилось:
if [ "`whoami`" != "runasuser" ]; then
sudo -u runasuser bash "$0" "$@"
exit
fi
Это вызовет текущий сценарий в вложенной оболочке как пользователя по вашему выбору и передаст все ваши данные в него.