Команды su и sudo в Linux. В чем разница?

Автор: | 20/09/2023

С командами su и sudo сталкивается каждый пользователь Linux. При этом, поскольку они имеют схожий синтаксис и выполняют практически одну и ту же задачу, многие новички не понимают, в каких случаях следует использовать ту или иную команду. На этом уроке мы узнаем, чем отличается su от sudo.

su против sudo

root или суперпользователь — это специальный аккаунт и группа пользователей в Unix-подобных системах с идентификатором, владелец которого имеет право на выполнение всех без исключения операций.

su и sudo — это два разных способа получить привилегии суперпользователя (root), обладающего максимальными правами и возможностью делать с системой всё, что угодно. В Windows такая учетная запись носит название «Администратор». Обычные (непривилегированные) пользователи в Linux сильно ограничены в таких правах: у них нет возможности производить запись в системные каталоги, управлять системными процессами и т.п. Поэтому для выполнения чего-то, что требует повышенных привилегий, и применяются команды su и sudo.

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

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

Команда su

Команда su (от англ. «substitute user» — «заменить пользователя») применяется в основном для переключения с одного пользователя на другого. При этом она может, как запустить оболочку входа в условиях текущего каталога и окружения (su), так и полностью изменить настройки, заменив их окружением целевого пользователя (su -).

Синтаксис команды:

su [имя_пользователя]

или

su - [имя_пользователя]

Если использовать данную команду без [имя_пользователя], то она переключит вас на учетную запись суперпользователя (root).

Примечание: В большинстве случаев, команда su (с дефисом и без) используется только для переключения на суперпользователя (root), хотя она может переключить вас и на другого ([имя_пользователя]) пользователя.

Как работает команда su?

Чтобы вызвать оболочку другого пользователя с окружением и рабочим каталогом текущего пользователя, используйте команду su (без дефиса). Например, если вы хотите работать от имени пользователя ravesli, выполните:

su ravesli

Затем введите пароль для учетной записи ravesli и нажмите Enter.

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

Чтобы перейти к другому пользователю и при этом изменить и пользовательское окружение, используйте команду su -:

su - ravesli

Примечание: Еще один способ, позволяющий получить доступ к аккаунту другого пользователя вместе с полным объемом переменных его пользовательского окружения, это задействовать команду su -l (или --login[имя_пользователя].

Команда sudo

Команда sudo (от англ. «Substitute User and do« — «подменить пользователя и выполнить») используется в качестве префикса к командам Linux, позволяя вошедшему в систему пользователю выполнять команды, требующие привилегий root. В отличие от su, команда sudo требует ввода пароля текущего пользователя (выполняющего эту команду).

Например, все исполняемые и административные задачи требуют наличия максимальных разрешений (root). В таких случаях рекомендуется использовать sudo:

sudo [команда]

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

Добавление пользователя в группу sudoers

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

usermod -aG sudo [имя_пользователя]

Например, чтобы добавить в группу sudoers учетную запись ravesli, вы должны ввести:

sudo usermod -aG sudo ravesli

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

sudo getent group sudo

Вывод отобразит учетную запись, добавленную на предыдущем шаге

Еще один способ добавления пользователя в группу sudoers — это воспользоваться командой visudo, которая помогает отредактировать файл /etc/sudoers. Для этого выполните вход в учетную запись root (команда su -), после чего вызовите visudo и добавьте в файл следующую строку, заменив user на нужное вам имя пользователя, которому вы хотите дать доступ к sudo:

user   ALL=(ALL:ALL) ALL

Нажмите Ctrl+X, а затем Y, чтобы сохранить файл. Вы также можете добавить пользователя в группу, указанную в файле /etc/sudoers. Пользователи групп, указанных в данном файле, автоматически получат привилегии sudo.

su и sudo в разных дистрибутивах Linux

su — это традиционный (более старый) способ переключения на учетную запись root (и получение повышенных прав) в Linux.

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

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

С другой стороны, другие дистрибутивы Linux, такие как Fedora, при установке создают обе учетные записи: обычного пользователя и суперпользователя (root).

Включение учетной записи root

Если вы используете Ubuntu-подобный дистрибутив (например, вышеупомянутый Linux Mint) и попытаетесь переключиться на пользователя root, то получите сообщение о сбое аутентификации.

Чтобы активировать пользователя root, выполните команду passwd:

sudo passwd root

Затем установите пароль и нажмите Enter. В результате система должна уведомить вас, что пароль пользователя root был успешно обновлен.

Убеждаемся, что пользователь root активирован, переключившись на него с помощью команды su -.

Заключение

Не забывайте использовать sudo всякий раз, когда это возможно. Благодаря этому вы снизите риск привести вашу систему в нерабочее состояние, а также повысите её защищенность от различных угроз безопасности.