sudo и su в Linux

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

    Основные понятия

    При использовании su или sudo важно учитывать конкретный сценарий запуска новой оболочки: нужна ли нам среда целевого пользователя или нет? Если да, то нужно использовать параметры, запускающие оболочку с логином, а если нет — параметры, запускающие оболочку без логина.


    su - Измените идентификатор пользователя или станьте суперпользователем (root). С помощью этой команды можно запустить как оболочку с логином, так и без него
    su (от англ. Substitute User — «подменить пользователя») позволяет переключаться с текущего пользователя на другого внутри текущей терминальной сессии. Некоторые особенности:
    По умолчанию переключается на пользователя root, если имя пользователя не указано.
    Для использования su необходимо ввести соответствующий пароль (если только команду не вызывает пользователь root).
    Если введён правильный пароль, su создаёт новый процесс командного интерпретатора с такими же реальными и эффективными идентификаторами пользователя и группы, что и у указанного пользователя
    Важно: если запустить su без ключа (например, su или su localadmin), то все переменные, за исключением PATH, USER и некоторых других, будут унаследованы от пользователя, который запустил утилиту su.

    su -l (или --login) имитирует «полноценный» вход под оболочкой пользователя. Некоторые особенности:
    Загружает окружение целевого пользователя, включая его файлы инициализации (.bashrc, .profile), устанавливает PATH и меняет каталог на домашний каталог.
    Это рекомендуется для переключения пользователей, так как позволяет работать в окружении целевого пользователя так же, как при полноценном входе в систему.

    #Вход в оболочку под пользователем root
    su #запустят интерактивную оболочку для входа в систему под именем user2 su - mega su -l mega su --login mega #запустит интерактивную оболочку без входа в систему под именем user2 su user2 #запустят интерактивную оболочку для входа в систему под именем root su - root или su - #запустят интерактивную оболочку без входа в систему под именем root su root или su #Выполняйте команды от имени другого пользователя (в том числе суперпользователя)

    Команда в основном используется для временного получения прав суперпользователя, пользователь, использующий ее, должен быть указан в файле sudoers
    Точно так же, как su, sudo позволяет нам вызывать оболочки как для входа, так и без входа в систему:
    Чтобы добавить пользователей в sudoers , нужно стать root , а затем выполнить команду

    #запустят интерактивную оболочку для входа в систему под именем user2 sudo su - user2 sudo su -l user2 sudo su --login user2 #запустят интерактивную оболочку без входа в систему под именем user2 sudo su user2 sudo -u user2 -s #запустят интерактивную оболочку для входа в систему под именем root sudo su - root sudo su sudo -i #запустят интерактивную оболочку для входа в систему под именем root, выполнят команду и вернутся к исходному пользователю sudo -i #запустят интерактивную оболочку без входа в систему под именем root sudo su root sudo su #запустит оболочку без входа в систему под именем root sudo -s sudo -u root -s
    Базовая sudo Конфигурация и использование

    Основное назначение su — su - target-username
    Однако при переключении на пользователя root указывать целевое имя пользователя необязательно:

    su -root #or su -

    Использование дефиса (-) гарантирует, что будет загружена среда целевого пользователя
    Без него будет использоваться среда предыдущего пользователя

    su Пароль: root@debian:/home/carol#

    С другой стороны, есть команда sudo . С ее помощью можно выполнить команду от имени пользователя root или любого другого пользователя. С точки зрения безопасности sudo гораздо лучше, чем su , поскольку у нее есть два основных преимущества:
    Чтобы выполнить команду от имени пользователя root, вам понадобится не пароль пользователя root, а только пароль вызывающего пользователя в соответствии с политикой безопасности. Политика безопасности по умолчанию — sudoers — указана в /etc/sudoers и /etc/sudoers.d/*.
    sudo Позволяет запускать отдельные команды с повышенными привилегиями, а не открывать новую подоболочку с правами root, как это делает su


    Обычно sudo используется как sudo -u target-username command. Однако для запуска команды от имени пользователя root опция -u target-username не требуется:

    sudo -u mimi whoami mimi sudo whoami root

    sudoers Для кэширования учетных данных будет использоваться временная метка для каждого пользователя (и каждого терминала), поэтому вы сможете использовать sudo без пароля в течение 15 минут по умолчанию. Это значение по умолчанию можно изменить, добавив параметр timestamp_timeout в качестве настройки Defaults в /etc/sudoers (например, Defaults timestamp_timeout=1 установит время ожидания кэширования учетных данных в одну минуту).


    Файл sudoers

    Следующая запись в /etc/sudoers означает, что пользователь root (root) может входить в систему со всех хостов (ALL), от имени всех пользователей и всех групп ((ALL:ALL)), а также выполнять все команды (ALL)

    root ALL=(ALL:ALL) ALL

    То же самое относится к членам группы sudo — обратите внимание, что имена групп обозначаются предшествующим знаком процента (%).

    #Разрешить членам группы sudo выполнять любую команду %sudo ALL=(ALL:ALL) ALL

    Таким образом, чтобы пользователь carol мог проверять статус apache2 с любого хоста от имени любого пользователя или группы, вам нужно добавить в файл sudoers следующую строку:

    Кэрол ALL=(ALL:ALL) /usr/bin/systemctl status apache2

    Возможно, вы захотите избавить carol ее от необходимости вводить пароль для выполнения systemctl status apache2 команды. Для этого измените строку следующим образом:

    carol ALL=(ALL:ALL) NOPASSWD: /usr/bin/systemctl status apache2

    Допустим, теперь вы хотите ограничить доступ к хостам адресом 192.168.1.7 и разрешить carol запускать systemctl status apache2 от имени пользователя mimi

    Кэрол 192.168.1.7=(mimi) /usr/bin/systemctl status apache2

    Теперь вы можете проверить состояние веб-сервера Apache от имени пользователя mimi:

    sudo -u mimi systemctl status apache2

    Если carol нужно повысить до системного администратора и вы хотите предоставить ей все привилегии, проще всего включить ее в специальную группу sudo с параметрами usermod и -G (можно также использовать параметр -a, который гарантирует, что пользователь не будет удален из других групп, к которым он может принадлежать):

    sudo useradd -aG sudo carol

    В семействе дистрибутивов Red Hat группа wheel является аналогом специальной административной группы sudo в системах Debian.


    Вместо того чтобы редактировать /etc/sudoers напрямую, просто используйте команду visudo от имени пользователя root (например: visudo), которая откроет /etc/sudoers в предустановленном текстовом редакторе. Чтобы изменить текстовый редактор по умолчанию, добавьте параметр editor в качестве настройки Defaults в /etc/sudoers.

    Кроме того, при использовании EDITOR можно указать текстовый редактор с помощью переменной окружения visudo (например: EDITOR=/usr/bin/nano visudo)

    Помимо пользователей и групп, вы также можете использовать псевдонимы в /etc/sudoers. Существует три основных категории псевдонимов, которые вы можете задать: псевдонимы хостов (Host_Alias), псевдонимы пользователей (User_Alias) и псевдонимы команд (Cmnd_Alias). Вот пример:

    # Псевдоним хоста Host_Alias SERVERS = 192.168.1.7, server1, server2 # Псевдоним пользователя User_Alias REGULAR_USERS = john, mary, alex User_Alias PRIVILEGED_USERS = mimi User_Alias ADMINS = carol, %sudo, PRIVILEGED_USERS, !REGULAR_USERS # Псевдоним команды Cmnd_Alias SERVICES = /usr/bin/systemctl *

    Псевдонимы хостов Они включают в себя список имен хостов, IP-адресов, а также сетей и сетевых групп (перед которыми ставится знак +). Также можно указать сетевые маски. Псевдоним хоста SERVERS включает в себя IP-адрес и два имени хоста: Host_Alias SERVERS = 192.168.1.7, server1, server2


    Псевдонимы пользователей Они включают в себя список пользователей, разделенных запятыми, с указанием имен пользователей, групп (с префиксом %) и сетевых групп (с префиксом +). Вы можете исключить определенных пользователей с помощью !. Например, пользовательский псевдоним ADMINS включает в себя пользователя carol, членов группы sudo и тех членов пользовательского псевдонима PRIVILEGE_USERS, которые не входят в пользовательский псевдоним REGULAR_USERS: User_Alias ADMINS = carol, %sudo, PRIVILEGED_USERS, !REGULAR_USERS
    Псевдонимы команд Они включают в себя список команд и каталогов, разделенных запятыми. Если указан каталог, то будут включены все файлы из него, но подкаталоги игнорируются. Псевдоним команды SERVICES включает в себя одну команду со всеми ее подкомандами, как указано звездочкой (*): Cmnd_Alias SERVICES = /usr/bin/systemctl *

    В результате применения псевдонимов строка ADMINS SERVERS=SERVICES под разделом User privilege specification переводится как: все пользователи из ADMINS могут использовать sudo для выполнения любой команды из SERVICES на любом сервере из SERVERS.

    Существует четвертый тип псевдонимов, которые можно добавить в /etc/sudoers: псевдонимы для запуска от имени (Runas_Alias). Они очень похожи на псевдонимы пользователей, но позволяют указывать пользователей по их идентификатору (UID). В некоторых случаях эта функция может оказаться полезной.


    Источники
    Последнее изменение: 31.05.2026 12:46


    Связанные темы
    Здесь пока нет комментариев
    Добавлять комментарии могут только авторизованные пользователи

    Авторизоваться
    Я буду рекламой
    Я тоже буду рекламой
    И я
    ВВЕРХ