Обе команды sudo и su позволяют выполнить команду от любого пользователя, в том числе от root. Но есть между ними одно принципиальное различие.
- Для выполнения команды от имени другого пользователя с помощью su, вы должны указать пароль другого пользователя.
- Для выполнения команды от имени другого пользователя с помощью sudo, вы должны указать свой пароль.
SU
Команда su появилась раньше. При запуске без параметров она запрашивает пароль суперпользователя, при успехе подменяет имя текущего пользователя на root, оставляя текущие переменные окружения (почти все). Для запуска со всеми переменными окружения root:
su -
Недостатки su:
- Можно забыть запустить su с нужными параметрами окружения.
- Пользователь должен знать все пароли от нужных ему юзеров. При увольнении сотрудника необходимо менять все пароли, которые он знал.
- root должен иметь пароль.
- По умолчанию не логирует действия пользователя.
- Невозможно определить кто именно запустил команду от имени другого пользователя.
- Нельзя ограничить права root.
Достоинства su:
- Работает "из коробки", не требует обязательных настроек.
SUDO
Команда sudo появилась позже и значительно усилила безопасность системы. Теперь не нужно раздавать пароли направо и налево. Можно тонко настраивать права доступа. Теперь root вообще можт не иметь пароля.
Для запуска со всеми переменными окружения root:
sudo -i
Недостатки sudo:
- Требует настройки.
- Писать дольше :)
Достоинства sudo:
- Пользователь не должен знать чужие пароли, в том числе от root.
- По умолчанию логирует действия пользователя.
- Можно определить кто именно запустил команду от имени другого пользователя.
- Можно тонко настроить права.
- Можно запустить только одну команду с правами другого пользователя без переключения в чужую оболочку.
Послесловие
Правила хорошего тона: не мешайте в коде вместе sudo и su, лучше использовать sudo.
Если вы единственный администратор на сервере, то нет ничего зазорного в использовании su.
В Debian дистрибутивах root не имеет пароля, все административные действия должны производиться с помощью sudo или его графический аналог gksudo.
Команда sudo запоминает на 15 секунд (по умолчанию) введённый пароль, последующая команда этот пароль не запрашивает. Время сессии можно изменить.