Я пишу сценарий (на самом деле комбинация сценариев и make-файла), который устанавливает внешние зависимости: некоторые apt-get
команды, некоторые git
клонирование, сборка, установка, добавление пользователей в группы, ...
Некоторые операции в этих сценариях требуют прав суперпользователя, а некоторые - нет.
До сих пор я запускал весь процесс make с помощью sudo, но у него есть некоторые недостатки:
git
РЕПО клонировать получить вroot
качестве владельца, а это значит , что я не могу изменить их впоследствии безsudo
илиchown
- скрипты, которые добавляют пользователей в группы, не знают, какого пользователя добавить, так как
whoami
возвращаетсяroot
Каков наилучший способ запуска в качестве суперпользователя только тех команд, которые этого требуют? В идеале процесс все равно потребует от меня ввода sudo
пароля, но только один раз в самом начале процесса установки. Затем он забудет об этом в самом конце, но сохранит все время до тех пор (это может занять несколько часов).
Решения, которые я нашел в Интернете, включают в себя:
sudo -v
в начале сценария, но если я правильно понимаю, это время ожидания. Мой сценарий может быть запущен в течение нескольких часов- запуск скрипта с помощью
sudo
, но команды, которым не нужен суперпользователь сsudo -u $(logname) <command>
. Это то, что я делаю сейчас, но кажется, что все должно быть наоборот.
В идеале я хотел бы, чтобы мой сценарий:
- запросить учетные данные суперпользователя
- запускать обычные команды как зарегистрированный пользователь
- Запустите команды sudo с учетными данными, введенными на шаге 1
sudo -k
закрыть сеанс суперпользователя
su $SUDO_USER -c command
команды для запуска от имени обычного пользователя.
SUDO_USER
переменную окружения. Если он присутствует, он будет содержать имя пользователя, вызывающего sudo. Таким образом, вы можете (как пользователь root) chown $ SUDO_USER: $ SUDO_GID $ your_files. Точно так же вы можете проверить эти переменные, чтобы ваши команды adduser знали, какого пользователя добавить.