hostprofi.ru
Подобрать хостинг
Термин·буква П

Принцип наименьших привилегий

краткое определение

Принцип безопасности: каждый процесс и пользователь получает только минимально необходимые права.

Принцип наименьших привилегий (Principle of Least Privilege, PoLP) — фундаментальный принцип информационной безопасности: каждый субъект системы (пользователь, процесс, сервис) должен иметь только минимальный набор прав, необходимых для выполнения своей задачи, и не более.

Как работает

Принцип реализуется на нескольких уровнях. На уровне пользователей: веб-сервер работает от пользователя www-data без прав sudo, не может изменить системные файлы. На уровне процессов: Nginx мастер-процесс запускается от root (для привязки к порту 80), рабочие процессы — от www-data. На уровне сети: файервол разрешает только необходимые порты.

Применительно к базам данных: приложение подключается к MariaDB пользователем с правами только SELECT/INSERT/UPDATE на конкретных таблицах — не как root. SQL-инъекция при таких правах не может сделать DROP TABLE или прочитать системные таблицы.

История

Принцип сформулировал Джером Солцер совместно с Майклом Шредером в статье 1975 года «The Protection of Information in Computer Systems». Это одна из восьми фундаментальных принципов защиты систем. В 1980-х принцип PoLP стал обязательным требованием военных стандартов США (Orange Book, DoD). Современные реализации: SELinux, AppArmor, capabilities Linux, RBAC в Kubernetes.

Реализация на Linux-сервере

# Создать системного пользователя без shell и домашней директории
useradd -r -s /usr/sbin/nologin myapp

# Запустить сервис от этого пользователя (systemd unit)
[Service]
User=myapp
Group=myapp

# Linux capabilities: дать процессу только нужное
# Привязаться к порту 80 без root
setcap cap_net_bind_service=+ep /usr/bin/node

# Проверить capabilities
getcap /usr/bin/node

PoLP в контейнерах

Docker: добавление --no-new-privileges запрещает контейнеру повышать привилегии через setuid. --read-only монтирует файловую систему контейнера только для чтения. --cap-drop ALL --cap-add NET_BIND_SERVICE убирает все capabilities кроме необходимых.

В Kubernetes SecurityContext задаёт PoLP на уровне Pod: runAsNonRoot: true, allowPrivilegeEscalation: false, readOnlyRootFilesystem: true.

На что обращать внимание

Слишком жёсткие ограничения нарушают работу легитимных функций — находите баланс. Аудит прав раз в квартал: sudo -l, список пользователей с shell, SUID-файлы (find / -perm /4000). Компрометация сервиса с минимальными правами ограничивает ущерб одним приложением, не даёт root всей системы — основная ценность PoLP.

RBAC и управление доступом

Role-Based Access Control (RBAC) реализует PoLP через роли: пользователю назначается роль «developer» с правом деплоя, но без доступа к продакшен-базе данных. В Kubernetes: ServiceAccount получает только право читать ConfigMap в конкретном namespace. В MariaDB: роль app_readonly с SELECT на определённых таблицах.

Временные привилегии: вместо постоянного sudo права используйте sudo -l для просмотра разрешённых команд. HashiCorp Vault выдаёт временные (TTL: 1 час) credentials для баз данных — после истечения доступ автоматически отзывается. Это исключает утечку долгоживущих паролей.

Аудит прав

Регулярный аудит — неотъемлемая часть PoLP:

# Все пользователи с shell (не /usr/sbin/nologin)
grep -v nologin /etc/passwd | grep -v false

# Пользователи в группе sudo/wheel
getent group sudo
getent group wheel

# SUID-файлы (могут давать root-права)
find / -perm /4000 -type f 2>/dev/null

# Что может sudo текущий пользователь
sudo -l

Другие термины