Базовая модель учетных записей (1 минута теории)
- Пользователи: /etc/passwd (UID, GID, оболочка, $HOME).
- Хэши паролей: /etc/shadow (только root).
- Группы: /etc/group (GID и члены).
- Домашние каталоги — обычно /home/<user>, шаблон исходного содержимого — /etc/skel.
Создание пользователя
1. Удобный мастер adduser (Debian/Ubuntu)
sudo adduser alice
# мастер запросит пароль и профиль, создаст /home/alice и скопирует файлы из /etc/skel
2. «Низкоуровнево» через useradd (универсально)
# стандартный home и bash
sudo useradd -m -s /bin/bash alice
sudo passwd alice
Кастомный home + права:
sudo mkdir -p /srv/users/alice
sudo cp -rT /etc/skel /srv/users/alice
sudo useradd -d /srv/users/alice -s /bin/bash alice
sudo chown -R alice:alice /srv/users/alice
sudo passwd alice
Проверка:
getent passwd alice
sudo -u alice -H bash -lc 'whoami && pwd'
Группы и роли
Добавление в дополнительные группы
sudo usermod -aG sudo,adm alice
id alice
groups alice
Удаление из группы
sudo gpasswd -d alice adm
Ролевая группа для проекта/сервиса
sudo groupadd deploy
sudo usermod -aG deploy alice
Безопасный sudo (через visudo и /etc/sudoers.d)
Редактировать правила только через visudo — валидирует синтаксис и спасает от «кирпича» админки.
# желательно — отдельный файл пользователя
sudo visudo -f /etc/sudoers.d/alice
Полный sudo (как в группе sudo):
alice ALL=(ALL:ALL) ALL
Минимальные привилегии (пример для nginx):
Cmnd_Alias NGINX_CMDS = /bin/systemctl restart nginx, /bin/systemctl status nginx, /bin/journalctl -u nginx
alice ALL=(root) NOPASSWD: NGINX_CMDS
Советы
- Выдавайте права через группу по возможности:
- %webadmins ALL=(root) NOPASSWD: NGINX_CMDS → добавляйте пользователей в webadmins.
- NOPASSWD — точечно там, где нужна автоматизация.
Политика паролей (password aging) и сложность
Индивидуальные сроки через chage
# текущее состояние
sudo chage -l alice
# максимум 90 дней, предупреждать за 7, не менять чаще 1 дня
sudo chage -M 90 -W 7 -m 1 alice
# деактивировать по дате
sudo chage -E 2025-12-31 alice
Дефолты для новых пользователей (login.defs)
/etc/login.defs:
PASS_MAX_DAYS 90
PASS_MIN_DAYS 1
PASS_WARN_AGE 7
Сложность паролей (PAM, Ubuntu/Debian)
Установите libpam-pwquality и настройте /etc/pam.d/common-password, например:
password requisite pam_pwquality.so retry=3 minlen=12 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
SSH-ключи и ограничения SSH
Добавить публичный ключ пользователю
sudo -u alice -H bash -lc «mkdir -p ~/.ssh && chmod 700 ~/.ssh»
sudo -u alice -H bash -lc «cat >> ~/.ssh/authorized_keys» # вставьте содержимое *.pub, затем Ctrl+D
sudo -u alice -H bash -lc «chmod 600 ~/.ssh/authorized_keys»
Ограничить доступ в sshd_config
# когда ключи настроены — отключить пароли
PasswordAuthentication no
PubkeyAuthentication yes
# запретить прямой вход root (после выдачи sudo администраторам)
PermitRootLogin no
# ограничить доступ группой
AllowGroups sshusers
sudo groupadd sshusers
sudo usermod -aG sshusers alice
sudo systemctl restart sshd
«Технический» пользователь без shell
sudo useradd -m -s /usr/sbin/nologin backupbot
Совместная работа в каталоге (группа + ACL)
setgid на каталоге проекта (наследование группы)
sudo mkdir -p /srv/project
sudo chgrp project /srv/project
sudo chmod 2775 /srv/project
Точечные ACL (если требуются права сверх стандартных)
sudo setfacl -m u:bob:rwx /srv/project
sudo getfacl /srv/project
Аудит и настройка входов
# успешные входы
last -n 10
# кто в системе
w
who
# неудачные попытки (если faillog активен)
faillog -a
# логи SSH за сегодня
sudo journalctl -u ssh --since «today»
sudo journalctl -u ssh --grep «Failed password»
Блокировка и удаление аккаунтов
# заблокировать пароль (вход по ключу может остаться)
sudo usermod -L alice
# разблокировать
sudo usermod -U alice
# немедленная деактивация (истек срок действия)
sudo chage -E 0 alice
# завершить процессы и удалить учетную запись из home
sudo pkill -KILL -u alice
sudo userdel -r alice
# (Debian/Ubuntu удобно:)
sudo deluser --remove-home alice
Чек-лист готовности к производству
- Пользователь создан, $HOME и shell корректны, SSH-ключ добавлен.
- Группы по ролям назначены (sudo/adm/www-data/docker/…).
- sudo выдан через /etc/sudoers.d с минимальными правами.
- Политика паролей: chage/login.defs/PAM настроены.
- В SSH отключены пароли и root-логин; включено ограничение AllowGroups sshusers.
- Для проектов настроены setgid и, при необходимости, setfacl.
- Ведется аудит входов; есть процедура offboarding (lock → kill → backup → remove).