В дистрибутивах Linux существует несколько способов получения привилегий суперпользователя или root. Два наиболее распространенных способа - использование команд sudo и su. Оба этих метода позволяют временно получить повышенные привилегии, но имеют некоторые важные различия в использовании и функциональности. Давайте рассмотрим эти различия более подробно.
Если вы не знаете кто такой суперпользователь и зачем он нужен в дистрибутивах Linux, то прочтите вначале статью про пользователя root, которая ранее выходила на канале.
SUDO (Substitute User and do)
sudo представляет собой команду, которая позволяет обычному пользователю выполнить команды с привилегиями суперпользователя или правами доступа любого другого пользователя. Она широко используется в системах Linux, чтобы ограничить доступ к привилегиям root только определенным пользователям. При использовании sudo, пользователю может быть разрешено выполнение команды суперпользователя после ввода своего собственного пароля, а не пароля root.
Преимущества sudo:
- Более безопасно, так как ограничивает доступ к привилегиям root только необходимым командам и пользователям.
- Позволяет аудитить и логировать действия пользователей с привилегиями суперпользователя.
- Предоставляет более гибкую систему управления привилегиями, так как администраторы могут настраивать разрешения для конкретных команд и пользователей.
Использование sudo
Чтобы выполнить команду с привилегиями суперпользователя с помощью sudo, необходимо ввести следующую конструкцию:
sudo <команда>
После ввода этой команды вас попросят ввести свой собственный пароль. После успешного подтверждения пароля команда будет выполнена с привилегиями суперпользователя.
Стоит помнить, что выполнять команду sudo могут те пользователи, которые состоят в одноименной группе.
Для того, чтобы добавить пользователя в нее можно ввести команду:
sudo usermod -aG sudo <имя пользователя>
Ввод и выполнение команды возможны либо от пользователя root, либо от пользователя уже состоящего в группе.
Вторым способом добавления пользователя в группу является использование команды visudo, которая после ввода откроет для редактирования файл, находящийся по пути /etc/sudoers. Но, чтобы воспользоваться visudo нужно либо войти под аккаунтом суперпользователя (смотрите текст ниже), либо указать перед названием sudo.
sudo visudo
После ввода откроется файл sudoers для редактирования, в котороый нужно внести следующую строку:
<имя пользователя> ALL=(ALL:ALL) ALL
После сохранения файла у пользователя, которого вы укажите появится возможность использовать команду sudo в терминале. Помните, что редактировать файл sudoers необходимо только при помощи команды visudo! Так как некорректные данные внесенные в него могут привести к неполадкам в работе дистрибутива. Я предпочитаю использовать первый способ добавления пользователя в sudoers.
Примечание: на дистрибутиве Debian отсутствует команда sudo после установки и попытка ее использования вызовет ошибку. Чтобы установить утилиту sudo (да, команды в Linux являются названиями одноименных утилит или программ) необходимо ввести в терминале команду apt install sudo, после чего произвести действия по добавлению пользователей в группу sudo.
SUDO -S, SUDO -I и SUDO -U
Еще одним вариантом использования команды sudo является применение ключей -s, -i и -u. Начнем с самого простого ключа, которым является -u. Его использование позволяет выполнить команду от имени пользователя, отличного от root.
sudo -u <имя пользователя> команда
В примере на скриншоте я запустил команду whoami от имени пользователя debian.
Использование ключа -s приведет к тому, что будет запущена запустит оболочка входа в условиях текущего каталога и пользовательского окружения (то есть, того пользователя, от имени которого была введена команда). Ключ -i переключит текущий каталог и пользовательское окружение на те, которые имеются у суперпользователя. Легче всего разницу понять на примере команды pwd (она будет использоваться и дальше для демонстрации разницы между различными ключами).
На скриншоте я использовал ключ -s и в итоге переключился на пользователя root, но остался в каталоге debian и его окружении.
Во втором примере, я использовал ключ -i, после чего переключился на root, его каталог и окружение.
SU (Substitute User)
su предоставляет возможность временно получить доступ к аккаунту другого пользователя. Если не использовать имен пользователей после нее, то произойдет переключение на суперпользователя. В таком случае, в отличие от sudo, su требует ввода пароля root, а не пароля пользователя, чтобы подтвердить подлинность. Когда пользователь выполняет команду su, не указывая имени пользователя после, он полностью переключается на аккаунт root со всеми правами суперпользователя.
Преимущества su:
- Полный доступ к системе, так как пользователь полностью переключается на аккаунт root.
- Полезно для выполнения нескольких команд с привилегиями суперпользователя подряд.
Использование su
Чтобы выполнить команду с привилегиями суперпользователя с помощью su, необходимо ввести следующую конструкцию:
su
После ввода этой команды вас попросят ввести пароль root. После успешного ввода пароля вы будете переключены на аккаунт root, и все последующие команды будут выполняться с привилегиями суперпользователя.
Чтобы выйти из аккаунта root и вернуться к обычному пользователю, достаточно ввести команду exit.
SU <имя пользователя> и SU - <имя пользователя>
Еще двумя вариантами использования команды su является указание имени пользователя после нее или использование тире (-) между командой и именем пользователя.
В первом случае (su <имя пользователя>) команда запустит оболочку входа в условиях текущего каталога и пользовательского окружения, во втором случае (su - <имя пользователя>) полностью изменит настройки, заменив их окружением целевого пользователя.
Поясню разницу на простом примере. На скриншотах указаны результаты команды pwd, которая показывает путь до текущей директории. В первом случае я ввел команду su<имя пользователя> и оказался в домашней директории пользователя root, от имени которого вводил команду. То есть, загрузились каталог и пользовательское окружение этого пользователя.
Во втором случае я ввел команду sudo - <имя пользователя> и оказался в домашней директории того самого пользователя, на которого переключился. То есть, изменились и каталог, и пользовательское окружение.
Подведем итоги
Статья, как вы понимаете в первую очередь для новичков, которые столкнулись с наличием sudo, su и su -, но не до конца понимают зачем столько команд и какая принципиальная разница между ними. Думаю, что хотя бы отчасти прояснил ситуацию.
К тому же, статья будет полезна тем, кто только начинает свой путь в знакомстве с Linux-серверами и взаимодействием с ним. Также для новичков на канале есть два раздела с материалами, которые могут оказаться интересными и полезными одновременно.
В подборках уже более сотни статей по различным аспектам использования Linux-дистрибутивов.