Истории успеха наших клиентов — лучшие проекты
Вход/ Регистрация

Как создать нового пользователя с поддержкой sudo в Ubuntu

14960
11 минут чтения
Средний рейтинг статьи: 2.3

Акроним sudo означает substitute user and do — «подменить пользователя и выполнить».

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

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

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

Этим команда sudo отличается от su («substitute user» без «and do»). Она переключается на другого пользователя не навсегда, а временно. И при этом она не запрашивает ввод пароля того пользователя, на которого выполняется переключение.

В этом руководстве мы рассмотрим создание нового пользователя в операционной системе Ubuntu 22.04, который сможет выполнять программу sudo, а значит будет обладать расширенным функционалом (привилегиями) на управление системой.

Создание нового пользователя для sudo

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

Если вы используете удаленный сервер под управлением Ubuntu (например, облачный сервер Timeweb Cloud), то сначала необходимо подключиться к нему по SSH-соединению от имени root:

    

Например, команда подключения может выглядеть так:

    

После чего консольный терминал потребует ввести root-пароль. При этом в целях безопасности символы пароля не отображаются в консольном терминале — его нужно набрать «вслепую».

Далее необходимо создать нового пользователя, дав ему произвольное имя:

    

В консольном терминале появится несколько сообщений, сообщающих о создании нового пользователя, отдельной группы, в которую он автоматически был добавлен, и директории, связанной с этим пользователем:

    

После этого терминал консоли попросит ввести пароль для нового пользователя, а также указать дополнительную информацию о нем:

    

Закончив заполнение данных, нужно ввести в консоль символ y, после чего процесс создания нового пользователя можно считать завершенным.

Облачные серверы

Масштабируемые вычислительные ресурсы
по всему миру с почасовой оплатой.

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

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

    
  • Флаг -a необходим, чтобы указанная группа не заменила множество других групп, в которых пользователь уже состоит. В данном примере пользователь easy как минимум состоит в ранее созданной группе easy.

  • Флаг -G необходим для указания дополнительной группы, в которую будет добавлен пользователь. Он отличается от флага -g, который устанавливает основную группу пользователя. В данном примере основной группой пользователя easy является группа easy.

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

Теперь можно переключиться на нового пользователя:

    

Сразу после переключения в консольном терминале появится сообщение о том, что теперь можно выполнять команды от имени администратора (root) с помощью sudo:

    

Кстати, всегда можно проверить, под каким пользователем выполняются команды:

    

В консоли появится имя активного пользователя:

    

Выполнение команд через sudo

От имени root

Для тестирования привилегий нового пользователя можно попробовать вывести содержимое системной директории /root:

    

Флаг -la является комбинацией двух флагов:

  • -l указывает на подробный (длинный) формат вывода содержимого файловой системы.

  • -a указывает на вывод каталогов, название которых начинается с символа точки.

Таким образом команда ls подробно покажет все содержимое указанной директории /root.

При этом во время первого выполнения этой команды терминал попросит ввести пароль, который указывался при создании пользователя easy:

    

После ввода пароля появится содержимое каталога /root:

    

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

Если ввести показанную выше команду без использования sudo:

    

То в консольном терминале появится сообщение об отказе в доступе:

    

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

    

Аналогично, если попытаться обновить репозитории без sudo, появится сообщение об ограничении доступа:

    

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

От имени другого пользователя

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

Давайте сначала переключимся обратно на root:

    

После этого терминал попросит ввести пароль пользователя root:

    

А теперь попробуем выполнить команду, требующую права администратора, от имени пользователя easy из-под пользователя root, используя флаг -u:

    

В консольном терминале появится уже знакомое сообщение об отказе в доступе:

    

Переключимся обратно на easy:

    

Для наглядности можно проделать тоже самое под пользователем easy:

    

Сперва в консольном терминале появится предложение ввести пароль от easy, а далее последует содержимое указанной директории:

    

Настройка прав доступа sudo

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

Чтобы проверить это, сперва переключимся обратно на root:

    

Установка прав доступа

Чтобы настроить уникальные права доступа для каждого пользователя sudo, нужно открыть файл /etc/sudoers:

    

После чего добавить туда описание разрешенных команд по следующей схеме:

    
  • ПОЛЬЗОВАТЕЛЬ. Имя пользователя, который будет инициировать команду sudo.

  • ХОСТ. Имя хоста, на котором будет запускаться команда sudo. Параметр актуален в том случае, если используется несколько машин.

  • АВАТАР. Имя пользователя, из под чьего имени будут выполняться разрешенные команды через sudo.

  • ГРУППА. Группа, к которой принадлежит пользователь.

  • КОМАНДЫ. Набор команд (может состоять из одной команды), который будет разрешен для запуска через sudo.

В самом простом варианте можно разрешить выполнение всех команд из под любого пользователя:

    

В более сложном варианте разрешается выполнение только конкретных команд от имени ограниченного числа пользователей:

    

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

Кстати, чтобы узнать полные пути до бинарных файлов необходимых команд, можно воспользоваться соответствующей утилитой:

    

В консольном терминале появится информация о всех перечисленных командах:

    

Самый первый путь после имени команды и является реальным адресом бинарного файла.

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

    

На аналогичную, но с символом комментария в начале, чтобы настройка стала неактивна:

    

После этого можно обратно переключиться на easy:

    

А теперь снова выполним уже знакомую команду вывода содержимого директории /root:

    

В консольном терминале появится сообщение о запрете выполнения указанной команды на данном хосте:

    

А вот команда обновления репозиториев будет работать:

    

Проверка прав доступа

Конечно, узнать подробности полномочий пользователей можно, просто просмотрев содержимое файла /etc/sudoers. Однако есть более простой способ — использовать ту же самую команду sudo:

    
  • Флаг -l указывает на необходимость вывода всех разрешенных команд пользователя.

  • Флаг -U указывает имя целевого пользователя. Если флаг не указывать, то выведутся права доступа для пользователя root.

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

    

Ключевым в этом выводе является этот отрывок сообщения:

    

Он сообщает, что пользователь easy может запускать следующие команды от имени root:

  • /usr/bin/apt
  • /usr/bin/rm
  • /bin/nano

То есть ровно те команды, которые указаны в конфигурационном файле /etc/sudoers. Таким образом можно просмотреть привилегии конкретного пользователя без утомительного выискивания нужных строк в файле /etc/sudoers.

Более того, получение информации о пользовательских привилегиях можно сделать еще проще, просмотрев наличие разрешения на выполнение конкретной команды:

    

Если команда запрещена, то в консольном терминале ничего не появится. Если же она разрешена:

    

В консольный вывод будет содержать полный адрес до бинарного файла команды:

    

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

Отключение пароля

Утилита sudo позволяет выполнять команды без явного ввода пароля. Разумеется, отключение пароля нельзя считать безопасным, поэтому такая настройка выполняется на свой страх и риск.

Чтобы отключить пароль, нужно открыть файл /etc/sudoers:

    

После чего добавить новую строку, содержащую ключевое слово NOPASSWD и список команд, для которых ввод пароля не требуется:

    

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

    

То есть получится две секции разрешенных команд — с требованием ввода пароля и без него.

Выгодные тарифы на облако в Timeweb Cloud

Cloud MSK 15

477 ₽/мес

Процессор
1 x 3.3 ГГц
Память
1 ГБ
NVMe
15 ГБ
Канал
1 Гбит/с
Публичный IP
Cloud MSK 30

657 ₽/мес

Процессор
1 x 3.3 ГГц
Память
2 ГБ
NVMe
30 ГБ
Канал
1 Гбит/с
Публичный IP

Заключение

Несмотря на то, что команда sudo напоминает команду su, между ними есть ключевое различие:

  • su — «substitute user» или «подменить пользователя»

  • sudo — «substitute user and do» или «подменить пользователя и выполнить»

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

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

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

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

14960
11 минут чтения
Средний рейтинг статьи: 2.3
Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server