Пользователи и группы хранятся в текстовых файлах: /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 1500 | UID; -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