2.2.9 Привилегии и root
Правила безопасности при работе с привилегиями
Утилита sudo
Утилита su
Таблица различий использования команд su, su - и sudo
Окружение
- Версия ОС: 7.3
- Конфигурация ОС: Рабочая станция
- Редакция ОС: Стандартная
Вы можете подробнее ознакомиться с привилегиями пользователя root и их использованием в работе, просмотрев наши обучающие видео:
-
на RuTube — Привилегии и root;
-
в Яндекс.Дзен — Привилегии и root;
-
в VK Видео — Привилегии и root.
На наших каналах вы также сможете найти много другой полезной информации.
Правила безопасности при работе с привилегиями
В среде разработчиков, администраторов и пользователей Unix-подобных систем давно сложились негласные правила, основанные на жестких требованиях информационной безопасности, включающих минимизацию привилегий, изоляцию процессов и строгий аудит.
Правило 1.
Пользовательские прикладные задачи, такие как работа с браузером, почтовым клиентом, офисными пакетами и графическими редакторами, следует выполнять исключительно с правами непривилегированного пользователя. В противном случае при выполнении процессов с максимальными правами root любая уязвимость в безопасности приложения может фатально отразиться на целостности всей операционной системы.
Правило 2.
Любые административные действия (развертывание пакетов и администрирование системы) должны выполняться строго через механизмы повышения привилегий sudo или su, а не через прямой вход под root.
Данное правило распространяется как на эмуляторы терминала в графической оболочке, так и на работу в виртуальных консолях (TTY).
При использовании команды su в интерактивном режиме (с открытием новой командной оболочки) обязательно завершайте сеанс (командой exit или с помощью горячих клавиш Ctrl+D) сразу после выполнения целевых действий. Оставлять активные привилегированные сессии в фоновом режиме не допускается.
Правило 3.
Все сетевые и системные службы (включая веб-серверы, DNS и почтовые сервисы) должны запускаться с минимально необходимыми для их работы правами. Прямой запуск сервисов от имени учетной записи root не допускается. В готовом ПО назначение непривилегированного пользователя реализуется через конфигурационные файлы служб. При разработке собственного ПО следует проектировать архитектуру программного обеспечения так, чтобы код исполнялся в контексте непривилегированного пользователя, созданного изолированно под конкретную задачу.
Правило 4.
Не рекомендуется использовать биты SUID и SGID для предоставления пользователям административных полномочий без входа под root или использования sudo и su. Для безопасного предоставления прав на выполнение привилегированных операций используйте исключительно штатные инструменты авторизации sudo. Файлы с установленным SUID-битом создают критические уязвимости и риски безопасности всей системы.
Утилита sudo
sudo — это утилита, позволяющая обычному (непривилегированному) пользователю выполнять конкретные административные действия (например, установку пакетов или изменение системных настроек) без необходимости полного переключения на учетную запись root или прямого входа под ним.
Правила, используемые sudo для принятия решения о предоставлении доступа, находятся в файле /etc/sudoers. Пример правил, предоставляющих пользователям, являющимися членами группы rpm, возможность устанавливать, обновлять и удалять пакеты в системе, приведен в файле /usr/share/doc/sudo-/sample.sudoers.
Примечание.
Для редактирования файла /etc/sudoers следует использовать программу visudo, которая проверяет синтаксис и, тем самым, позволяет избежать ошибок в правилах.
Синтаксис утилиты имеет следующий вид:
sudo [<опции>] [<-u> <имя_пользователя>] <команда> [<аргументы>]
где:
[<опции>]— опции утилиты;[<-u> <имя_пользователя>]— параметр запуска команды от имени конкретного пользователя, не отroot;<команда>— команда, которую необходимо выполнить с применениемsudo;[<аргументы>]— аргументы команды.
Основные опции утилиты:
-g,--group— устанавливает указанную группу в качестве основной для выполнения команды;-i,--login— запускает командную оболочку целевого пользователя как login shell. Это означает, что будут прочитаны файлы профиля (.profile, .bash_profile), а текущий каталог сменится на домашний каталог пользователя;-s,--shell— запускает оболочку, указанную в переменной окружения$SHELL(или оболочку по умолчанию из /etc/passwd);-E,--preserve-env— сохраняет текущие переменные окружения пользователя, не применяя политикиsudoпо их очистке;-H,--set-home— устанавливает переменную$HOMEв домашний каталог целевого пользователя.
Если при первом запуске команды sudo от имени непривилегированного пользователя test на экране отображается следующее предупреждение:
[test@vbox ~]$ sudo -s Мы полагаем, что ваш системный администратор изложил вам основы безопасности. Как правило, всё сводится к трём следующим правилам: №1) Уважайте частную жизнь других. №2) Думайте, прежде чем что-то вводить. №3) С большой властью приходит большая ответственность. По соображениям безопасности пароль, который вы введёте, не будет виден. [sudo] пароль для test:
а после ввода пароля пользователя появляется данное сообщение:
[sudo] пароль для test: test отсутствует в файле sudoers. Администратор был оповещён об этом событии. [test@vbox ~]$
это означает, что при установке РЕД ОС на шаге создания пользователя не был установлен флаг «Сделать этого пользователя администратором».
Для добавления прав на использование sudo достаточно внести пользователя test в системную группу wheel. Для этого выполните следующую команду от имени администратора:
usermod -aG wheel <имя_пользователя>
Любые изменения в составе групп пользователя, включая добавление прав на использование sudo, вступают в силу только после повторной авторизации. Если пользователь находится в системе в момент изменения прав, ему необходимо завершить текущий сеанс работы (выполнить Log out) и войти заново.
Для лишения пользователя прав на исполнение команд через sudo необходимо исключить его учетную запись из системной группы wheel.
Утилита su
su — утилита, позволяющая переключиться на учетную запись другого пользователя (чаще всего суперпользователя root) и запустить новый интерактивный терминальный сеанс (отдельную командную оболочку).
Синтаксис утилиты имеет следующий вид:
su [<опции>] [-] [<имя_пользователя>[<параметры>...]]
где:
[<опции>]— основные опции утилиты;[-]— аргумент, который является краткой формой опции--login. Он создает среду, аналогичную той, которая была бы запущена при реальном входе пользователя в систему;[<имя_пользователя>]— имя пользователя (или его UID), от которого необходимо выполнить команду. Если этот аргумент не указан, по умолчанию используетсяroot. Выполнение командыsuбез аргументов аналогично выполнению командыsu root;[<параметры>...]— дополнительные аргументы, которые передаются командной оболочке целевого пользователя.
Основными опциями утилиты являются:
-c,--command— позволяет выполнить команду, указанную после данного ключа в кавычках, и завершить работу утилиты. Создает новую сессию для этой команды. Например:
su -с "dnf update"
-s,--shell— позволяет явно указать, какую командную оболочку (/bin/bash,/bin/zshи т. д.) использовать вместо оболочки по умолчанию из файла /etc/passwd целевого пользователя;-P,--pty— создает для сессии псевдо-терминал (pseudo-terminal). Это повышает безопасность, так как новый пользователь не разделяет терминал с оригинальным сеансом;–,-l,--login— при получении привилегий другого пользователя запускает отдельную оболочку со значениями переменных окружения того пользователя, чьи привилегии были получены.
Различия команд su и su -
Главное различие между командами su и su - заключается в том, как именно настраивается окружение (переменные среды, домашний каталог и пути к исполняемым файлам) после переключения на другого пользователя (по умолчанию — на root).
При выполнении команды su непривилегированный пользователь user получит права root, но сохранит окружение текущего (обычного) пользователя:
- домашний каталог пользователя останется неизменным — /home/user/;
- переменные окружения, такие как
$HOME,$USER,$SHELL, могут не обновиться или обновиться частично; - переменная
$PATHсохранит значение от обычного пользователя, что может привести к невозможности запуска системных утилит из стандартных путей /sbin, /usr/sbin.
При выполнении команды su - непривилегированным пользователем user будет запущен полноценный сеанс входа под учетной записью root:
- домашний каталог пользователя — изменится на /root/;
- переменные окружения — установятся заново согласно профилю
root; - переменная
$PATHинициализируется корректно. Все административные утилиты из каталогов /sbin, /usr/sbin станут доступны для запуска напрямую по их имени.
Ниже приведен пример, демонстрирующий различие в переменных окружения при выполнении команд su и su -:
[user@vbox ~]$ su Пароль: [root@vbox user]# env | grep user SSH_AUTH_SOCK=/run/user/1000/keyring/ssh PWD=/home/user LOGNAME=user USERNAME=user XDG_SESSION_CLASS=user USER=user XDG_RUNTIME_DIR=/run/user/1000 PATH=/root/.local/bin:/root/bin:/home/user/.local/bin:/home/user/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus MAIL=/var/spool/mail/user [root@vbox user]# exit exit
и
[user@vbox ~]$ su - Пароль: [root@vbox ~]# env | grep user [root@vbox ~]#
Из рассмотренных выше различий можно вывести следующее правило:
Правило 5.
Использование команды su без явного указания имени пользователя и без опции - создает асинхронную среду, что часто становится причиной ошибок при выполнении административных задач из-за некорректных переменных $PATH. В целях безопасности и предсказуемости поведения системы рекомендуется применять su - или su --login во всех случаях, кроме тех, где требуется целенаправленное сохранение текущего окружения.
Таблица различий использования команд su, su - и sudo
Ниже приведена таблица различий использования команд su, su - и sudo.
|
Команда |
Описание |
Текущий каталог
( |
|
|
|
|
$PATH
|
( |
Комментарий |
|---|---|---|---|---|---|---|---|---|---|
su
|
При вызове |
не изменяется | /root | user | user | user |
DESKTOP_SESSION="mate"
|
||
|
или
|
Запустить shell в его начальной среде, как если бы root действительно зарегистрировался в системе. Оболочка получает правильный environment. Чистая сессия root.
|
изменяется на /root |
/root | root | root | — | — | Рекомендовано к использованию | |
su root
|
Аналогично команде |
не изменяется | /root | user | user | user |
DESKTOP_SESSION="mate"
|
||
su - root
|
Аналогично |
изменяется на /root |
/root | root | root | — | — | Рекомендовано к использованию | |
su root -
|
Аналогично команде
|
не изменяется | /root | user | user | user |
DESKTOP_SESSION="mate"
|
||
sudo -i
|
Получить оболочку root и его environment. Разрешено, если пользователь добавлен в /etc/sudoers. |
изменяется на /root |
/root | root | root | user | — | Рекомендовано к использованию | |
sudo su
|
Получить оболочку root и его environment. Разрешено, если пользователь добавлен в /etc/sudoers. |
не изменяется (/home/user) |
/root | root | root | user | — | ||
sudo -s
|
Команда запускает shell суперпользователя root, но без смены текущего каталога, при этом не импортируются некоторые переменные окружения. |
не изменяется (/home/user) |
/root | root | root | user | — | ||
sudo <команда>
|
Команда исполняется с правами суперпользователя root. |
не изменяется (/home/user) |
/root | root | root | user | — | ||
sudo -E
|
Выполнение команд с правами суперпользователя root с сохранением переменных окружения пользователя. |
не изменяется (/home/user) |
/root | root | root | user |
DESKTOP_SESSION="mate"
|
Дата последнего изменения: 07.08.2026
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.