Я пишу сценарій (насправді поєднання сценаріїв і makefile), який встановлює зовнішні залежності: деякі apt-get
команди, деякі git
клонування, створення, встановлення, додавання користувачів до груп, ...
Для деяких операцій у цих сценаріях потрібні дозволи суперпользователя, деякі - не.
До цих пір я керував усім процесом make з судо, але він має деякі недоліки:
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) порушити $ SUDO_USER: $ SUDO_GID $ your_files. Аналогічно, ви можете перевірити ці змінні, щоб ваші команди аддусера знали, кого додати.