<div><img src="https://top-fwz1.mail.ru/counter?id=3548135;js=na" style="position:absolute;left:-9999px;" alt="Top.Mail.Ru" /></div>
Бесплатная миграция IT-инфраструктуры в облако

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

Миша Курушин
Миша Курушин
Технический писатель
27 ноября 2024 г.
49
11 минут чтения
Средний рейтинг статьи: 5

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

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

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

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

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

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

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

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

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

ssh root@IP_АДРЕС

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

ssh root@45.10.41.189

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

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

adduser easy

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

Adding user `easy' ...
Adding new group `easy' (1001) ...
Adding new user `easy' (1000) with group `easy' ...
Creating home directory `/home/easy' ...
Copying files from `/etc/skel' ...

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

Changing the user information for easy
Enter the new value, or press ENTER for the default
    Full Name []:
    Room Number []:
    Work Phone []:
    Home Phone []:
    Other []:
Is the information correct? [Y/n]

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

cloud

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

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

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

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

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

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

su - easy

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

To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

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

whoami

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

easy

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

От имени root

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

sudo ls -la /root

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

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

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

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

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

[sudo] password for easy:

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

total 48
drwx------  7 root root 4096 Nov 20 05:30 .
drwxr-xr-x 20 root root 4096 Nov 20 12:09 ..
drwx------  3 root root 4096 Nov 11 12:17 .ansible
-rw-r--r--  1 root root 4078 Nov 20 10:12 .bash_history
-rw-r--r--  1 root root 3106 Oct 15  2021 .bashrc
drwx------  2 root root 4096 Nov 11 12:17 .cache
drwxr-xr-x  3 root root 4096 Nov 19 05:36 .local
-rw-------  1 root root  214 Nov 18 04:26 .mysql_history
-rw-r--r--  1 root root  161 Jul  9  2019 .profile
-rw-r--r--  1 root root 1372 Nov 18 04:16 resize.log
drwx------  3 root root 4096 Nov 11 12:17 snap
drwx------  2 root root 4096 Nov 18 04:16 .ssh

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

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

ls -la /root

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

ls: cannot open directory '/root': Permission denied

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

sudo apt update

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

Reading package lists... Done
E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)
E: Unable to lock directory /var/lib/apt/lists/
W: Problem unlinking the file /var/cache/apt/pkgcache.bin - RemoveCaches (13: Permission denied)
W: Problem unlinking the file /var/cache/apt/srcpkgcache.bin - RemoveCaches (13: Permission denied)

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

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

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

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

su - root

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

Password:

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

sudo -u easy ls -la /root

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

ls: cannot open directory '/root': Permission denied

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

su - easy

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

sudo -u root ls -la /root

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

total 52
drwx------  7 root root 4096 Nov 20 15:39 .
drwxr-xr-x 20 root root 4096 Nov 20 12:09 ..
drwx------  3 root root 4096 Nov 11 12:17 .ansible
-rw-r--r--  1 root root 4171 Nov 20 15:21 .bash_history
-rw-r--r--  1 root root 3106 Oct 15  2021 .bashrc
drwx------  2 root root 4096 Nov 11 12:17 .cache
drwxr-xr-x  3 root root 4096 Nov 19 05:36 .local
-rw-------  1 root root  214 Nov 18 04:26 .mysql_history
-rw-r--r--  1 root root  161 Jul  9  2019 .profile
-rw-r--r--  1 root root 1372 Nov 18 04:16 resize.log
drwx------  3 root root 4096 Nov 11 12:17 snap
drwx------  2 root root 4096 Nov 18 04:16 .ssh
-rw-r--r--  1 root root    0 Nov 20 15:39 .sudo_as_admin_successful

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

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

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

su - root

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

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

sudo nano /etc/sudoers

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

ПОЛЬЗОВАТЕЛЬ ХОСТ=(АВАТАР:ГРУППА) КОМАНДЫ
  • ПОЛЬЗОВАТЕЛЬ. Имя пользователя, который будет инициировать команду sudo.

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

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

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

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

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

easy ALL=(ALL:ALL) ALL

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

easy ALL=(root:ALL) /usr/bin/apt,/usr/bin/rm,/bin/nano

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

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

whereis apt rm nano

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

apt: /usr/bin/apt /usr/lib/apt /etc/apt /usr/share/man/man8/apt.8.gz
rm: /usr/bin/rm /usr/share/man/man1/rm.1.gz
nano: /usr/bin/nano /usr/share/nano /usr/share/man/man1/nano.1.gz /usr/share/info/nano.info.gz

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

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

%sudo ALL=(ALL:ALL) ALL

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

#%sudo  ALL=(ALL:ALL) ALL

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

su - easy

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

sudo ls -la /root

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

Sorry, user easy is not allowed to execute '/usr/bin/ls /root' as root on 3798037-yn55665.twc1.net.

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

sudo apt update

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

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

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

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

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

Matching Defaults entries for easy on 3798037-yn55665:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin,
    use_pty

User easy may run the following commands on 3798037-yn55665:
    (root : ALL) /usr/bin/apt, /usr/bin/rm, /bin/nano

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

User easy may run the following commands on 3798037-yn55665:
   (root : ALL) /usr/bin/apt, /usr/bin/rm, /bin/nano

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

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

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

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

sudo -l -U easy ls

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

sudo -l -U easy apt

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

/usr/bin/apt

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

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

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

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

sudo nano /etc/sudoers

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

easy ALL=(root:ALL) NOPASSWD: /usr/bin/apt

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

easy ALL=(root:ALL) /usr/bin/rm,/bin/nano
easy ALL=(root:ALL) NOPASSWD: /usr/bin/apt

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

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

Заключение

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

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

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

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

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

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

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

Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server
27 ноября 2024 г.
49
11 минут чтения
Средний рейтинг статьи: 5
Пока нет комментариев