Вот различия:
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. Тогда ваш сценарий может быть читаемым, но ваш файл паролей не может быть.