65 lines
4.7 KiB
Markdown
65 lines
4.7 KiB
Markdown
---
|
|
title: Безопасность и изоляция привилегий
|
|
description: Меры безопасности, изоляция привилегий и песочница на уровне проектов.
|
|
weight: 20
|
|
---
|
|
|
|
Безопасность в Root достигается за счет строгой изоляции привилегий и создания «песочниц» на уровне проектов для минимизации последствий в случае взлома отдельных сервисов.
|
|
|
|
## Принцип «No-Root» {#noroot}
|
|
|
|
Запуск приложений под пользователем `root` внутри контейнеров является значительным риском безопасности. Общие модули обеспечивают изоляцию с помощью действий `tiers/useradd` и `tiers/chown`.
|
|
|
|
### Пользователи для конкретных проектов
|
|
|
|
Каждому проекту, расположенному по пути `{repository root}/{node}/{project}`, назначается выделенный системный пользователь на хосте.
|
|
|
|
- **Изоляция**: Если контейнер будет взломан, злоумышленник получит только привилегии этого конкретного низкопривилегированного пользователя.
|
|
- **Безопасность файловой системы**: Проекты могут читать и записывать данные только в свои собственные директории в рамках [Уровней (Tiers)](/root/glossary#tier).
|
|
|
|
## Защита сокета Docker {#socket-protection}
|
|
|
|
Прямой доступ к `/var/run/docker.sock` эквивалентен правам root на хосте. В качестве лучшей практики настоятельно рекомендуется защищать сокет Docker. Один из способов достижения этого — использование **Socket Proxy** (например, на базе `tecnativa/docker-socket-proxy`) для фильтрации и ограничения доступа к Docker API.
|
|
|
|
```yaml filename="docker-socket-proxy-example.yml"
|
|
services:
|
|
socket-proxy:
|
|
image: tecnativa/docker-socket-proxy:0
|
|
container_name: root-socket-proxy
|
|
user: "0:0"
|
|
volumes:
|
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
|
environment:
|
|
CONTAINERS: 1
|
|
SERVICES: 1
|
|
TASKS: 1
|
|
networks:
|
|
socket: {}
|
|
restart: unless-stopped
|
|
|
|
traefik:
|
|
# ...
|
|
depends_on:
|
|
- socket-proxy
|
|
command:
|
|
# Использовать прокси вместо локального сокета
|
|
- "--providers.docker.endpoint=tcp://root-socket-proxy:2375"
|
|
networks:
|
|
socket: {}
|
|
```
|
|
|
|
## Мониторинг безопасности (CrowdSec) {#crowdsec}
|
|
|
|
Фреймворк интегрирует **CrowdSec** для поведенческого анализа и автоматического реагирования.
|
|
|
|
- **Обнаружение вторжений**: CrowdSec отслеживает логи [Traefik](https://traefik.io/) и SSH на предмет подозрительных паттернов (например, брутфорс-атаки, сканирование портов).
|
|
- **Автоматическая блокировка**: При обнаружении угрозы **CrowdSec Firewall Bouncer** автоматически обновляет правила [UFW](https://help.ubuntu.com/community/UFW), блокируя вредоносный IP на уровне хоста.
|
|
- **Обмен данными об угрозах**: CrowdSec делится анонимизированными данными об угрозах со своим сообществом, обеспечивая превентивную защиту от известных злоумышленников.
|
|
|
|
## Сетевое ужесточение {#networking}
|
|
|
|
Root использует `configure/ufw` для реализации политики «Запрещено по умолчанию» (Default Deny).
|
|
|
|
- **Внутренняя маршрутизация**: Сервисы взаимодействуют через выделенную сеть-мост `root-proxy`, которая часто настраивается как `internal: true`.
|
|
- **Изоляция анклавов**: Исходящий трафик может быть направлен через выделенный узел выхода (egress node) для детального контроля.
|