Управление пользователями и группами в Linux: команды useradd, usermod, userdel и настройка sudo | AdminWiki

Управление пользователями и группами в Linux: команды useradd, usermod, userdel и настройка sudo

18 сентября 2026 15 мин. чтения
Содержание статьи

Базовые понятия: пользователи, группы и зачем ими управлять

Ядро Linux не работает с именами. Ему нужны числа: UID процесса и GID группы, к которой этот процесс относится. Имена вроде alice или docker существуют для людей, а система сопоставляет их с числами через /etc/passwd и /etc/group. При каждом обращении к файлу или сокету ядро сверяет числовой владелец с правами процесса, поэтому любое изменение учётной записи сразу влияет на доступ к данным и службам.

Все задачи сводятся к трём операциям: создать запись, изменить её, удалить. За создание отвечает useradd (в Debian и Ubuntu есть ещё adduser), за изменение - usermod, за удаление - userdel. Дополняют набор passwd, chage и gpasswd. Права администратора выдаются через sudo, который читает правила из /etc/sudoers и каталога /etc/sudoers.d.

Группы экономят время: вместо выдачи доступа каждому сотруднику отдельно вы добавляете человека в группу, а права настраиваете один раз для всей группы. Формат прав, маски и списки ACL разобраны в руководстве по правам доступа в Linux.

Типы пользователей: системные и обычные

Системные учётные записи обслуживают службы, а не людей. Nginx работает от www-data, PostgreSQL от postgres, задачи без привилегий часто выполняются от nobody. Такие записи создаются с флагом useradd -r и получают UID из младшего диапазона: 1-999 в Debian и Ubuntu, 1-499 в RHEL, CentOS и производных. Домашний каталог им обычно не нужен, а оболочка указывается как /usr/sbin/nologin, чтобы вход в систему был закрыт.

Обычные пользователи получают UID от 1000 (в Debian и Ubuntu) или от 500 (в RHEL). У них есть домашний каталог в /home, интерактивная оболочка и пароль. Границы заданы в /etc/login.defs параметрами UID_MIN и UID_MAX, поэтому в нестандартных сборках значения отличаются. Проверить текущие: grep -E '^UID_(MIN|MAX)' /etc/login.defs.

ПараметрСистемный пользовательОбычный пользователь
UID1-999 (Debian/Ubuntu), 1-499 (RHEL/CentOS)от 1000 или от 500
Домашний каталогкак правило отсутствует/home/имя
Оболочка/usr/sbin/nologin или /bin/false/bin/bash и другие из /etc/shells
Флаг созданияuseradd -ruseradd -m
Интерактивный входзапрещёнразрешён

Основная и дополнительные группы: в чём разница

У пользователя ровно одна основная группа, её GID записан в четвёртом поле /etc/passwd. Эта группа становится владельцем новых файлов, которые создаёт пользователь. Дополнительные группы перечислены в /etc/group и дают доступ к чужим ресурсам, при этом основную группу не меняют.

Пример: у пользователя deploy основная группа deploy с GID 1005, а дополнительные - docker и www-data. Файл, созданный deploy, получит владельца deploy:deploy, но обратиться к сокету Docker он сможет только за счёт членства в группе docker.

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

Создание пользователя: useradd и adduser

useradd ничего не спрашивает и по умолчанию не создаёт домашний каталог: все параметры передаются флагами. adduser в Debian и Ubuntu задаёт вопросы и выполняет больше шагов автоматически. В RHEL, CentOS, AlmaLinux и Rocky Linux команда adduser - символическая ссылка на useradd, интерактивного режима там нет.

useradd: низкоуровневое создание пользователя

Синтаксис: useradd [опции] имя. Основные флаги:

  • -m - создать домашний каталог и скопировать в него содержимое /etc/skel;
  • -s - оболочка входа, например /bin/bash или /bin/zsh;
  • -c - комментарий, он попадает в поле GECOS;
  • -G - дополнительные группы через запятую;
  • -g - основная группа по имени или GID;
  • -u - конкретный UID;
  • -d - путь к домашнему каталогу;
  • -r - создать системного пользователя;
  • -e - дата закрытия учётной записи в формате YYYY-MM-DD.

Рабочий пример: useradd -m -s /bin/bash -c 'Deploy User' -G docker deploy. Команда создаёт пользователя deploy с каталогом /home/deploy, оболочкой bash и членством в группе docker. Пароль задаётся отдельно: passwd deploy. Без пароля запись появится, но войти по нему будет нельзя.

adduser: интерактивное создание в Debian/Ubuntu

Команда adduser alice последовательно запросит пароль, полное имя и необязательные сведения, затем создаст домашний каталог, скопирует /etc/skel, назначит одноимённую основную группу и добавит записи в /etc/passwd и /etc/shadow. Оболочкой по умолчанию станет /bin/bash.

Системный пользователь для службы создаётся так: adduser --system --group --no-create-home myservice. Ключ --system выбирает UID из системного диапазона, --group создаёт одноимённую группу, --no-create-home оставляет систему без домашнего каталога. Проверка результата: id myservice.

В Debian и Ubuntu adduser - отдельный скрипт на Perl со своими ключами (--disabled-password, --gecos, --shell). В RHEL, CentOS, AlmaLinux и Rocky Linux такого скрипта нет: adduser вызывает useradd и принимает только его флаги.

Типичные ошибки при создании пользователя

  • Забыли -m. Домашнего каталога нет, вход завершается сообщением о невозможности перейти в /home/имя. Решение: создать каталог и назначить владельца командой chown имя:имя /home/имя либо повторить usermod -m -d /home/имя имя.
  • Указали несуществующую оболочку. useradd не проверяет её наличие, а вход после этого не работает. Сверяйтесь со списком в /etc/shells.
  • Не задали пароль. Учётная запись без хэша в /etc/shadow блокирована: для системного пользователя это норма, для человека - нет.
  • Занятый UID. useradd предупредит, но запись создаст, и два пользователя получат доступ к одним файлам. Проверка: getent passwd 1500 или id -u имя.
  • Имя с заглавными буквами или точкой. При включённой проверке NAME_REGEX в /etc/login.defs команда откажется работать. Используйте строчные латинские буквы, цифры и дефис.

Изменение параметров пользователя: usermod и passwd

usermod правит существующую запись. Часть изменений требует, чтобы пользователь не был в системе: иначе утилита предупредит, что он работает, и завершится с ошибкой. Проверить сеансы помогает команда who или ps -u имя.

Смена пароля и управление сроком действия

passwd alice меняет пароль. Пользователь может сменить свой пароль сам, root задаёт пароль любому без знания старого. Служебные ключи: passwd -l alice блокирует вход по паролю, passwd -u alice снимает блокировку, passwd -S alice показывает состояние записи и дату последней смены.

Сроки действия настраивает chage. chage -l alice выводит текущую политику, chage -M 90 alice задаёт максимум 90 дней, chage -m 7 alice требует менять пароль не чаще раза в неделю, chage -W 14 alice включает предупреждение за 14 дней, chage -E 2027-01-31 alice закрывает учётную запись в указанную дату. Значения хранятся в полях 4-8 файла /etc/shadow, и всё можно задать одной командой: chage -M 90 -W 14 -E 2027-01-31 alice.

Изменение оболочки, домашней директории и имени

usermod -s /bin/zsh alice меняет оболочку. Перед этим убедитесь, что путь есть в /etc/shells: иначе часть служб, например FTP или SSH с проверкой оболочки, откажет во входе.

usermod -d /home/newhome -m alice переносит домашний каталог вместе с содержимым. Флаг -m обязателен: без него путь в /etc/passwd изменится, а файлы останутся на старом месте, и пользователь потеряет к ним доступ. Если каталог уже перенесён вручную, применяйте usermod -d без -m.

usermod -l newname oldname переименовывает пользователя. Домашний каталог и почтовый ящик при этом не переименовываются. Группу с прежним именем правят отдельно: groupmod -n newname oldname. Оба действия выполняются за один шаг: usermod -l newname -d /home/newname -m oldname.

Смена UID делается командой usermod -u 2000 alice. После неё нужно исправить владельца файлов во всех каталогах, где они есть: find / -user 1001 -exec chown -h 2000 {} +. Иначе файлы останутся с числовым владельцем.

Блокировка и разблокировка учётной записи

usermod -L alice блокирует пароль, добавляя восклицательный знак перед хэшем в /etc/shadow. usermod -U alice снимает блокировку. Те же действия выполняют passwd -l и passwd -u.

Блокировка пароля не закрывает доступ по SSH-ключу: пользователь с ключом в ~/.ssh/authorized_keys продолжит входить. Чтобы закрыть доступ полностью, замените оболочку командой usermod -s /usr/sbin/nologin alice, при необходимости завершите сеансы через pkill -KILL -u alice и добавьте DenyUsers alice в /etc/ssh/sshd_config. Безопасный вход по ключам и отключение парольной аутентификации разобраны в руководстве по аутентификации и безопасному доступу в Linux.

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

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

Команда usermod -aG: безопасное добавление

Синтаксис: usermod -aG группа пользователь. Пример: usermod -aG docker deploy. Флаг -a означает «добавить», -G задаёт список дополнительных групп. Без -a команда usermod -G docker deploy перезапишет набор: пользователь останется только в docker и потеряет все прочие группы, включая sudo.

Перед изменением сохраните текущее состояние: id -nG deploy > /tmp/deploy_groups.txt. Добавить сразу несколько групп: usermod -aG docker,www-data deploy.

Альтернатива для одной группы: gpasswd -a deploy docker. Она не затрагивает другие группы и удобна в скриптах.

С группой docker нужна отдельная осторожность: членство в ней открывает доступ к сокету /var/run/docker.sock, а через него можно смонтировать каталог хоста в контейнер и получить права root на машине. Как ограничить этот риск, разобрано в материале про права доступа Docker-контейнеров.

Проверка членства в группах

  • id alice - UID, GID и полный список групп;
  • groups alice - только имена групп;
  • id -nG alice - имена групп одной строкой;
  • getent group docker - состав группы docker и её GID;
  • getent passwd alice - запись из /etc/passwd или из центрального каталога, если подключены LDAP и SSSD.

Изменения в /etc/group не подхватываются открытыми сеансами. Пользователю нужно выйти и войти снова либо выполнить newgrp docker в текущей оболочке: команда подменяет основную группу и действует только внутри неё.

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

gpasswd -d alice docker убирает alice из группы docker и не затрагивает остальные. Второй способ - usermod -G с полным перечнем оставшихся групп, например usermod -G sudo,video alice. Вариант рискованный: пропустите группу в списке, и пользователь её лишится.

Правка /etc/group вручную возможна, но требует аккуратности. Файл открывают через vigr: он блокирует его от одновременных изменений и проверяет результат. При прямом редактировании легко получить дубликат записи или потерять часть членов группы.

Удаление пользователя: userdel и очистка данных

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

userdel без флагов: что остаётся

userdel alice удаляет запись из /etc/passwd, /etc/shadow и /etc/group, а в части сборок также из /etc/subuid и /etc/subgid. Домашний каталог /home/alice и почтовый ящик /var/mail/alice остаются на диске.

Файлы пользователя становятся «осиротевшими»: в выводе ls -l вместо имени владельца появляется число. Это удобно, когда данные нужно сохранить и передать другому сотруднику, но опасно, если каталог забудут: он останется доступным по прежним правам.

userdel -r: полное удаление с домашней директорией

userdel -r alice удаляет запись, домашний каталог и почтовый ящик. За пределами /home ничего не стирается: файлы в /var/www, /opt, /srv и /tmp останутся, а задания в crontab пользователя обычно снимаются вместе с записью.

Если пользователь ещё работает, userdel откажется удалять запись: сначала завершите сеансы или выполните pkill -KILL -u alice. Проверить процессы заранее: ps -u alice. Найти файлы вне домашнего каталога: find / -xdev -user alice -not -path '/home/alice/*' 2>/dev/null.

Группа, оставшаяся после пользователя, удаляется командой groupdel alice, если она больше никому не нужна и не используется как основная.

Типичные ошибки при удалении

  • userdel -r без резервной копии. Сначала архив: tar czf /backup/alice-2026.tar.gz /home/alice.
  • Удаление системного пользователя, от которого зависит служба. Учётные записи mysql или postgres нужны процессам, и потеря владельца файлов данных ломает запуск. Сверьтесь с документацией пакета.
  • Удаление пользователя, владеющего файлами в /etc или /var. Это нарушает работу системы. Проверьте: find /etc /var -user alice.
  • Повторное использование освободившегося UID. Новая запись получит доступ к старым файлам. Следите за диапазоном UID или смените владельца файлов заранее.

Настройка sudo: выдача прав и правила безопасности

sudo запускает команду от имени другого пользователя, по умолчанию root, и проверяет правила в /etc/sudoers и в файлах каталога /etc/sudoers.d. Файл /etc/sudoers нельзя редактировать напрямую: ошибка в синтаксисе оставит вас без административного доступа.

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

В Debian и Ubuntu права выдаёт группа sudo: usermod -aG sudo alice. В RHEL, CentOS, Fedora и производных используется группа wheel: usermod -aG wheel alice. После добавления пользователь должен выйти и войти снова.

Проверить применение прав: sudo -l -U alice. Команда покажет список разрешённых и запрещённых команд. В /etc/sudoers при этом должны быть строки вида %sudo ALL=(ALL:ALL) ALL или %wheel ALL=(ALL) ALL. Членство в такой группе даёт полный доступ root, поэтому в продакшене его выдают ограниченному кругу сотрудников.

Создание отдельного файла в /etc/sudoers.d/

Точные правила удобнее держать в отдельном файле. Пример: разрешим alice перезапускать nginx без пароля. Создайте файл /etc/sudoers.d/alice с содержимым alice ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx и откройте его командой visudo -f /etc/sudoers.d/alice, которая проверяет синтаксис перед сохранением.

Требования к файлам в этом каталоге: права 0440 через chmod 440, владелец root:root, отсутствие точки в имени. Файл с точкой sudo проигнорирует с предупреждением в системном логе. Каталог /etc/sudoers.d подключается директивой #includedir в /etc/sudoers, файлы читаются в алфавитном порядке.

Проверить все файлы разом: visudo -c. Команда выведет синтаксические ошибки с указанием файла и строки. В компаниях с десятками серверов правила удобнее выдавать не по пользователям, а по ролям: группа devops управляет сервисами, группа backup читает только логи. Как связать такие роли с группами каталога, описано в руководстве по RBAC через группы LDAP.

Синтаксис sudoers и типичные ошибки

Формат правила: пользователь хост=(от_кого:группы) команды. Запись alice ALL=(ALL:ALL) ALL разрешает всё с любого хоста. Ключ NOPASSWD: перед списком команд отключает запрос пароля. Несколько правил перечисляются через запятую, запрет задаётся восклицательным знаком: /usr/bin/apt, !/usr/bin/apt remove.

  • Правка /etc/sudoers обычным редактором. Любая опечатка ломает sudo. Только visudo.
  • Неверные права на файл в /etc/sudoers.d. sudo молча пропустит файл или откажется работать.
  • NOPASSWD: ALL для всех команд. Это убирает второй фактор и превращает утечку сеанса в полный доступ root.
  • Порядок правил. Более широкое правило, стоящее выше, срабатывает раньше узкого запрета.

Если sudo сломан, файл исправляют из-под root через su - или консоль восстановления. Надёжный приём: держать открытым второй терминал с выполненной командой sudo -i, пока меняете правила.

Структура файлов /etc/passwd, /etc/shadow и /etc/group

Три файла описывают учётные записи: /etc/passwd хранит пользователей, /etc/shadow - пароли и политику их действия, /etc/group - группы. Первый и третий читают все, второй доступен только root, поэтому хэши паролей недоступны обычным процессам.

/etc/passwd: поля и примеры

Строка alice:x:1001:1001:Alice Smith,,,:/home/alice:/bin/bash состоит из семи полей, разделённых двоеточием:

ПолеЗначениеСмысл
1aliceимя пользователя
2xпризнак того, что хэш пароля лежит в /etc/shadow; пустое поле означает вход без пароля
31001UID
41001GID основной группы
5Alice Smith,,,GECOS: полное имя, кабинет, телефоны, прочие сведения
6/home/aliceдомашний каталог
7/bin/bashоболочка входа

Оболочка /usr/sbin/nologin или /bin/false закрывает интерактивный вход. Пользователи с такими оболочками обслуживают службы. Проверить конкретную запись: getent passwd alice. Найти всех, кто может войти: grep -vE 'nologin|false$' /etc/passwd.

/etc/shadow: хранение паролей и политики

Строка alice:$6$...:19800:0:90:14:7:30:20000: содержит девять полей: имя, хэш пароля, дата последней смены в днях от 1 января 1970, минимальный срок между сменами, максимальный срок, дни предупреждения, дни неактивности после истечения, дата закрытия учётной записи и зарезервированное поле.

Признаки блокировки: хэш начинается с восклицательного знака или звёздочки. Именно такой символ добавляет usermod -L. Пустое поле пароля означает вход без пароля, что недопустимо для учётной записи с доступом к командной оболочке.

Править файл вручную можно только через vipw -s: утилита блокирует его и проверяет формат. После правки сроков сверьтесь с chage -l alice, значения должны совпасть.

/etc/group: членство и GID

Строка docker:x:999:alice,bob состоит из четырёх полей: имя группы, признак пароля (сегодня почти всегда x), GID и список пользователей через запятую. Основная группа пользователя в этом файле не указана: она определяется полем GID в /etc/passwd, и добавлять туда пользователя повторно не нужно.

Проверка состава: getent group docker. Все группы пользователя: id -nG alice. Правка: vigr, который так же блокирует файл и проверяет формат.

Типичные ошибки и как их избежать

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

Потеря групп при usermod -G

Команда usermod -G docker alice оставит alice только в docker. Если она была в sudo, права администратора исчезнут. Перед сменой групп сохраните состояние: id -nG alice > /tmp/alice_groups.txt, после правки сверьте результат командой id alice. Когда нужно добавить группу, всегда используйте -aG.

Опасность редактирования sudoers без visudo

/etc/sudoers читается целиком при каждом вызове sudo, и одна лишняя запятая или незакрытая кавычка делает команду нерабочей для всех. Используйте visudo и visudo -f для файлов в /etc/sudoers.d, результат проверяйте через visudo -c. Запасной вход: su - с паролем root или консоль виртуальной машины.

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

Удаление пользователя без резервной копии

Последовательность безопасного удаления:

  1. Проверить процессы: ps -u alice.
  2. Найти файлы вне домашнего каталога: find / -xdev -user alice 2>/dev/null.
  3. Сделать архив: tar czf /backup/alice-2026.tar.gz /home/alice.
  4. Снять задания из cron и at, если они есть.
  5. Выполнить userdel -r alice.
  6. Убедиться, что UID не занят новой записью: getent passwd 1001.

Чек-лист и итоги

Сводка команд по типовым задачам администратора:

  • Создать обычного пользователя: useradd -m -s /bin/bash -G docker deploy, затем passwd deploy.
  • Создать пользователя интерактивно в Debian и Ubuntu: adduser alice.
  • Создать системного пользователя: adduser --system --group --no-create-home myservice или useradd -r -s /usr/sbin/nologin myservice.
  • Добавить в дополнительную группу: usermod -aG docker deploy.
  • Выдать права sudo: usermod -aG sudo alice в Debian и Ubuntu, usermod -aG wheel alice в RHEL и CentOS.
  • Сменить пароль и настроить срок: passwd alice, chage -M 90 -W 14 alice.
  • Заблокировать вход: usermod -L alice и usermod -s /usr/sbin/nologin alice.
  • Удалить из группы: gpasswd -d alice docker.
  • Удалить пользователя вместе с данными: userdel -r alice.
  • Проверить результат: id alice, sudo -l -U alice, getent group docker.

Правила, которые экономят время и нервы: всегда -aG при добавлении группы, только visudo при правке sudo, резервная копия перед userdel -r, проверка id до и после изменений. Учитывайте различия дистрибутивов: группа sudo против wheel, adduser как скрипт против символической ссылки на useradd, границы системных UID 1000 в Debian и Ubuntu против 500 в RHEL и CentOS.

Поделиться:
Сохранить гайд? В закладки браузера