Найти тему
Эникей на передержке

adduser - полный разбор с понятными примерами | Linux 🐧

Разжевал всё максимально доходчиво и добавил огромное количество скринов с пояснениями, чтобы дошло даже до полных "чайников" в Linux.

Утилита adduser расположена по пути /usr/sbin/adduser и доступна для выполнения только от имени root.

Описание

Утилита используется для простого и быстрого создания пользователя в Linux. Для общего случая достаточно ввести 'adduser <username>', при этом автоматически будут выполнены следующие действия:

  • поиск и выбор доступного UID;
  • установка оболочки по умолчанию;
  • создание собственной группы для пользователя и добавление в неё;
  • создание домашнего каталога;
  • копирование в домашний каталог содержимого /etc/skel/;
  • запрос дополнительной информации (полное имя, телефон и т.п.);
  • запрос пароля.

Как происходит автоматическое определение перечисленных выше параметров?

Процедура создания пользователя

Попробуем создать пользователя test:

sudo adduser test

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

Параметр --debug позволяет получить более подробный вывод, его использование не обязательно
Параметр --debug позволяет получить более подробный вывод, его использование не обязательно

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

/etc/adduser.conf

Выбор доступного UID

Каждый пользователь Linux имеет свой уникальный идентификатор пользователя (англ. User identifier, UID). Выбор идентификатора обычно начинается с 1000. Если этот UID занят, утилита проверяет следующий (1001) и так, пока не найдёт свободный.

Для ограничения диапазона в конфигурационном файле используются параметры FIRST_UID и LAST_UID:

Ограничение диапазона выбора UID для обычного пользователя
Ограничение диапазона выбора UID для обычного пользователя

Если мы захотим переопределить одну или обе границы этого диапазона, достаточно добавить в команду параметры --firstuid и --lastuid

Созданный пользователь получил минимально доступный UID = 2000
Созданный пользователь получил минимально доступный UID = 2000

Где это можно использовать?

Чтобы разделить администраторов и обычных пользователей по UID, можно определить диапазон от 1000 до 1999 для администраторов и от 2000 для обычных пользователей. Сделать это можно, создав разные файлы конфигураций и указав к ним путь в параметре '--conf'. Пример создания своего конфигурационного файла рассмотрен ниже.

Т.к. для системных пользователей принято оставлять диапазон 100-999, я не рекомендую устанавливать для обычных юзеров FIRST_UID < 1000.

Системные пользователи служат для запуска фоновых служб, например, пользователь www-data часто указан в NGINX и Apache2.

Создание одноимённой группы пользователя

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

Вместе с пользователем test была создана группа test
Вместе с пользователем test была создана группа test

За создание одноимённых групп отвечает параметр USERGROUPS:

Параметр USERGROUPS в adduser.conf
Параметр USERGROUPS в adduser.conf

Каждая группа имеет свой уникальный идентификатор (GID, англ. Group identifier), который по умолчанию задаётся из того же диапазона, что UID:

Диапазон выбора идентификатора группы
Диапазон выбора идентификатора группы
Задать диапазон с помощью параметров команды (по аналогии с --firstuid и --lastuid из предыдущего примера) не получится.

Если установить USERGROUPS=no (чтобы не создавалась одноимённая группа), пользователь будет добавлен в группу, которая задана параметром USERS_GID:

По умолчанию USERS_GID = 100 (группа users)
По умолчанию USERS_GID = 100 (группа users)

Если вы не хотите менять конфиг, но вам не нужна группа пользователя, добавьте в команду параметр '--ingroup users' или '--gid 100'. В этом случае пользователь будет добавлен в группу users:

'--ingroup users'  то же самое, что '--gid 100'
'--ingroup users' то же самое, что '--gid 100'
Назначение нового пользователя в группу существующего не предоставит такие же права доступа

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

Можно сразу указать в какие ещё группы необходимо добавить пользователя (например, в sudo) с помощью параметров ADD_EXTRA_GROUPS и EXTRA_GROUPS:

По умолчанию эти параметры закомментированы
По умолчанию эти параметры закомментированы
Для добавления в другие группы можно использовать параметр '--add_extra_groups', но список групп всё равно должен быть задан в конфигурационном файле

Установка оболочки

По умолчанию для пользователя устанавливается bash, за это отвечает параметр DSHELL:

Установка оболочки по умолчанию
Установка оболочки по умолчанию

Задать другую оболочку для нового пользователя можно также через параметр --shell при вводе команды:

Для нового пользователя test2 установлена оболочка sh
Для нового пользователя test2 установлена оболочка sh

Создание домашнего каталога

В конфиге за создание домашнего каталога отвечает параметр DHOME:

По умолчанию домашний каталог создаётся по пути /home/username
По умолчанию домашний каталог создаётся по пути /home/username

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

Права на домашний каталог выставляются автоматически
Права на домашний каталог выставляются автоматически
Обратите внимание, что в конфиге нужно указывать директорию, в которой будет автоматически создан домашний каталог (напр., /home).
В терминале же необходимо указывать полный путь, включающий наименование каталога, который необходимо создать (напр., /home/test55555)

Для некоторых пользователей может быть актуальным создание домашних каталогов по следующей схеме: /home/<имя группы>/<имя пользователя>:

Учётная запись помещена в /home/<имя группы>/<имя пользователя>
Учётная запись помещена в /home/<имя группы>/<имя пользователя>

Чтобы активировать эту возможность, задайте параметру GROUPHOMES значение yes:

Включение группировки домашних каталогов по группам
Включение группировки домашних каталогов по группам

Ещё одна возможность группировки домашних каталогов - по первой букве имени пользователя, за это отвечает параметр LETTERHOMES:

Включение группировки домашних каталогов по первой букве имени пользователя
Включение группировки домашних каталогов по первой букве имени пользователя
Можно активировать параметры GROUPHOMES и LETTERHOMES одновременно, тогда путь к домашнему каталогу примет вид:
Путь к домашнему каталогу имеет вид: /home/<группа>/<первая буква имени пользователя>/<имя пользователя>
Путь к домашнему каталогу имеет вид: /home/<группа>/<первая буква имени пользователя>/<имя пользователя>

После создания домашнего каталога в него будет скопировано содержимое директории, указанной в параметре SKEL:

"Скелет" домашнего каталога
"Скелет" домашнего каталога

При копировании файлов из SKEL будут игнорироваться файлы, заданные регулярным выражением в параметре SKEL_IGNORE_REGEX:

Файлы, соответствующие regex будут игнорироваться
Файлы, соответствующие regex будут игнорироваться

Права на домашний каталог устанавливаются в соответствии с параметром DIR_MODE:

Права на доступ к домашнему каталогу
Права на доступ к домашнему каталогу
Создание домашнего каталога можно отключить с помощью параметра
'--no-create-home', обычно это используется при добавлении системных пользователей.

Шифрование домашнего каталога

Можно сразу включить шифрование домашнего каталога, указав параметр '--encrypt-home':

Включение шифрования домашнего каталога
Включение шифрования домашнего каталога

Внимание! После создания зашифрованного каталога сохраните себе парольную фразу из файла ~/.ecryptfs/wrapped-passphrase. Она понадобится для расшифровки домашнего каталога при доступе к нему из сторонней ОС:

Переключиться на созданного пользователя:

su username

Расшифровать и вывести парольную фразу:

ecryptfs-unwrap-passphrase ~/.ecryptfs/wrapped-passphrase

Для расшифровки необходимо ввести пароль пользователя

Вывод расшифрованной парольной фразы
Вывод расшифрованной парольной фразы

Добавление информации о пользователе

В момент создания УЗ, система запрашивает дополнительную информацию:

Ввод дополнительной информации
Ввод дополнительной информации

Её можно указать сразу в терминале, используя параметр '--gecos':

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

Запрет входа по паролю

Если пользователь подключается к серверу с помощью ssh-ключа (что безопаснее), можно сразу установить параметр --disabled-password:

Добавление пользователя без пароля
Добавление пользователя без пароля
Также можно использовать параметр --disabled-login, он полностью заблокирует доступ пользователя в систему, пока не будет задан пароль.

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

Чтобы добавить существующего пользователя в существующую группу, используйте синтаксис 'adduser <группа> <пользователь>':

-27

Добавление системного пользователя

Как было сказано выше, системные пользователи нужны для фонового запуска служб и по умолчанию имеют UID от 100 до 999:

GID имеет аналогичный диапазон
GID имеет аналогичный диапазон

Для добавления системного пользователя используйте параметр '--system':

Добавление системного пользователя
Добавление системного пользователя

По умолчанию для системного пользователя создаётся домашний каталог, также он помещаются в группу "nogroup".

Чтобы отключить создание домашнего каталога, используйте '--no-create-home', чтобы сразу добавить в одноименную группу - '--group':

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

Обратите внимание, системные пользователи будут иметь оболочку nologin, если явно не задан параметр '--shell':

Системные пользователи
Системные пользователи
Войти под системной учёткой можно, если задать пароль и оболочку

Особые параметры пользователей

Ниже я привёл параметры, которые используются редко и служат для более тонкой настройки adduser

Установка квот

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

Пример значения QUOTAUSER в /etc/adduser.conf
Пример значения QUOTAUSER в /etc/adduser.conf

Проверка имени пользователя/группы на соответствие регулярному выражению

Регулярное выражение задаётся в параметре NAME_REGEX конфигурационного файла:

Пример значения NAME_REGEX в /etc/adduser.conf
Пример значения NAME_REGEX в /etc/adduser.conf

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

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

Чтобы обойти это ограничение, используйте параметр '--force-badname':

--force-badname позволяет задать имя пользователя, не соответствующее regex
--force-badname позволяет задать имя пользователя, не соответствующее regex

Создание своего конфига

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

sudo mkdir /etc/adduser;
sudo cp /etc/adduser.conf /etc/adduser/adduser_adm.conf
sudo nano /etc/adduser/adduser_adm.conf

Приведём файл к следующему виду:

DSHELL=/bin/bash

DHOME=/home
GROUPHOMES=no
LETTERHOMES=yes
SKEL=/etc/skel

FIRST_UID=1000
LAST_UID=1999

FIRST_GID=1000
LAST_GID=1999

USERGROUPS=yes

USERS_GID=100

DIR_MODE=0750

SKEL_IGNORE_REGEX="dpkg-(old|new|dist|save)"
EXTRA_GROUPS="sudo"
ADD_EXTRA_GROUPS=1

NAME_REGEX="^(adm_)([a-z]*)$"

Пользователи, созданные с использованием нового конфига будут иметь UID и GID от 1000 до 1999, домашняя папка будет создана в каталоге '/home/a/', а имя пользователя должно начинаться на 'adm_':

Путь к конфигурационному файлу указывается в параметре --conf
Путь к конфигурационному файлу указывается в параметре --conf
Структура каталогов в /home/
Структура каталогов в /home/

Заключение

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

В статье не рассмотрено добавление пользователей с использованием --extrausers, т.к. я не нашёл в сети достаточно материала, чтобы подробно разобрать эту возможность. Если вы можете что-то посоветовать, сделайте это при помощи комментариев. Спасибо!

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

Поддержать материально:

  • Юmoney: 4100 1179 9102 819
  • Сбербанк: 2202 2013 5155 5152
  • Тинькофф: 2200 7008 1567 2323