Ось відмінності:
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>
. Це завантажить усе звичайне середовище користувача. Можливо, трапляються випадки, коли ви цього не хочете, але якщо ви намагаєтеся вирішити проблему, яка виникає у користувача, може бути корисним його оточення, як зазвичай.