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