Найти в Дзене

Различия между командами sudo и su

Оглавление

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

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

SUDO (Substitute User and do)

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

Преимущества sudo:

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

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

Чтобы выполнить команду с привилегиями суперпользователя с помощью sudo, необходимо ввести следующую конструкцию:

sudo <команда>

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

Стоит помнить, что выполнять команду sudo могут те пользователи, которые состоят в одноименной группе.

Если ввести команду и не состоять в группе sudo, то появится ошибка
Если ввести команду и не состоять в группе sudo, то появится ошибка

Для того, чтобы добавить пользователя в нее можно ввести команду:

sudo usermod -aG sudo <имя пользователя>

Ввод и выполнение команды возможны либо от пользователя root, либо от пользователя уже состоящего в группе.

Посмотреть группы, в которых состоит ваш пользователь можно при помощи команды groups. Видим, что пользователь добавлен в группу sudo.
Посмотреть группы, в которых состоит ваш пользователь можно при помощи команды groups. Видим, что пользователь добавлен в группу sudo.

Вторым способом добавления пользователя в группу является использование команды visudo, которая после ввода откроет для редактирования файл, находящийся по пути /etc/sudoers. Но, чтобы воспользоваться visudo нужно либо войти под аккаунтом суперпользователя (смотрите текст ниже), либо указать перед названием sudo.

sudo visudo

Файл sudoers, содержащий настройки для работы утилиты sudo
Файл sudoers, содержащий настройки для работы утилиты sudo

После ввода откроется файл sudoers для редактирования, в котороый нужно внести следующую строку:

<имя пользователя> ALL=(ALL:ALL) ALL

После сохранения файла у пользователя, которого вы укажите появится возможность использовать команду sudo в терминале. Помните, что редактировать файл sudoers необходимо только при помощи команды visudo! Так как некорректные данные внесенные в него могут привести к неполадкам в работе дистрибутива. Я предпочитаю использовать первый способ добавления пользователя в sudoers.

Примечание: на дистрибутиве Debian отсутствует команда sudo после установки и попытка ее использования вызовет ошибку. Чтобы установить утилиту sudo (да, команды в Linux являются названиями одноименных утилит или программ) необходимо ввести в терминале команду apt install sudo, после чего произвести действия по добавлению пользователей в группу sudo.

В Debian нет предустановленной утилиты sudo
В Debian нет предустановленной утилиты sudo

SUDO -S, SUDO -I и SUDO -U

Еще одним вариантом использования команды sudo является применение ключей -s, -i и -u. Начнем с самого простого ключа, которым является -u. Его использование позволяет выполнить команду от имени пользователя, отличного от root.

sudo -u <имя пользователя> команда

Использование ключа -u для получения прав доступа другого пользователя
Использование ключа -u для получения прав доступа другого пользователя

В примере на скриншоте я запустил команду whoami от имени пользователя debian.

Использование ключа -s приведет к тому, что будет запущена запустит оболочка входа в условиях текущего каталога и пользовательского окружения (то есть, того пользователя, от имени которого была введена команда). Ключ -i переключит текущий каталог и пользовательское окружение на те, которые имеются у суперпользователя. Легче всего разницу понять на примере команды pwd (она будет использоваться и дальше для демонстрации разницы между различными ключами).

Использование команды sudo -s переключает в текущего пользователя и его окружение (в примере - debian)
Использование команды sudo -s переключает в текущего пользователя и его окружение (в примере - debian)

На скриншоте я использовал ключ -s и в итоге переключился на пользователя root, но остался в каталоге debian и его окружении.

Использование команды sudo -i переключает в пользователя root, его каталог и окружение
Использование команды sudo -i переключает в пользователя root, его каталог и окружение

Во втором примере, я использовал ключ -i, после чего переключился на root, его каталог и окружение.

SU (Substitute User)

su предоставляет возможность временно получить доступ к аккаунту другого пользователя. Если не использовать имен пользователей после нее, то произойдет переключение на суперпользователя. В таком случае, в отличие от sudo, su требует ввода пароля root, а не пароля пользователя, чтобы подтвердить подлинность. Когда пользователь выполняет команду su, не указывая имени пользователя после, он полностью переключается на аккаунт root со всеми правами суперпользователя.

Преимущества su:

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

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

Чтобы выполнить команду с привилегиями суперпользователя с помощью su, необходимо ввести следующую конструкцию:

su

После ввода этой команды вас попросят ввести пароль root. После успешного ввода пароля вы будете переключены на аккаунт root, и все последующие команды будут выполняться с привилегиями суперпользователя.

На виртуальной машине есть пользователь debian у которого пароль 1234 и пользователь root, у которого пароль 1. Если попытаться ввести пароль пользователя при вводе команды su, то выскочит ошибка, так как необходим пароль root.
На виртуальной машине есть пользователь debian у которого пароль 1234 и пользователь root, у которого пароль 1. Если попытаться ввести пароль пользователя при вводе команды su, то выскочит ошибка, так как необходим пароль root.

Чтобы выйти из аккаунта root и вернуться к обычному пользователю, достаточно ввести команду exit.

После правильного ввода пароля пользователь проваливается в root, откуда можно выйти при помощи команды exit
После правильного ввода пароля пользователь проваливается в root, откуда можно выйти при помощи команды exit

SU <имя пользователя> и SU - <имя пользователя>

Еще двумя вариантами использования команды su является указание имени пользователя после нее или использование тире (-) между командой и именем пользователя.

В первом случае (su <имя пользователя>) команда запустит оболочку входа в условиях текущего каталога и пользовательского окружения, во втором случае (su - <имя пользователя>) полностью изменит настройки, заменив их окружением целевого пользователя.

Поясню разницу на простом примере. На скриншотах указаны результаты команды pwd, которая показывает путь до текущей директории. В первом случае я ввел команду su<имя пользователя> и оказался в домашней директории пользователя root, от имени которого вводил команду. То есть, загрузились каталог и пользовательское окружение этого пользователя.

Результат команды su <имя пользователя>
Результат команды su <имя пользователя>

Во втором случае я ввел команду sudo - <имя пользователя> и оказался в домашней директории того самого пользователя, на которого переключился. То есть, изменились и каталог, и пользовательское окружение.

Результат команды su - <имя пользователя>
Результат команды su - <имя пользователя>

Подведем итоги

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

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

Новичкам в мире Linux
Теория и практика Linux

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