Пользователь (user) в Linux — субъект безопасности, от имени которого запускаются процессы и которому назначаются права доступа к файлам. Каждый пользователь идентифицируется числовым UID (User Identifier). Информация хранится в /etc/passwd, хэши паролей — в /etc/shadow.
Структура системы пользователей
root (UID 0) — суперпользователь с неограниченными правами. Может делать всё: читать любые файлы, убивать любые процессы, изменять системную конфигурацию. На production-серверах прямой вход под root по SSH рекомендуется отключать (PermitRootLogin no).
Системные пользователи (UID 1–999) — создаются при установке служб: www-data (Apache/Nginx), mysql, postgres, nobody. Эти учётные записи не имеют пароля и настоящего shell — они существуют только для запуска процессов от изолированного имени.
Обычные пользователи (UID 1000+) — реальные люди или сервисные аккаунты для ssh-доступа. Могут повышать привилегии через sudo при наличии разрешения.
Управление: useradd -m -s /bin/bash username (создать пользователя с домашней директорией), passwd username (установить пароль), usermod -aG sudo username (добавить в группу sudo).
История
Концепция UNIX-пользователей введена в Unix Version 1 (1969–1971) в Bell Labs. Разграничение пользователей и привилегий — основа многопользовательской ОС. Sudo разработан Роберт Коллером в 1980 году. SELinux и AppArmor добавляют мандатный контроль поверх стандартной DAC-модели.
Связь с хостингом
На VPS первый шаг — создать не-root пользователя с sudo и настроить SSH-ключ. Веб-приложения запускаются под отдельными пользователями (www-data, deploy) с минимальными правами. На shared-хостинге каждый клиент работает под своим Linux-пользователем — это обеспечивает изоляцию через права файловой системы.
Управление пользователями Linux
useradd -m -s /bin/bash username — создание. usermod -aG sudo username — добавление в группу. userdel -r username — удаление с домашней директорией. passwd username — установка пароля. id username — UID, GID, группы.
sudo и разграничение прав
sudoers (/etc/sudoers, visudo): username ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx — разрешение перезапуска конкретного сервиса без пароля. Принцип минимальных привилегий: каждый пользователь только с нужными правами. SELinux/AppArmor — обязательный контроль доступа поверх DAC.
Системные пользователи для сервисов
Каждый сервис запускается от своего пользователя: www-data (nginx/apache), mysql, postgres. systemd User= в сервисном файле. Права на файлы: chown -R www-data:www-data /var/www, chmod 750 /var/www/site. Никогда не запускать production-приложения от root.
User namespaces и rootless контейнеры
User namespaces позволяют процессу думать, что он root, оставаясь непривилегированным на хосте. Podman использует это для rootless контейнеров. Проверить поддержку: cat /proc/sys/user/max_user_namespaces. При значении 0: sysctl user.max_user_namespaces=28633.
PAM (Pluggable Authentication Modules)
PAM управляет аутентификацией в Linux. /etc/pam.d/sshd — правила для SSH. pam_google_authenticator: двухфакторная аутентификация для SSH. pam_tally2/pam_faillock: блокировка после N неудачных попыток. pam_limits: лимиты ресурсов из /etc/security/limits.conf.
Пользователи Linux управляют доступом к Nginx, PostgreSQL, Docker. systemd запускает сервисы от конкретного пользователя. SSH-доступ настраивается через authorized_keys. SFTP-пользователи работают в chroot-окружении. Разделение привилегий — основа безопасности сервера.