Разница между su и sudo и способы настройки sudo в Linux
Управление привилегиями в Linux – один из краеугольных камней безопасности системы. Две команды, su и sudo, часто вызывают путаницу у начинающих пользователей, хотя обе предназначены для получения повышенных прав в системе. В этой статье мы разберем принципиальные различия между этими командами и рассмотрим практические рекомендации по настройке sudo для безопасного администрирования.
Основные различия между su и sudo
Механизм действия
su (Substitute User):
- Полностью переключает вас в сессию другого пользователя (по умолчанию — root)
- Требует знания пароля целевой учетной записи
- Все последующие команды выполняются с привилегиями этого пользователя до явного выхода
- Нет ограничения на список доступных команд
sudo (Superuser Do):
- Запускает отдельные команды с привилегиями root или указанного пользователя
- Запрашивает ваш собственный пароль, а не пароль root
- После выполнения команды вы остаетесь в своей сессии
- Позволяет тонко настраивать доступные команды и права для разных пользователей
Преимущества sudo с точки зрения безопасности
- Ограничение привилегий: пользователь получает доступ только к тем командам, которые ему действительно нужны
- Аудит действий: все выполненные команды логируются в системном журнале
- Временные привилегии: права повышаются только на время выполнения конкретной команды
- Сохранение пароля 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
Практические рекомендации по безопасности
- Минимизируйте использование su: Отдавайте предпочтение sudo для лучшего контроля доступа
- Ограничьте список команд: Предоставляйте пользователям доступ только к тем командам, которые им нужны для работы
- Используйте NOPASSWD с осторожностью: Это удобно, но снижает безопасность
- Регулярно проверяйте логи: Отслеживайте подозрительную активность с использованием sudo
- Настройте таймаут: По умолчанию sudo «запоминает» пароль на 15 минут, что можно изменить
Правильный подход к управлению привилегиями – это баланс между безопасностью и удобством. В то время как su предлагает простое решение для переключения между пользователями, sudo обеспечивает гораздо более тонкий контроль и лучшие возможности аудита.
В корпоративных средах и на серверах рекомендуется полностью отказаться от использования su в пользу тщательно настроенной системы правил sudo. Для домашнего использования или на рабочих станциях подход может быть более гибким, но общие принципы безопасности необходимо соблюдать в любом случае.
Правильная настройка и использование этих инструментов – одна из важных компетенций Linux-администратора, которая помогает обеспечить безопасность системы без чрезмерных ограничений для пользователей.