Я пишу сценарій (насправді поєднання сценаріїв і 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. Аналогічно, ви можете перевірити ці змінні, щоб ваші команди аддусера знали, кого додати.