Ось відмінності:
su <someuser>запускає оболонку для користувача someuser. Якщо ви не root, вам буде запропоновано пароль someuser.
su(без імені користувача) запустіть оболонку для користувача root(після запиту пароля root).
sudoзапитує ваш пароль і (якщо у вас є права на sudo) виконує команду з привілеями root ( sudo rebootзапитує ваш пароль і перезавантажує комп'ютер).
sudo su <somesuer>виконує suз привілеями root. Тому він не запитує someuserпароль. Однак він попросить ваш пароль, щоб підтвердити свої права на sudo. Після цього він запустить оболонку для користувача -користувача .
Що стосується привілеїв , то різниці для оболонки, яку відкриває sudo su <someuser>або на неї, немає su <someuser>. Це не проблема безпеки, оскільки процес оболонки не може перерости до привілеїв батьківського процесу.
Ви можете побачити різницю, якщо подивитися на дерево процесу. sudo su <someuser>показує (припускаючи bash):
+───bash───su───bash
Поки su <someuser>показує:
+───bash───sudo───su───bash
Наступне ваше питання - це, мабуть, як ввести пароль у бездоганному сценарії, який не потребує введення користувача. Я думаю, що є два варіанти:
- Запустіть скрипт із cron (або будь-якого його варіанту) та запустіть його як root
- Запустіть сценарій зі свого аккаунта і використовувати опцію -S з Суду на зразок цього:
echo <yourpassword> | sudo -S su -l <someuser>або ще краще: echo <yourpassword> | sudo -S su -l <someuser> -c '<somecommand>'. Переконайтеся, що сценарій читається лише ви самі, оскільки в ньому є ваш пароль. Більш опосередковано, ви можете зберігати свій пароль у файлі та котувати його до sudo. Тоді ваш сценарій можна прочитати, але файл вашого пароля не може бути.
su - <someuser>. Це завантажить усе звичайне середовище користувача. Можливо, трапляються випадки, коли ви цього не хочете, але якщо ви намагаєтеся вирішити проблему, яка виникає у користувача, може бути корисним його оточення, як зазвичай.