Всем привет!
Часто у людей начинающих своё знакомство с 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).
– Первое “ALL” означает, что данное правило применяется ко всем хостам.welovez
ALL=(ALL:ALL) ALL
– Данное “ALL” означает, что пользователь welovez может запускать команды от лица всех пользователей.welovez
ALL=(ALL:ALL) ALL
– Данное “ALL” означает, что пользователь welovez может запускать команды от лица всех групп.welovez
ALL=(ALL:ALL) ALLwelovez
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, а достаточно нужным пользователям выдать нужные привилегии.
Надеюсь кому-нибудь данный текст окажется полезным. Как всегда, если вам есть что дополнить по данной теме или возникли какие-то вопросы – добро пожаловать в комментарии.