Полный список опций команды useradd
Основной синтаксис:
bash
useradd [опции] ИМЯ_ПОЛЬЗОВАТЕЛЯ
Полный список опций с примерами:
1. Основные опции создания пользователя
| Опция | Описание | Пример |
|---|---|---|
| -m, —create-home | Создать домашнюю директорию | useradd -m user1 |
| -s, —shell SHELL | Указать shell пользователя | useradd -s /bin/bash user1 |
| -d, —home-dir HOME_DIR | Задать путь к домашней директории | useradd -d /home/custom user1 |
| -u, —uid UID | Указать UID пользователя | useradd -u 1005 user1 |
| -g, —gid GID | Указать основную группу | useradd -g 1000 user1 |
| -G, —groups GROUPS | Добавить в дополнительные группы | useradd -G sudo,docker user1 |
| -c, —comment COMMENT | Комментарий (обычно ФИО) | useradd -c "John Doe" user1 |
| -k, —skel SKEL_DIR | Указать каталог-шаблон | useradd -k /etc/custom_skel user1 |
| -o, —non-unique | Разрешить не уникальный UID | useradd -o -u 1000 user1 |
| -p, —password PASSWORD | Установить пароль (небезопасно!) | useradd -p 'encrypted_pass' user1 |
| -e, —expiredate EXPIRE_DATE | Дата истечения аккаунта | useradd -e 2025-12-31 user1 |
| -f, —inactive INACTIVE | Дней неактивности до блокировки | useradd -f 30 user1 |
| -r, —system | Создать системного пользователя | useradd -r systemuser |
| -N, —no-user-group | Не создавать группу с именем пользователя | useradd -N user1 |
| -U, —user-group | Создать группу с именем пользователя (по умолчанию) | useradd -U user1 |
| -M, —no-create-home | Не создавать домашнюю директорию | useradd -M user1 |
| -D, —defaults | Показать/изменить значения по умолчанию | useradd -D |
| -b, —base-dir BASE_DIR | Базовый каталог для домашних директорий | useradd -b /opt/home user1 |
| -K, —key KEY=VALUE | Переопределить значения из /etc/login.defs | useradd -K UID_MIN=2000 user1 |
| -l, —no-log-init | Не добавлять в журналы login/utmp/wtmp | useradd -l user1 |
| -Z, —selinux-user SEUSER | SELinux пользователь для входа | useradd -Z staff_u user1 |
| -P, —prefix PREFIX_DIR | Префиксный каталог | useradd -P /mnt/chroot user1 |
2. Детальные примеры использования
Пример 1: Создание обычного пользователя (аналог adduser)
bash
# Создать пользователя с домашней директорией и bash sudo useradd -m -s /bin/bash -c "Вася Пупкин" vasya # С паролем (зашифрованным) sudo useradd -m -s /bin/bash -p '$6$salt$encrypted' vasya
Пример 2: Создание пользователя с кастомными параметрами
bash
sudo useradd \
-m \ # Создать домашнюю директорию
-s /bin/bash \ # Указать shell
-d /home/developers/vasya \ # Кастомный путь к домашней директории
-u 1500 \ # Конкретный UID
-g developers \ # Основная группа
-G sudo,docker,www-data \ # Дополнительные группы
-c "Vasya Pupkin, DevOps Engineer" \ # Комментарий
-k /etc/devops_skel \ # Кастомный шаблон
-e 2025-12-31 \ # Дата истечения аккаунта
vasya
Пример 3: Создание системного пользователя
bash
# Для служб и демонов
sudo useradd \
-r \ # Системный пользователь
-s /usr/sbin/nologin \ # Без возможности входа
-d /var/lib/mysql \ # Домашняя директория
-c "MySQL Database Server" \ # Описание
mysql
Пример 4: Создание пользователя без группы
bash
# Пользователь без персональной группы
sudo useradd \
-N \ # Не создавать группу
-g 100 \ # Использовать существующую группу (users)
-m \
username
3. Просмотр и изменение значений по умолчанию
Показать текущие значения по умолчанию:
bash
sudo useradd -D
Вывод:
text
GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/sh SKEL=/etc/skel CREATE_MAIL_SPOOL=yes
Изменить значения по умолчанию:
bash
# Изменить домашнюю директорию по умолчанию sudo useradd -D -b /opt/users # Изменить shell по умолчанию sudo useradd -D -s /bin/bash # Изменить срок истечения по умолчанию sudo useradd -D -e 2026-01-01 # Изменить каталог-шаблон sudo useradd -D -k /etc/custom_skel # Изменить всё сразу sudo useradd -D -b /opt/home -s /bin/bash -k /etc/my_skel
4. Расширенные опции с подробными примерами
Использование -K для переопределения системных значений:
bash
# Создать пользователя с UID из определенного диапазона
sudo useradd -K UID_MIN=2000 -K UID_MAX=3000 -m user1
# Создать с определенными лимитами
sudo useradd \
-K PASS_MAX_DAYS=90 \ # Макс дней для пароля
-K PASS_MIN_DAYS=1 \ # Мин дней между сменой пароля
-K PASS_WARN_AGE=7 \ # За сколько дней предупреждать
-m user1
Создание пользователя с SELinux контекстом:
bash
# Требуется SELinux
sudo useradd \
-Z user_u \ # SELinux пользователь
-m \
username
Создание в chroot окружении:
bash
sudo useradd \
-P /mnt/chroot \ # Префикс для chroot
-d /home/user1 \ # Относительно префикса
-m \
user1
# Фактический путь: /mnt/chroot/home/user1
5. Практические DevOps сценарии
Сценарий 1: Автоматическое создание пользователей для CI/CD
bash
#!/bin/bash
# create-ci-user.sh
USERNAME="jenkins-agent-$(date +%Y%m%d)"
BASE_UID=5000
# Создаем пользователя для агента Jenkins
sudo useradd \
-m \
-s /bin/bash \
-u $((BASE_UID + $(date +%H%M))) \ # Динамический UID
-d "/opt/ci-agents/${USERNAME}" \
-g jenkins \
-G docker,sudo \
-c "Jenkins CI Agent - $(date)" \
-k /etc/jenkins_skel \
-f 90 \ # Блокировать после 90 дней неактивности
"${USERNAME}"
# Устанавливаем SSH ключ
sudo mkdir -p "/opt/ci-agents/${USERNAME}/.ssh"
echo "ssh-rsa AAAAB3NzaC1yc2E..." | sudo tee "/opt/ci-agents/${USERNAME}/.ssh/authorized_keys"
sudo chmod 700 "/opt/ci-agents/${USERNAME}/.ssh"
sudo chmod 600 "/opt/ci-agents/${USERNAME}/.ssh/authorized_keys"
sudo chown -R "${USERNAME}:jenkins" "/opt/ci-agents/${USERNAME}/.ssh"
Сценарий 2: Создание пользователя с квотами
bash
#!/bin/bash # create-user-with-quota.sh USERNAME=$1 QUOTA_MB=1024 # Создаем пользователя sudo useradd -m -s /bin/bash "$USERNAME" # Устанавливаем квоты sudo setquota -u "$USERNAME" 0 $((QUOTA_MB * 1024)) 0 0 /
Сценарий 3: Массовое создание пользователей из CSV
bash
#!/bin/bash
# bulk-create-from-csv.sh
# CSV формат: username,uid,shell,home_dir,groups,comment
while IFS=, read -r username uid shell home_dir groups comment; do
echo "Создаю $username..."
sudo useradd \
-m \
-u "$uid" \
-s "$shell" \
-d "$home_dir" \
-G "$groups" \
-c "$comment" \
"$username"
# Устанавливаем временный пароль
TEMP_PASS=$(openssl rand -base64 12 | tr -d '/+=' | cut -c1-8)
echo "$username:$TEMP_PASS" | sudo chpasswd
echo "$username : $TEMP_PASS" >> passwords.txt
done < users.csv
6. Различия между useradd в разных дистрибутивах
Debian/Ubuntu:
bash
# По умолчанию создает группу с именем пользователя # Имеет adduser как удобную надстройку
RHEL/CentOS/Fedora:
bash
# По умолчанию НЕ создает группу с именем пользователя # Используйте -U для создания группы sudo useradd -m -U username
Проверка особенностей дистрибутива:
bash
# Проверить значения по умолчанию useradd -D # Проверить, создается ли группа sudo useradd testuser getent group testuser # Проверить наличие группы
7. Полный пример создания DevOps пользователя
bash
#!/bin/bash
# create-full-devops-user.sh
USERNAME="devops_$(date +%Y%m%d)"
TIMESTAMP=$(date +%s)
sudo useradd \
-m \ # Создать домашнюю директорию
-s /bin/bash \ # Shell
-d "/home/${USERNAME}" \ # Домашняя директория
-u $((2000 + TIMESTAMP % 1000)) \ # Уникальный UID
-g developers \ # Основная группа
-G "sudo,docker,kubeadm,www-data,adm" \ # Доп. группы
-c "DevOps Engineer - Created $(date '+%Y-%m-%d')" \ # Комментарий
-k /etc/devops_skel \ # Шаблон для DevOps
-e "2026-12-31" \ # Срок действия
-f 60 \ # Блокировка через 60 дней неактивности
-K "UMASK=0022" \ # Права по умолчанию
-K "CREATE_HOME=yes" \ # Всегда создавать домашнюю директорию
"${USERNAME}"
# Установка сложного пароля
PASSWORD=$(openssl rand -base64 16 | tr -d '/+=' | cut -c1-12)
echo "${USERNAME}:${PASSWORD}" | sudo chpasswd
# Настройка SSH
sudo -u "${USERNAME}" mkdir -p "/home/${USERNAME}/.ssh"
sudo -u "${USERNAME}" chmod 700 "/home/${USERNAME}/.ssh"
# Создание SSH ключа для пользователя
sudo -u "${USERNAME}" ssh-keygen -t ed25519 -f "/home/${USERNAME}/.ssh/id_ed25519" -N "" -C "${USERNAME}@$(hostname)"
# Настройка sudo без пароля для определенных команд
echo "${USERNAME} ALL=(ALL) NOPASSWD: /usr/bin/apt, /usr/bin/apt-get, /usr/bin/systemctl, /usr/bin/docker, /usr/bin/kubectl" | sudo tee "/etc/sudoers.d/${USERNAME}"
sudo chmod 440 "/etc/sudoers.d/${USERNAME}"
echo "Пользователь создан: ${USERNAME}"
echo "Пароль: ${PASSWORD}"
echo "SSH ключ: /home/${USERNAME}/.ssh/id_ed25519.pub"
8. Опции для файловых систем и квот
Создание с определенной файловой системой:
bash
# Для ZFS
sudo useradd \
-m \
-d /zpool/users/username \
username
# Для XFS с проектами
sudo useradd \
-m \
-d /home/username \
username
sudo xfs_quota -x -c "project -s -p /home/username 1000" /
Настройка umask при создании:
bash
sudo useradd \
-m \
-K UMASK=0027 \ # Более строгие права
username
9. Редко используемые, но полезные опции
-l, --no-log-init:
bash
# Пользователь не появится в who, last и т.д. sudo useradd -l -m stealthuser
-o, --non-unique (для контейнеров):
bash
# Создать пользователя с существующим UID sudo useradd -o -u 1000 -m containeruser
-P, --prefix для chroot/jail:
bash
# Создать пользователя внутри chroot
sudo useradd \
-P /srv/chroot/ubuntu \
-d /home/jailuser \
-m \
jailuser
10. Комбинации опций для разных задач
Для разработчика:
bash
sudo useradd \
-m \
-s /bin/zsh \
-d /home/dev/user \
-g developers \
-G docker,postgres,redis \
-c "Developer Account" \
-k /etc/dev_skel \
developer
Для веб-приложения:
bash
sudo useradd \
-r \ # Системный пользователь
-s /usr/sbin/nologin \
-d /var/www/myapp \
-g www-data \
-c "MyApp Web User" \
myapp
Для временного доступа:
bash
sudo useradd \
-m \
-e $(date -d "+30 days" +%Y-%m-%d) \
-f 7 \ # Блокировать через 7 дней неактивности
-c "Temporary access - Contract work" \
tempuser
11. После создания пользователя — полезные команды
bash
# Проверить созданного пользователя id username finger username getent passwd username # Изменить параметры после создания sudo usermod -s /bin/zsh username # Сменить shell sudo usermod -d /new/home username # Сменить домашнюю директорию sudo usermod -aG newgroup username # Добавить в группу sudo chage -E 2025-12-31 username # Изменить дату истечения sudo passwd username # Установить пароль # Удалить пользователя sudo userdel -r username # С удалением домашней директории
12. Таблица сравнения опций
| Опция | Краткое описание | Когда использовать |
|---|---|---|
-m | Создать домашнюю директорию | Всегда для реальных пользователей |
-s | Указать shell | Всегда указывать явно |
-d | Кастомный путь к домашней директории | При нестандартной структуре |
-u | Конкретный UID | При миграции или синхронизации |
-g | Основная группа | Когда нужна не users |
-G | Дополнительные группы | Для предоставления прав |
-c | Комментарий | Для документирования |
-k | Кастомный skel | При стандартизации окружения |
-e | Дата истечения | Для временных аккаунтов |
-f | Дни неактивности | Для автоматической очистки |
-r | Системный пользователь | Для служб и демонов |
-N | Без персональной группы | Для экономии GID |
-K | Переопределение настроек | Для тонкой настройки |
-D | Работа с настройками по умолчанию | При подготовке среды |
Важно: Всегда проверяйте созданного пользователя командой id username и права на домашнюю директорию ls -ld /home/username.