Как создать пользователя в Linux: useradd, пароль и права

- Тезис 1: Создание пользователя в Linux — это две отдельные операции: useradd формирует учётную запись, а passwd задаёт пароль. Пока пароль не установлен, в /etc/shadow стоит заглушка ! или *, и вход невозможен.
- Тезис 2: Ключ -m создаёт домашнюю директорию, -s задаёт оболочку входа, а -aG добавляет в группы без потери уже выданных прав. Без -a ключ -G перезаписывает весь список дополнительных групп.
- Тезис 3: Для сервисных аккаунтов правильная связка — оболочка /usr/sbin/nologin, отсутствие sudo и домашней директории; для людей — adduser на Debian/Ubuntu или useradd -m -s /bin/bash на остальных системах.
Создание учётной записи в Linux устроено просто, но именно эта простота порождает большинство ошибок: пользователь появляется в системе, а войти не может, или получает права администратора там, где они совершенно не нужны. Разберём полный цикл — от первой команды до удаления аккаунта — с акцентом на то, что реально влияет на результат.
Две операции, которые нельзя путать
Базовая последовательность выглядит так: сначала создаём учётную запись, потом задаём пароль. Это две разные операции, и вторая не выполняется автоматически.
sudo useradd -m -s /bin/bash ivan
sudo passwd ivan
Ключ -m создаёт домашнюю директорию /home/ivan, ключ -s задаёт оболочку входа. Без -m результат зависит от дистрибутива и параметра CREATE_HOME в файле /etc/login.defs, поэтому его лучше указывать явно: иначе легко получить пользователя без домашней папки и без файлов вроде .bashrc.
Пока пароль не задан, в /etc/shadow стоит символ-заглушка (! или *), и вход по паролю невозможен — учётная запись фактически заблокирована. Пароль устанавливают командой passwd от имени root или через sudo.
Отдельного внимания заслуживает выбор между двумя инструментами — useradd и adduser:
- Где доступна: useradd — практически везде (пакет shadow); adduser — Debian, Ubuntu, а в RHEL это ссылка на useradd.
- Домашняя директория: у useradd — только с ключом -m; у adduser — создаётся по умолчанию.
- Пароль: useradd требует отдельной команды passwd; adduser спрашивает сразу в диалоге.
- Формат работы: useradd — все параметры флагами; adduser — интерактивный опрос.
- Когда удобнее: useradd — скрипты и сервисные аккаунты; adduser — ручное создание обычного пользователя.
Флаги, которые закрывают почти все сценарии
Параметры useradd лучше задавать сразу, а не исправлять потом через usermod:
- -d /путь — нестандартная домашняя директория;
- -s /bin/bash или /bin/sh — оболочка входа; для сервисных аккаунтов ставят /usr/sbin/nologin;
- -c "Иван Петров" — комментарий, обычно ФИО, он виден в /etc/passwd;
- -u 1500 — конкретный UID, если он должен совпадать на нескольких серверах или с правами на NFS-ресурсе;
- -g users -G wheel,docker — основная и дополнительные группы;
- -e 2026-12-31 — дата, после которой вход блокируется автоматически;
- -r — системная учётная запись с UID из системного диапазона, без домашней директории.
Срок жизни пароля настраивают через chage. Например, sudo chage -d 0 ivan заставит пользователя сменить пароль при первом входе, а sudo chage -l ivan покажет текущие параметры: дату последней смены, минимальный и максимальный срок, дату блокировки.
Если учёток много, ручной ввод неудобен: newusers читает файл в формате /etc/passwd и создаёт список пользователей за один проход, а модуль user в Ansible делает то же самое идемпотентно, то есть повторный запуск не ломает уже существующие записи. Для системных аккаунтов из пакетов есть systemd-sysusers с декларативным файлом описания. Прямая правка /etc/passwd текстовым редактором тоже работает, но это худший вариант: одна опечатка в формате строки — и вход не работает ни у кого, поэтому для таких правок используют vipw, который блокирует файл и проверяет результат.
Права: sudo и дополнительные группы
Само создание пользователя не даёт ему прав администратора. Чтобы он мог выполнять команды через sudo, его добавляют в соответствующую группу: на Debian и Ubuntu это sudo, на RHEL, Fedora и openSUSE — wheel.
sudo usermod -aG sudo ivan # Debian, Ubuntu
sudo usermod -aG wheel ivan # RHEL, Fedora, openSUSE
Ключ -a обязателен. Без него -G перезапишет весь список дополнительных групп, и пользователь потеряет все ранее выданные права, включая доступ к docker или общим каталогам.
Точечные правила удобнее держать в отдельном файле в каталоге /etc/sudoers.d/, например /etc/sudoers.d/ivan, со строкой ivan ALL=(ALL:ALL) ALL. Редактировать такие файлы нужно через visudo (sudo visudo -f /etc/sudoers.d/ivan): он проверяет синтаксис до сохранения, тогда как прямая правка с ошибкой способна лишить sudo всех администраторов сразу.
Полный sudo подходит не всем. На сборочных серверах, в CI и на машинах с чужими секретами разумнее выдать ограниченный набор команд через Cmnd_Alias, а не разрешать всё подряд. А для аккаунта, который просто обслуживает службу, единственно верный вариант — /usr/sbin/nologin в качестве оболочки и никаких групп администраторов.
Проверка, изменение и удаление
Убедиться, что всё создалось правильно, помогают три команды: id ivan покажет UID, GID и группы, getent passwd ivan выведет запись из базы пользователей (не только из /etc/passwd, но и из LDAP или SSSD, если они настроены), а ls -ld /home/ivan подтвердит наличие и права домашней директории.
Дальнейшие правки делают через usermod: -s меняет оболочку, -d с ключом -m переносит домашнюю директорию, -L блокирует вход, -U снимает блокировку. Блокировка без удаления полезнее увольнения: sudo passwd -l ivan закрывает вход по паролю, но оставляет файлы и права на месте.
Удаление — это sudo userdel ivan (учётная запись исчезает, домашняя директория и почта остаются) или sudo userdel -r ivan вместе с файлами. Перед удалением стоит проверить, не запущены ли от этого пользователя процессы: если процесс жив, часть файлов может остаться с прежним владельцем-UID, и на них потом никто не имеет прав. В компаниях с парком машин локальные учётные записи неудобны — их ведут централизованно в LDAP или Active Directory через SSSD, а useradd оставляют для сервисных аккаунтов.
Частые ошибки и вопросы
Чем useradd отличается от adduser? adduser в Debian и Ubuntu — это скрипт-обёртка над useradd, который сам создаёт домашнюю директорию, копирует туда /etc/skel и спрашивает пароль. В RHEL и производных adduser — просто ссылка на useradd, поэтому интерактивного диалога там не будет, и рассчитывать на него в инструкциях и скриптах для разных дистрибутивов не стоит.
Почему пользователь создан, но войти не удаётся? Три типовые причины: пароль не задан, вход заблокирован, либо оболочка указана как /usr/sbin/nologin. Состояние покажет sudo passwd -S ivan: буква P означает, что пароль установлен, L — что вход заблокирован.
Можно ли создать пользователя без домашней директории? Да, для этого -m не указывают. Для сервисного аккаунта это норма: ему нужны только доступ к файлам и запуск процесса. Для живого человека — плохо: не будет ни .bashrc, ни каталога .ssh для ключей, ни места под кеш.
Как создать сразу несколько пользователей? Циклом по списку в скрипте или через newusers с подготовленным файлом. Второй способ безопаснее: он обрабатывает весь список одной операцией и возвращает ошибку, если строка заполнена неверно.
Для обычного рабочего аккаунта начинайте с adduser на Debian и Ubuntu или с useradd -m -s /bin/bash на остальных системах, сразу задайте пароль и добавьте пользователя в нужную группу с ключом -aG. Сервисным учёткам ставьте /usr/sbin/nologin, не выдавайте sudo и не создавайте домашнюю директорию без необходимости. Дальше проверяйте результат через id и getent, меняйте параметры через usermod и удаляйте через userdel -r, заранее решив, что делать с оставшимися файлами. Именно эта дисциплина — явные флаги вместо надежды на настройки по умолчанию, отдельные файлы в /etc/sudoers.d/ вместо правки главного конфига и проверка состояния перед удалением — отличает управляемый парк серверов от набора машин, где доступ держится на честном слове.


