Пост

Различия входа под root в Linux - sudo, su

Различия входа под root в Linux - sudo, su

В статье рассматриваются основные различия между командами su и sudo в системе Linux, их способы использования и влияния на окружение пользователя при повышении привилегий до root. Анализируется порядок загрузки различных конфигурационных файлов, особенности запуска интерактивных и неинтерактивных оболочек, а также безопасность и практические рекомендации по работе с этими инструментами.

Основная информация

Основные различия между su и sudo

Команды su (substitute user) и sudo (substitute user and do) применяются для получения полномочий другого пользователя, зачастую root. Однако их механизмы работы существенно различаются.

Команда su запускает новую оболочку, требующую ввода пароля пользователя, под которого происходит переход. Например, su root потребует пароль root. При запуске su без параметров происходит вход под root.

В свою очередь, sudo основывается на конфигурации файла /etc/sudoers, где явно прописаны правила передачи полномочий. Для ее выполнения пользователь вводит собственный пароль, и если он соответствует правилам, получает права root или другого пользователя. Таким образом, sudo требует авторизации владельца сессионного пользователя, а не целевого.

Файл /etc/sudoers и правила разрешений

Файл /etc/sudoers содержит правила контроля доступа, в которых указываются:

  • Пользователи и группы, для которых применимы правила.
  • От имени каких пользователей или групп можно выполнять команды.
  • Какие конкретно команды разрешены для исполнения.

Виды оболочек: login shell, non-login shell и interactive shell

Понимание работы с командами смены пользователя требует знания о типах оболочек Linux.

Login shell запускается при входе в систему, например через SSH или используя su -. Такая оболочка инициирует загрузку конфигураций типа /etc/profile, ~/.bash_profile, ~/.bashrc. В результате задаются переменные окружения и основные настройки сеанса.

Non-login shell – оболочка, которая запускается в уже активной сессии, например при открытии терминала в графической среде или вызове bash внутри уже работающей shell. Загружается только ~/.bashrc, содержащий настройки интерактивности.

Interactive shell предполагает пользовательский ввод и немедленную обратную связь - это привычный терминальный интерфейс. Отличается от неинтерактивных, которые применяются для запуска скриптов.

Признаком интерактивной оболочки является переменная среды PS1.

Использование su

Использование su без параметров требует введения пароля целевого пользователя (часто root). По умолчанию su запускает non-login shell, меняет рабочую директорию на домашнюю директорию рута, загружает ~/.bashrc рута, но без полной инициализации окружения. При этом non-login shell не позволяет корректно выйти через logout, только через exit.

Использование su не очень безопасно, так как сохраняется часть окружения исходного пользователя, что может приводить к потенциальным уязвимостям — например, через алиасы, функции и незащищённые пути.

Использование sudo su

sudo su — часто используемый приём, где sudo запускает команду su, фактически поднимая права до root. При этом:

  • Пользователь вводит свой пароль, а не рута.
  • Запускается оболочка su без параметров, которая запускает non-login shell под root.
  • Загружается только ~/.bashrc root или его аналог, а окружение частично сохраняется.

Это менее предпочтительный способ с точки зрения безопасности, поскольку окружение может содержать уязвимые элементы.

Использование sudo -s

Другая форма — sudo -s, которая запускает интерактивную оболочку под root с некоторыми сохранёнными переменными окружения, без полной смены логина (non-login shell). Рабочая директория остаётся прежней. Такой способ подходит, когда не требуется чистое окружение.

Использование su -

Для создания полноценной login-сессии под root используется su - или su --login. Эта команда:

  • Требует пароль root.
  • Полностью загружает окружение пользователя root (/etc/profile, ~/.bash_profile, ~/.bashrc).
  • Меняет домашнюю директорию на /root.
  • Инициализирует полноценную login shell.

Данный способ уже неплох, однако по прежнему необходимо вводить пароль от root, что не очень безопасно и может быть недоступно в некоторых системах.

Использование sudo su -

Полноценный login shell с использованием полноценного окружения root и вводом пароля текущего пользователя. Фактически, из минусов только комбинация из нескольких команд.

Использование sudo -i

Для полноценного логина под root с использованием sudo применяется sudo -i. Эта команда:

  • Запускает non login shell с соответствующими настройками окружения root.
  • Меняет рабочую директорию на домашнюю root.
  • Загружает ~/.bash_profile и другие конфигурационные файлы, как при настоящем входе.

sudo -i более соответствует философии Unix и принципу KISS (Keep It Simple, Stupid), позволяя получить чистое окружение root без лишних команд.

Сравнение методов и рекомендации по безопасности

С точки зрения безопасности и корректности обусловленного окружения используются следующие приёмы:

  • sudo -i — оптимальный и рекомендованный способ для получения полноценного окружения root через sudo.
  • sudo su - - также допустимый вариант, из минусов которого только комбинация команд.
  • su - (или su --login) подходит при наличии пароля root и необходимости полноценной сессии. Не рекомендуется из-за необходимости ввода пароля от root.
  • sudo su, sudo -s менее предпочтительны из-за потенциальных рисков сохранения некорректного окружения.
  • su требует ввода пароля root, существует риск смещения контекста пользователя, что нежелательно с точки зрения безопасности, не рекомендуется.

Вывод

Технически команды su и sudo обеспечивают переход под другого пользователя с повышенными привилегиями, но различаются по механике аутентификации, загрузке окружения и безопасности.

Использование sudo базируется на централизованной и гибкой системе контроля, позволяющей избежать необходимости распространения root-пароля и обеспечивающей аудит действий. При этом корректное применение sudo -i создаёт полноценную сессию root.

Авторский пост защищен лицензией CC BY 4.0 .

© ZarenOFF. Некоторые права защищены.

Использует тему Chirpy для Jekyll

Популярные теги