У мене є довгий і тривалий скрипт bash, де кілька команд потрібно запустити як root, тоді як більшість команд потрібно виконувати як звичайний користувач перед sudo, тому що це зіпсує право власності на файл і таке інше.
Я придумав деякі методи, але кожен з них має деякі проблеми
Спосіб 1: Використання sudo всередині файлу
#!/bin/bash
sudo echo "I must be run by root"
touch needsToBeOwnedByUser1
echo "needs to be run by user"
sleep 1000
sudo echo "I, again, must be run by root"
Це виглядало б добре, від того, як написано код. sudo
пишеться перед кількома твердженнями, які насправді потрібно запускати під корінь, але якщо час між кожним sudo
викликом занадто довгий, sudo
знову запитує пароль. Крім того, якщо перше виконання sudo
не вдалося, наприклад, через недійсний пароль, решта сценарію все ще виконується.
Спосіб 2: використання sudo для виклику файлу та повернення до початкового користувача при необхідності
#!/bin/bash
echo "I must be run by root"
su username -c 'touch needsToBeOwnedByUser1'
su username -c 'echo "needs to be run by user"'
su username -c 'sleep 1000'
echo "I, again, must be run by root"
Це теж відстійно, бо мені потрібно додавати su username -c
перед майже кожним рядком. Також можна знайти оригінальне ім'я користувача після sudo
, можливо, але громіздкого.
Чи є кращий спосіб?
Редагувати: Я розміщував тут лише невеликі, безглузді сценарії, щоб показати, про що я говорю. У фактичному сценарії у мене є рядки, для яких потрібен sudo (запуск та зупинка послуг), деякі рядки, де неважливо, чи є sudo і досить багато рядків, які дійсно потрібно виконувати без sudo.
man sudo
? -v, --validate
'Оновіть кешовані дані користувача, при необхідності автентифікуючи користувача. Для додатка sudoers це час подовжує тайм-аут sudoers ще на 15 хвилин, але не виконує команду. Не всі політики безпеки підтримують кешовані дані ". (Якщо ви запускаєте його досить часто, автентифікація
sudo
якщо він повинен мати підвищені дозволи. Але немає сенсу переходитиsu username -c
на запускecho
. Іншими словами, це звучить як [XY]. Чи можете ви відредагувати та пояснити, що насправді робить ваш сценарій, і чому ви вважаєте, що потрібно так часто перемикати користувачів?