Разбираемся в различиях между su и sudo в Linux

Разбираемся в различиях между su и sudo в Linux Система

Разница между su и sudo и способы настройки sudo в Linux

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

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

Механизм действия

su (Substitute User):

  • Полностью переключает вас в сессию другого пользователя (по умолчанию — root)
  • Требует знания пароля целевой учетной записи
  • Все последующие команды выполняются с привилегиями этого пользователя до явного выхода
  • Нет ограничения на список доступных команд

sudo (Superuser Do):

  • Запускает отдельные команды с привилегиями root или указанного пользователя
  • Запрашивает ваш собственный пароль, а не пароль root
  • После выполнения команды вы остаетесь в своей сессии
  • Позволяет тонко настраивать доступные команды и права для разных пользователей

Преимущества sudo с точки зрения безопасности

  1. Ограничение привилегий: пользователь получает доступ только к тем командам, которые ему действительно нужны
  2. Аудит действий: все выполненные команды логируются в системном журнале
  3. Временные привилегии: права повышаются только на время выполнения конкретной команды
  4. Сохранение пароля root: пользователи не знают пароля от root-аккаунта, что снижает риск компрометации

Применение в различных дистрибутивах Linux

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

  • Ubuntu и его производные: Учетная запись root отключена, используется исключительно sudo
  • Debian, CentOS, Fedora: Поддерживают как su, так и sudo, при этом учетная запись root активна по умолчанию

Практическое применение: когда использовать su, а когда sudo

Примеры использования su

su                  # Переключение на пользователя root с запросом его пароля
su username         # Переключение на указанного пользователя
su -                # Переключение на root с загрузкой всего окружения
su -c 'команда'     # Выполнение одной команды с правами root

Примеры использования sudo

sudo command        # Выполнение одной команды с правами root
sudo -i             # Получение интерактивной сессии root, схоже с su -
sudo -s             # Запуск оболочки с правами root, но в текущем окружении
sudo -u username    # Выполнение команды от имени указанного пользователя

Комбинированное использование

Интересный случай представляет собой команда sudo su, которая использует гибкость sudo для получения полноценной root-сессии:

sudo su       # Получение сессии root, используя sudo (запрашивается ваш пароль)
sudo su -     # Аналогично sudo -i, полная root-сессия с окружением

Настройка sudo в Linux

Файл настроек sudoers

Все правила sudo хранятся в файле /etc/sudoers. Важно: никогда не редактируйте этот файл напрямую! Используйте специальную команду visudo, которая проверяет синтаксис и убережет вас от блокировки системы.

sudo visudo

Добавление пользователя в группу sudo

Самый простой способ предоставить пользователю административные права – добавить его в группу sudo (Debian, Ubuntu) или wheel (RHEL, CentOS):

sudo usermod -aG sudo username    # Для Debian/Ubuntu
sudo usermod -aG wheel username   # Для RHEL/CentOS

Настройка специфичных правил

Для более тонкой настройки можно определить пользовательские правила:

Базовый синтаксис:

USER HOST=(AS_USER) COMMANDS

Примеры правил:

  • Разрешить пользователю выполнять любые команды от имени root:
username ALL=(ALL:ALL) ALL 
  • Разрешить пользователю выполнять только определённые команды:
username ALL=(ALL) /usr/bin/apt-get, /sbin/reboot
  • Разрешить выполнение определённых команд без ввода пароля:
username ALL=(ALL) NOPASSWD: /sbin/shutdown, /sbin/reboot
  • Ограничение для группы пользователей:
%developers ALL=(ALL) /usr/bin/apt-get update

Создание модульных правил

В современных дистрибутивах Linux поддерживается директория /etc/sudoers.d/, где можно хранить отдельные файлы с правилами. Это упрощает администрирование:

sudo visudo -f /etc/sudoers.d/developers

Содержимое может выглядеть так:

%developers ALL=(ALL) /usr/bin/docker

Журналирование действий sudo

Все действия, выполненные с помощью sudo, по умолчанию логируются в системном журнале. В большинстве дистрибутивов эти записи можно найти в файле /var/log/auth.log или /var/log/secure.

Чтобы просмотреть последние действия sudo:

sudo grep sudo /var/log/auth.log

Практические рекомендации по безопасности

  1. Минимизируйте использование su: Отдавайте предпочтение sudo для лучшего контроля доступа
  2. Ограничьте список команд: Предоставляйте пользователям доступ только к тем командам, которые им нужны для работы
  3. Используйте NOPASSWD с осторожностью: Это удобно, но снижает безопасность
  4. Регулярно проверяйте логи: Отслеживайте подозрительную активность с использованием sudo
  5. Настройте таймаут: По умолчанию sudo «запоминает» пароль на 15 минут, что можно изменить

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

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

Правильная настройка и использование этих инструментов – одна из важных компетенций Linux-администратора, которая помогает обеспечить безопасность системы без чрезмерных ограничений для пользователей.

Оцените статью
Мир Линукс
Обсуждения