С чего начинается Linux. Кто такой root, программа sudo и команда su в Debian

Всем привет!

Часто у людей начинающих своё знакомство с Linux, после первой установки операционной системы возникает закономерный вопрос: “А что делать дальше?”. В рамках данного цикла статей я постараюсь отвечать на этот и аналогичные вопросы.

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

Кто такой root?

Пользователь root в системах GNU/Linux – это пользователь, имеющий административный доступ к операционной системе. Пользователя root еще называют суперпользователь. Обычные пользователи не имеют такого доступа по соображениям безопасности. Иначе говоря, любая команда запущенная под учетной записью root будет выполнена безоговорочно и со всеми вытекающими последствиями.

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

Тем не менее, в некоторых операционных системах пользователь root по умолчанию отключен (например в Ubuntu) и команды с правами root необходимо выполнять при помощи программы sudo.

sudo

Википедия нам говорит, что sudo (Substitute User and do, дословно «подменить пользователя и выполнить») – программа для системного администрирования UNIX-систем, позволяющая делегировать те или иные привилегированные ресурсы пользователям с ведением протокола работы.

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

Стоит сразу сказать, что в некоторых дистрибутивах sudo по умолчанию не используется и первоначально его надо будет установить. Я в своих примерах буду использовать дистрибутив Debian 12.2 в нем по умолчанию sudo уже установлен, если же в вашем дистрибутиве при попытке вызвать команду sudo появляется следующая ошибка:

root@welovez:~# sudo
-bash: sudo: command not found

Значит, требуется установить недостающий пакет. Обновляем информацию о репозиториях и устанавливаем sudo:

apt-get update
apt-get install sudo

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

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

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

visudo

Которая запускает текстовый редактор nano с конфигурационным файлом:

В данном файле нас интересуют две строчки, а именно:

root    ALL=(ALL:ALL) ALL
%sudo   ALL=(ALL:ALL) ALL

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

Вторая строчка говорит о том, что все пользователи включенные в группу sudo (символ % означает, что имя относится к группе пользователей) имеют так же полные права.

Итак, есть два способа “накинуть” прав пользователю, а именно прописать его вручную в данный конфигурационный файл, либо включить его в группу sudo.

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

Включение пользователя в группу sudo

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

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

root@welovez:~# usermod –a –G sudo welovez

Добавление записи в конфигурационный файл /etc/sudoers

Данный способ позволяет корректировать список привилегий отдельного пользователя, но как это делать – чуть-чуть позже.

Для выдачи прав пользователю таким способом, необходимо отредактировать файл /etc/sudoers, а именно выполнить команду

root@welovez: visudo

И добавляем строчку по аналогии с той, в которой прописаны права root. Для пользователя welovez она будет выглядеть так:

welovez ALL=(ALL:ALL) ALL

Сохраняем полученный файл сочетанием клавиш Ctrl+O и закрываем Ctrl+X.

После выполненных манипуляций зайдем в учётную запись welovez и попробуем выполнить команду:

welovez@welovez:~# sudo cat /etc/sudoers

После выполнения данной команды, sudo запросит пароль пользователя (в моем случае это пароль пользователя welovez). После ввода пароля, если всё получилось правильно, мы должны увидеть содержимое конфигурационного файла.

В противном случае программа sudo укажет на то, что данный пользователь не прописан в файле sudoers

Тонкая настройка

Пример выше показывает, что при помощи sudo пользователю welovez можно просто делегировать такие же права как root. Это удобно, но не всегда безопасно. А если нам нужно ограничить перечень команд которые мы доверяем пользователю welovez? Для этого опять обратимся к конфигурационному файлу /etc/sudoers, запускаем visudo и смотрим на ту строку где мы выдавали пользователю полные права:

Рассмотрим, что означают все эти параметры.

  • welovez ALL=(ALL:ALL) ALL – Первое поле показывает имя пользователя, к которому будет применятся правило (welovez).
  • welovez ALL=(ALL:ALL) ALL – Первое “ALL” означает, что данное правило применяется ко всем хостам.
  • welovez ALL=(ALL:ALL) ALL – Данное “ALL” означает, что пользователь welovez может запускать команды от лица всех пользователей.
  • welovez ALL=(ALL:ALL) ALL – Данное “ALL” означает, что пользователь welovez может запускать команды от лица всех групп.
  • welovez ALL=(ALL:ALL) ALL – Последнее “ALL” означает, что данные правила применяются всем командам.

Это означает, что наш пользователь welovez сможет выполнять любые команды с помощью sudo после ввода пароля.

Ключи -u, -s

Так же sudo можно использовать вместе с различными ключами.

Ключ -u позволяет выполнить команду от имени любого другого пользователя. Например, попробуем выполнить команду whoami из под пользователя testuser

sudo -u testuser whoami

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

Ключ -s позволяет переключиться на пользователя root и выполнять все последующие команды от его имени.

Опять же, рассмотрим пример с использованием команды whoami

sudo -s
whoami

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

Это далеко не все ключи которые можно использовать в sudo. Подробнее про ключи можно почитать в справке про sudo, вызвав её с ключем -h

sudo -h

Команда su

Команда su (сокращение от substitute или switch user) позволяет выполнять команды с привилегиями другого пользователя, по умолчанию пользователя root.

Как пользоваться командой su

Общий синтаксис команды su следующий:

su [OPTIONS] [USER [ARGUMENT...]]

При вызове без какой-либо опции su по умолчанию заключается в запуске интерактивной оболочки от имени root:

su

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

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

whoami

Команда напечатает имя пользователя, запускающего текущую сессию оболочки, а именно root

Итог

Подводя итог можно сделать следующее заключение.

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

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

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

Оставьте комментарий