← Весь справочник

useradd и usermod

Создание и изменение пользователей и групп — useradd, usermod, groupadd, passwd, chage, userdel

Пользователи и группы хранятся в текстовых файлах: /etc/passwd, /etc/shadow и /etc/group. Править их руками не нужно — для этого есть useradd, usermod, groupadd, passwd и их родственники. Все изменения требуют прав root.

Синтаксис

useradd [опции] имя          # создать пользователя
usermod [опции] имя          # изменить существующего
userdel [-r] имя             # удалить
groupadd [опции] группа      # создать группу
groupmod [опции] группа      # изменить группу
groupdel группа              # удалить группу
gpasswd -a|-d имя группа     # добавить в группу / убрать из группы
passwd [опции] [имя]         # пароль и его состояние
chage [опции] имя            # сроки действия пароля и учётной записи

Форматы файлов

ФайлПоля через :
/etc/passwdимя:x:UID:GID:комментарий:домашний_каталог:оболочка — x значит, что пароль в /etc/shadow
/etc/shadowимя:хеш:последняя_смена:мин:макс:предупреждение:неактивность:истекает: — даты в днях с 1970 года; ! или * вместо хеша — вход по паролю невозможен
/etc/groupгруппа:x:GID:участник1,участник2 — здесь перечислены только дополнительные участники

Читать удобнее через getent passwd имя, getent group группа и id имя.

useradd

ОпцияЧто делает
-mсоздать домашний каталог и скопировать в него /etc/skel
-Mне создавать домашний каталог
-d /путьпуть к домашнему каталогу (по умолчанию /home/имя)
-k каталогвзять шаблон домашнего каталога не из /etc/skel (вместе с -m)
-s /bin/bashоболочка входа; /usr/sbin/nologin — запретить вход
-u 1500UID; -o — разрешить неуникальный UID
-g группаосновная группа (должна существовать)
-G группа1,группа2дополнительные группы
-U / -Nсоздать личную группу с именем пользователя (по умолчанию в Ubuntu) / не создавать, взять группу из useradd -D
-rсистемная учётная запись: UID меньше 1000, без домашнего каталога
-c 'текст'комментарий (обычно полное имя)
-e 2030-12-31дата, после которой учётная запись отключается
-p 'хеш'готовый хеш пароля (не сам пароль)
-Dпоказать значения по умолчанию; -D -s /bin/bash — изменить их

usermod

ОпцияЧто делает
-aG группа1,группа2добавить в дополнительные группы
-G группа1,группа2заменить весь список дополнительных групп
-g группасменить основную группу
-s оболочкасменить оболочку входа
-d /новый -mсменить домашний каталог и перенести содержимое
-l новое_имяпереименовать пользователя (каталог не переименовывается)
-u UIDсменить UID; файлы пользователя в домашнем каталоге получат новый UID, остальные — нет (ищи их через find / -uid СТАРЫЙ)
-c 'текст'сменить комментарий
-L / -Uзаблокировать / разблокировать пароль
-e 2030-12-31 / -e ''дата отключения учётной записи / убрать дату

Группы

КомандаЧто делает
groupadd devsсоздать группу; -g 1500 — с заданным GID, -r — системную
groupmod -n новое староепереименовать группу; -g GID — сменить GID
groupdel devsудалить группу (нельзя, если она основная у кого-то)
gpasswd -a alice devs / gpasswd -d alice devsдобавить в группу / убрать из группы
gpasswd -M alice,bob devsзадать список участников целиком

passwd и chage

КомандаЧто делает
passwd имязадать пароль интерактивно; без имени — свой
passwd -S имястатус: имя, P/L/NP (есть пароль / заблокирован / нет пароля), дата смены, мин., макс., предупреждение, неактивность
passwd -l / -uзаблокировать / разблокировать пароль
passwd -dудалить пароль — вход без пароля
passwd -eзаставить сменить пароль при следующем входе
passwd -n 1 -x 90 -w 7мин. и макс. срок жизни пароля, за сколько дней предупреждать
echo 'имя:пароль' | chpasswdзадать пароль без интерактива; chpasswd -e — принимает готовый хеш
chage -l имяпоказать все сроки в читаемом виде
chage -M 90 -E 2030-12-31 имямакс. срок пароля / дата отключения учётной записи
chage -d 0 имято же, что passwd -e

Удаление

КомандаЧто делает
userdel имяудалить учётную запись, файлы остаются
userdel -r имяудалить вместе с домашним каталогом и почтовым ящиком
userdel -f имяудалить, даже если пользователь сейчас работает

Примеры

# обычный пользователь: домашний каталог, bash, группа sudo
useradd -m -s /bin/bash -c 'Alice Smith' -G sudo alice

# сервисная учётка: без входа и без домашнего каталога в /home
useradd -r -s /usr/sbin/nologin -d /srv/app -M appsvc

# группа и добавление в неё существующего пользователя
groupadd devs
usermod -aG devs alice
gpasswd -d alice devs          # убрать из группы

# задать пароль без интерактива (из скрипта)
echo 'alice:S3cret-pass' | chpasswd

# временная учётка: отключится в конце года, пароль сменить при входе
useradd -m -e 2030-12-31 contractor
chage -d 0 contractor

# запретить вход, не удаляя пользователя
usermod -L -s /usr/sbin/nologin alice

# проверить, что получилось
id alice
getent passwd alice
getent group devs
passwd -S alice
chage -l alice

# выполнить команду от имени пользователя
su - alice -c 'id; pwd'

# удалить пользователя вместе с домашним каталогом
userdel -r alice

Подводные камни

  • usermod -G без -a заменяет список групп. usermod -G devs alice выкинет alice из sudo и всех остальных дополнительных групп. Почти всегда нужен -aG.
  • Без -m домашний каталог не создаётся. В Ubuntu useradd alice пропишет /home/alice в /etc/passwd, но каталога не будет. Оболочка по умолчанию — /bin/sh, а не bash. Удобная обёртка adduser делает всё это сама, но задаёт вопросы интерактивно.
  • Новые группы видны только в новой сессии. Уже запущенная оболочка пользователя про usermod -aG не узнает — нужно перелогиниться (или su - имя).
  • Основная группа не видна в /etc/group. Список участников там — только дополнительные. Полную картину даёт id имя.
  • Новый пользователь без пароля заблокирован (! в /etc/shadow, статус L). Войти по паролю нельзя, но root может зайти через su - имя. А usermod -U откажется разблокировать — сначала задай пароль.
  • -p ждёт хеш, а не пароль. useradd -p secret запишет строку secret как хеш, и войти с ней не получится. Хеш даёт openssl passwd -6, а проще — chpasswd.
  • passwd -d делает вход вообще без пароля. Для блокировки нужен -l. При этом -l не мешает входу по SSH-ключу — чтобы запретить вход совсем, смени оболочку на nologin или поставь дату отключения.
  • userdel без -r оставляет домашний каталог. Его файлы будут принадлежать «голому» UID, который может достаться следующему созданному пользователю.
  • usermod -d новый -m при отсутствии старого каталога выдаст ошибку, но путь в /etc/passwd всё равно поменяет.
  • useradd -o -u 0 создаёт второго root под другим именем. Так не делай — это классическая закладка.

См. также

sudo · id · su · chage · getent · chown · chmod · umask