Разница между sudo su, su -, sudo -i и sudo -s в Linux: как правильно войти под root
Почему путаница в командах перехода на root приводит к ошибкам
Начинающие системные администраторы часто используют команды sudo su, su, su - и sudo -i как полные синонимы для входа под учетную запись администратора root. Однако между ними существует фундаментальная разница: подгружаются ли системные переменные окружения ($PATH, $HOME, $USER) суперпользователя или сессия сохраняет настройки обычного непривилегированного пользователя. Ошибочный выбор команды часто ломает запуск системных скриптов.
Сравнительная таблица команд переключения на root
| Команда | Чей пароль вводить | Тип оболочки | Переменные окружения ($HOME, $PATH) |
|---|---|---|---|
sudo -i | Пароль текущего юзера | Login Shell | Чистые переменные root (/root) — Рекомендуемый способ! |
su - | Пароль суперпользователя root | Login Shell | Чистые переменные root (/root). |
sudo su | Пароль текущего юзера | Non-login Shell | Смешанные: часть переменных остается от старого юзера. |
sudo -s | Пароль текущего юзера | Non-login Shell | Остается домашняя папка текущего пользователя ($HOME=/home/user). |
Подробный разбор каждой команды и сценарии использования
1. Команда sudo -i (Золотой стандарт для системного администратора)
Флаг -i (login shell) запускает полноценную чистую сессию root, точно так же, как если бы вы физически вошли под root на сервере:
sudo -i- Запрашивает ваш личный пароль пользователя (пароль root знать не нужно).
- Переменная
$HOMEменяется на/root. - Загружаются все системные файлы инициализации (
/etc/profile,~/.bashrc). - Каталог мгновенно меняется на домашнюю папку root.
2. Команда su - (Классический вход через пароль root)
Команда su расшифровывается как Switch User. Дефис - (или флаг -l) указывает системе полностью сбросить окружение:
su -Особенность: Команда запросит пароль учетной записи root. В современных системах Ubuntu пароль root по умолчанию заблокирован, поэтому команда выдаст ошибку Authentication failure, если пароль root не был задан вручную.
3. Почему команда sudo su считается плохой практикой
Многие новички по привычке пишут:
sudo suВ этом случае запускается оболочка без флага -. Переменная $HOME и системные пути $PATH могут частично указывать на домашнюю папку непривилегированного пользователя /home/user. Если в этой сессии создать файл или установить модуль npm/pip, файлы конфигурации в папке пользователя получат права root:root, после чего обычный пользователь потеряет к ним доступ!
Шаг 4: Как проверить текущее окружение
После входа под root проверьте, где вы находитесь и какие пути загружены:
whoami
pwd
echo $HOME
echo $PATHТиповые ошибки администраторов
- Запуск программ через sudo su без очистки окружения: Создание конфигов в
/home/ubuntu/.configс правами суперпользователя приводит к ошибкам Permission denied при возврате в обычного пользователя. - Отказ от выхода из сессии root: Забытая открытая консоль root опасна. Всегда выходите из режима суперпользователя командой
exitили комбинацией Ctrl + D сразу после завершения административных задач.
ITSTM настроит матрицы доступов, правила sudoers без необходимости раздачи root-паролей и аудит привилегированных сессий.
Частые вопросы (FAQ)
Какая команда лучше всего подходит для повседневной работы на Ubuntu?
Лучшей практикой является выполнение разовых команд через обычный 'sudo имя_команды'. Если требуется длительная работа в консоли админа, используйте 'sudo -i'.
Почему при вводе пароля в терминале после sudo ничего не отображается?
Это стандартный механизм безопасности Linux (Blind Password). Символы и звездочки намеренно не выводятся на экран, чтобы никто не мог подсмотреть длину вашего пароля. Просто введите пароль вслепую и нажмите Enter.
Как задать пароль суперпользователя root в Ubuntu, если он не установлен?
Выполните команду: sudo passwd root и дважды введите новый надежный пароль.
Что делает команда sudo -s?
Команда sudo -s запускает командную оболочку, указанную в переменной окружения SHELL текущего пользователя, с правами root, но сохраняет текущий рабочий каталог и большую часть пользовательских переменных.