Выполнение некоторых частей скрипта как непривилегированного пользователя с оболочкой

Я создаю сценарий конфигурации экземпляра, который устанавливает машину.

Я запускаю скрипт через sudo ie sudo run.sh Большинство этапов требуют доступа root, но некоторые из шагов скрипта не требуют доступа к корневому файлу, и я предпочитаю использовать их как непривилегированного пользователя, который запускал sudo.

  • Как читать и делать min / max / avg из потока NMEA
  • Как обернуть команду так, чтобы в качестве исполняемого файла появился скрипт, а не его дочерний элемент?
  • Как я могу выбрать 3 символьных файла в Bash?
  • как удаленно выполнять сценарий оболочки с повышенными привилегиями
  • Bash: удалить числа (штрих-числовые символы) из строковой переменной
  • Как разрешить сценарию оболочки bash цикл для 3 повторений перед выходом (подсказка для имени пользователя / пароля)
  • Внутри скрипта, работающего с sudo, я пытаюсь сделать

     sudo -i -u username sh -c 'echo $MY_ENV' 

    Поскольку .bashrc содержит export MY_ENV=something я ожидаю, что вышеуказанная команда будет печатать "что-то"

    Как я могу временно переключиться внутри сценария на другого пользователя для запуска команд, которые включают оболочку пользователя env ?

  • Какой механизм запрещает любому пользователю получать доступ к файлам других пользователей через root?
  • BASH-чтение txt-файла и сохранение в массиве
  • Readline .inputrc сбрасывает значения по умолчанию с каждой строкой
  • Команда Shell для удаления первой строки, заключенной с косой чертой
  • Автоматическое перемещение файлов в каталог один за другим и только тогда, когда целевая папка пуста
  • CD с перенаправлением на регистратор не работает
  • One Solution collect form web for “Выполнение некоторых частей скрипта как непривилегированного пользователя с оболочкой”

    .bashrc выполняется только интерактивными оболочками, а не скриптами¹. Неправильное место для определения переменных окружения. См. Есть ли эквивалентный файл .bashrc, который читается всеми оболочками? и Ubuntu wiki .

    Вы можете сказать bash, чтобы прочитать .bashrc явно. Конечно, вам придется выполнить bash , а не sh который может быть другой оболочкой:

     sudo -i -u username bash -c '. `~/.bashrc; echo "$MY_ENV"' 

    Но это плохая идея, потому что файлы .bashrc , вероятно, содержат вещи, которые предполагают, что они выполняются на терминале, и которые тратят время на установление привязок клавиш, псевдонимов, подсказок и т. Д.

    Разумным решением является определение определений переменных среды, в которых они принадлежат, в ~/.profile или ~/.pam_environment .

    ¹ За исключением случаев, когда bash вызывается sshd по какой-то странной причине.

    Linux и Unix - лучшая ОС в мире.