Лучшее useradd как создать пользователя с full пораметрами

Полный список опций команды 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Разрешить не уникальный UIDuseradd -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.defsuseradd -K UID_MIN=2000 user1
-l, —no-log-initНе добавлять в журналы login/utmp/wtmpuseradd -l user1
-Z, —selinux-user SEUSERSELinux пользователь для входа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.

Оставьте комментарий