🛡 Проект на выходные: Свой VPN за 2 минуты. wg-easy
Иметь свой VPN — это гигиена. Подключаться к домашнему серверу, безопасно сидеть через Wi-Fi в кафе или обходить ограничения.
WireGuard — это стандарт. Быстрый, легкий, современный. Но настраивать конфиги и ключи вручную — это долго.
wg-easy — это Docker-контейнер, который дает вам:
1. WireGuard сервер.
2. Веб-интерфейс для управления клиентами.
3. QR-коды для мгновенного подключения с телефона.
Готовый docker-compose.yml:
Запуск: docker-compose up -d. Использование: Зайдите на http://<ip>:51821, создайте клиента, отсканируйте QR-код телефоном. Вы в безопасности.
Взгляд архитектора: Это пример Self-Service подхода. Сложная технология (VPN) упакована в удобный продукт. Идеально для Home Lab или предоставления доступа небольшой команде разработчиков.
#linux #docker #vpn #wireguard #wgeasy #selfhosted #weekendproject #гайд
Иметь свой VPN — это гигиена. Подключаться к домашнему серверу, безопасно сидеть через Wi-Fi в кафе или обходить ограничения.
WireGuard — это стандарт. Быстрый, легкий, современный. Но настраивать конфиги и ключи вручную — это долго.
wg-easy — это Docker-контейнер, который дает вам:
1. WireGuard сервер.
2. Веб-интерфейс для управления клиентами.
3. QR-коды для мгновенного подключения с телефона.
Готовый docker-compose.yml:
version: "3.8"
services:
wg-easy:
environment:
# Замените на ваш внешний IP или домен!
- WG_HOST=my.domain.com
- PASSWORD=super_secret_password
- WG_PORT=51820
- WG_DEFAULT_Address=10.8.0.x
- WG_DEFAULT_DNS=1.1.1.1
image: ghcr.io/wg-easy/wg-easy
container_name: wg-easy
volumes:
- ./wg-easy-data:/etc/wireguard
ports:
- "51820:51820/udp" # Трафик VPN
- "51821:51821/tcp" # Веб-интерфейс
restart: unless-stopped
cap_add:
- NET_ADMIN
- SYS_MODULE
sysctls:
- net.ipv4.ip_forward=1
- net.ipv4.conf.all.src_valid_mark=1
Запуск: docker-compose up -d. Использование: Зайдите на http://<ip>:51821, создайте клиента, отсканируйте QR-код телефоном. Вы в безопасности.
Взгляд архитектора: Это пример Self-Service подхода. Сложная технология (VPN) упакована в удобный продукт. Идеально для Home Lab или предоставления доступа небольшой команде разработчиков.
#linux #docker #vpn #wireguard #wgeasy #selfhosted #weekendproject #гайд
❤5👎2
🧪 Зачем админу HomeLab?
На собеседованиях на позиции Senior/Lead часто спрашивают: «Что крутится у вас дома?». Почему? Потому что HomeLab — это полигон, где вы учитесь быстрее, чем на работе. На проде страшно ломать, дома — весело.
Starter Pack для админа 2025: Если у вас есть старый ноутбук или Raspberry Pi, вот что нужно поднять (в Docker, конечно):
Pi-hole / AdGuard Home: Режем рекламу на уровне DNS для всей квартиры. Семья скажет спасибо.
WireGuard / Headscale: Свой VPN. Безопасный доступ домой из любой точки мира.
Home Assistant: Умный дом без привязки к облакам вендоров.
Uptime Kuma: Красивый мониторинг внешних ресурсов.
Vaultwarden: Свой менеджер паролей (аналог Bitwarden).
Это не просто игрушки. Это опыт настройки сетей, контейнеризации, безопасности и Nginx Proxy Manager в безопасной среде.
#homelab #selfhosted #docker #learning #petproject
На собеседованиях на позиции Senior/Lead часто спрашивают: «Что крутится у вас дома?». Почему? Потому что HomeLab — это полигон, где вы учитесь быстрее, чем на работе. На проде страшно ломать, дома — весело.
Starter Pack для админа 2025: Если у вас есть старый ноутбук или Raspberry Pi, вот что нужно поднять (в Docker, конечно):
Pi-hole / AdGuard Home: Режем рекламу на уровне DNS для всей квартиры. Семья скажет спасибо.
WireGuard / Headscale: Свой VPN. Безопасный доступ домой из любой точки мира.
Home Assistant: Умный дом без привязки к облакам вендоров.
Uptime Kuma: Красивый мониторинг внешних ресурсов.
Vaultwarden: Свой менеджер паролей (аналог Bitwarden).
Это не просто игрушки. Это опыт настройки сетей, контейнеризации, безопасности и Nginx Proxy Manager в безопасной среде.
#homelab #selfhosted #docker #learning #petproject
❤3
🏗 Docker: Multistage Build — худеем в 10 раз
Типичная ошибка новичка: в Docker-образе лежат исходники, компиляторы (GCC, Go), кэши и сам бинарник. Образ весит 800 МБ. Архитектор использует Multistage Build.
Суть: в одном Dockerfile мы сначала собираем приложение, а потом копируем только результат в чистый, крошечный образ.
Пример (Go/C++/Rust):
Профит:
1. Размер: Было 800 МБ → Стало 20 МБ.
2. Безопасность: В проде нет компиляторов и исходного кода — хакеру сложнее развернуться.
3. Скорость: Быстрее пушится в Registry и скачивается на сервер.
Если ваши образы весят гигабайты — сегодня самое время их переписать.
#docker #devops #optimization #bestpractice #architecture
Типичная ошибка новичка: в Docker-образе лежат исходники, компиляторы (GCC, Go), кэши и сам бинарник. Образ весит 800 МБ. Архитектор использует Multistage Build.
Суть: в одном Dockerfile мы сначала собираем приложение, а потом копируем только результат в чистый, крошечный образ.
Пример (Go/C++/Rust):
# Этап 1: Сборка (Builder)
FROM golang:1.21 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp main.go
# Этап 2: Финал (Production)
# Берем Alpine (5 МБ) или Distroless
FROM alpine:latest
WORKDIR /root/
# Копируем ТОЛЬКО бинарник из первого этапа
COPY --from=builder /app/myapp .
CMD ["./myapp"]
Профит:
1. Размер: Было 800 МБ → Стало 20 МБ.
2. Безопасность: В проде нет компиляторов и исходного кода — хакеру сложнее развернуться.
3. Скорость: Быстрее пушится в Registry и скачивается на сервер.
Если ваши образы весят гигабайты — сегодня самое время их переписать.
#docker #devops #optimization #bestpractice #architecture
👍1
👀 Uptime Kuma: Мониторинг для людей
Zabbix слишком сложен для домашнего сервера или быстрого проекта? Prometheus требует Grafana? Попробуйте Uptime Kuma.
Это современный Self-Hosted инструмент мониторинга с красивым UI.
Что умеет:
✅ Пинговать хосты (HTTP/s, TCP, DNS, Ping).
✅ Проверять SSL-сертификаты (и орать, когда истекают).
✅ Красивые Status Pages (как у облачных провайдеров).
✅ Уведомления в Telegram, Discord, Slack.
Установка за 30 секунд (Docker):
Перейдите на http://localhost:3001 и наслаждайтесь.
Идеально, чтобы следить за своим сайтом, домашним роутером или VPN-сервером.
#homelab #monitoring #docker #opensource #tools
Zabbix слишком сложен для домашнего сервера или быстрого проекта? Prometheus требует Grafana? Попробуйте Uptime Kuma.
Это современный Self-Hosted инструмент мониторинга с красивым UI.
Что умеет:
✅ Пинговать хосты (HTTP/s, TCP, DNS, Ping).
✅ Проверять SSL-сертификаты (и орать, когда истекают).
✅ Красивые Status Pages (как у облачных провайдеров).
✅ Уведомления в Telegram, Discord, Slack.
Установка за 30 секунд (Docker):
docker run -d --restart=always -p 3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:1
Перейдите на http://localhost:3001 и наслаждайтесь.
Идеально, чтобы следить за своим сайтом, домашним роутером или VPN-сервером.
#homelab #monitoring #docker #opensource #tools
🔥3
🔑 Authentik: Единый вход для домашней лабы
У вас дома крутится Grafana, Portainer, Home Assistant и торренты. Везде свои логины/пароли. Это неудобно и небезопасно.
Настройте Authentik (или Keycloak, но Authentik легче).
Что это: Это ваш личный Identity Provider (IDP). Вы один раз входите в Authentik, и он пускает вас во все остальные сервисы (SSO).
Почему это круто:
Безопасность: Можно закрыть все сервисы за Authentik и прикрутить 2FA (Google Authenticator) даже туда, где его не было (например, к старому веб-интерфейсу роутера).
Удобство: Красивый дашборд со всеми вашими приложениями.
Поднимается в Docker за 5 минут. Почувствуйте себя Enterprise-архитектором у себя дома.
#security #homelab #sso #authentik #docker #selfhosted
У вас дома крутится Grafana, Portainer, Home Assistant и торренты. Везде свои логины/пароли. Это неудобно и небезопасно.
Настройте Authentik (или Keycloak, но Authentik легче).
Что это: Это ваш личный Identity Provider (IDP). Вы один раз входите в Authentik, и он пускает вас во все остальные сервисы (SSO).
Почему это круто:
Безопасность: Можно закрыть все сервисы за Authentik и прикрутить 2FA (Google Authenticator) даже туда, где его не было (например, к старому веб-интерфейсу роутера).
Удобство: Красивый дашборд со всеми вашими приложениями.
Поднимается в Docker за 5 минут. Почувствуйте себя Enterprise-архитектором у себя дома.
#security #homelab #sso #authentik #docker #selfhosted
🐻 Uptime Kuma: Твой личный Status Page
У тебя дома крутится Home Assistant, Plex, NAS и VPN. Как узнать, что VPN упал, пока ты в кафе? Zabbix для дома — это оверхед. Поставь Uptime Kuma.
Это невероятно красивый и простой инструмент для мониторинга, который выглядит как профессиональные статус-страницы (StatusPage.io).
Что умеет: ✅ Пинговать HTTP(s), TCP, Ping, DNS. ✅ Проверять срок действия SSL-сертификатов (напомнит заранее!). ✅ Слать уведомления в Telegram, Discord, Slack. ✅ Рисовать красивые графики аптайма ("сердечный ритм").
Запуск в Docker (одной командой):
Заходи на http://localhost:3001, настрой за 5 минут и чувствуй себя спокойным.
#homelab #monitoring #uptimekuma #docker #selfhosted #tools
У тебя дома крутится Home Assistant, Plex, NAS и VPN. Как узнать, что VPN упал, пока ты в кафе? Zabbix для дома — это оверхед. Поставь Uptime Kuma.
Это невероятно красивый и простой инструмент для мониторинга, который выглядит как профессиональные статус-страницы (StatusPage.io).
Что умеет: ✅ Пинговать HTTP(s), TCP, Ping, DNS. ✅ Проверять срок действия SSL-сертификатов (напомнит заранее!). ✅ Слать уведомления в Telegram, Discord, Slack. ✅ Рисовать красивые графики аптайма ("сердечный ритм").
Запуск в Docker (одной командой):
docker run -d --restart=always -p 3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:1
Заходи на http://localhost:3001, настрой за 5 минут и чувствуй себя спокойным.
#homelab #monitoring #uptimekuma #docker #selfhosted #tools
🎛 Homepage: Сделай своему серверу красиво
У тебя крутится 20 контейнеров: Portainer, Grafana, Plex, Sonarr... Ты реально помнишь все эти порты? localhost:9000, :3000, :8123? Хватит держать закладки в браузере. Собери их в единый Command Center.
Встречайте Homepage — самый современный, быстрый и красивый дашборд на данный момент.
Почему он рвет конкурентов (Heimdall/Organizr): 💎 Визуал: Выглядит как UI из фантастических фильмов. Поддержка видео-фонов и прозрачности. ⚡ Скорость: Статика. Грузится мгновенно. 🐳 Интеграция: Он сам стучится в Docker API и показывает:
* Статус контейнеров (Running/Stopped).
* Нагрузку CPU/RAM в реальном времени прямо на иконке.
* Сколько торрентов качается в Transmission.
Конфиг — чистый YAML (как мы любим):
Это тот случай, когда админка приносит эстетическое удовольствие.
#homelab #dashboard #homepage #ui #selfhosted #docker #design
У тебя крутится 20 контейнеров: Portainer, Grafana, Plex, Sonarr... Ты реально помнишь все эти порты? localhost:9000, :3000, :8123? Хватит держать закладки в браузере. Собери их в единый Command Center.
Встречайте Homepage — самый современный, быстрый и красивый дашборд на данный момент.
Почему он рвет конкурентов (Heimdall/Organizr): 💎 Визуал: Выглядит как UI из фантастических фильмов. Поддержка видео-фонов и прозрачности. ⚡ Скорость: Статика. Грузится мгновенно. 🐳 Интеграция: Он сам стучится в Docker API и показывает:
* Статус контейнеров (Running/Stopped).
* Нагрузку CPU/RAM в реальном времени прямо на иконке.
* Сколько торрентов качается в Transmission.
Конфиг — чистый YAML (как мы любим):
- Docker:
- Portainer:
icon: portainer.png
href: http://localhost:9000
widget:
type: portainer
url: http://portainer:9000
key: <api-key>
Это тот случай, когда админка приносит эстетическое удовольствие.
#homelab #dashboard #homepage #ui #selfhosted #docker #design
👍2💯1
🚀 DevOps: Очистка старых Docker-образов по расписанию 🧹
Если твой сервер внезапно перестал отвечать, проверь место на диске. Часто причиной становятся гигабайты «висячих» (dangling) слоев и старых образов Docker, которые копятся после каждого деплоя. В 2026-м ручная чистка — это моветон.
Техническое решение:
Команда для тотальной, но безопасной чистки:
Фильтр until=168h удалит только те образы, которые старше недели, оставив свежие билды для быстрого отката (rollback).
#docker #devops #optimization #linux #cleanup #sysadmin #automation #admin_future
Если твой сервер внезапно перестал отвечать, проверь место на диске. Часто причиной становятся гигабайты «висячих» (dangling) слоев и старых образов Docker, которые копятся после каждого деплоя. В 2026-м ручная чистка — это моветон.
Техническое решение:
Используем встроенную систему очистки Docker с фильтрами, чтобы не снести лишнее.
Команда для тотальной, но безопасной чистки:
# Удалить все неиспользуемые контейнеры, сети и образы (dangling)
docker system prune -f
# Удалить вообще все образы, которые не используются ни одним запущенным контейнером
docker image prune -a --force --filter "until=168h"
Фильтр until=168h удалит только те образы, которые старше недели, оставив свежие билды для быстрого отката (rollback).
#docker #devops #optimization #linux #cleanup #sysadmin #automation #admin_future
🎓 Собеседование сисадмина. Выпуск #2: Контейнеры и сетевой хардкор
Привет, коллеги! Продолжаем серию постов для тех, кто хочет уверенно чувствовать себя на техническом интервью. Сегодня разберем три каверзных вопроса, которые обожают задавать на позиции Middle/Senior System Engineer.
❓ Вопрос 1: «В чем разница между CMD и ENTRYPOINT в Dockerfile?»
❌ Ответ новичка: «И то, и другое запускает команду при старте контейнера».
✅ Ответ инженера: * ENTRYPOINT — это основная команда, которая превращает контейнер в исполняемый файл. Её сложно переопределить при запуске (`docker run`).
❓ Вопрос 2: «Что такое Docker-слои и почему размер образа имеет значение?»
❌ Ответ новичка: «Слои — это шаги в Dockerfile. Чем меньше образ, тем быстрее он качается».
✅ Ответ инженера:
❓ Вопрос 3: «Клиент жалуется: "Сайт не открывается". Вы пингуете сервер — пинг идет. В чем может быть проблема?»
❌ Ответ новичка: «Наверное, упал веб-сервер, надо перезагрузить».
✅ Ответ инженера: Пинг (ICMP) подтверждает только то, что сетевой уровень (L3) и узел живы.
💡 Золотое правило собеса:Когда вас спрашивают про траблшутинг, всегда идите по модели OSI снизу вверх. От физики и линков до прикладного уровня. Это демонстрирует системный подход, а не хаотичное "тыканье" в конфиги.
Сохраняйте, запоминайте и не давайте застать себя врасплох!
#собеседование_AF #docker #devops #networking #osi #sysadmin #admin_future
Привет, коллеги! Продолжаем серию постов для тех, кто хочет уверенно чувствовать себя на техническом интервью. Сегодня разберем три каверзных вопроса, которые обожают задавать на позиции Middle/Senior System Engineer.
❓ Вопрос 1: «В чем разница между CMD и ENTRYPOINT в Dockerfile?»
❌ Ответ новичка: «И то, и другое запускает команду при старте контейнера».
✅ Ответ инженера: * ENTRYPOINT — это основная команда, которая превращает контейнер в исполняемый файл. Её сложно переопределить при запуске (`docker run`).
* CMD — это аргументы по умолчанию для ENTRYPOINT. Если вы укажете свои аргументы в конце `docker run`, они полностью заменят то, что написано в CMD.
* Pro-tip: На собеседовании скажите, что лучшая практика — использовать их вместе. Например: `ENTRYPOINT ["/usr/bin/nginx"]` и `CMD ["-g", "daemon off;"]`. Это позволяет гибко менять параметры запуска, не ломая логику образа.
❓ Вопрос 2: «Что такое Docker-слои и почему размер образа имеет значение?»
❌ Ответ новичка: «Слои — это шаги в Dockerfile. Чем меньше образ, тем быстрее он качается».
✅ Ответ инженера:
1. Каждая инструкция (`RUN`, `COPY`, `ADD`) создает новый слой, который кешируется и занимает место.
2. Copy-on-Write: Если файл меняется в верхнем слое, он копируется из нижнего, что раздувает образ.
3. Безопасность и скорость: Маленький образ (на базе Alpine или Distroless) уменьшает "поверхность атаки" (меньше лишних утилит — меньше дыр) и ускоряет деплой в CI/CD.
Совет: Упомяните Multi-stage builds. Это сразу покажет, что вы умеете собирать оптимизированные образы, оставляя весь "мусор" (компиляторы, исходники) во временных контейнерах.
❓ Вопрос 3: «Клиент жалуется: "Сайт не открывается". Вы пингуете сервер — пинг идет. В чем может быть проблема?»
❌ Ответ новичка: «Наверное, упал веб-сервер, надо перезагрузить».
✅ Ответ инженера: Пинг (ICMP) подтверждает только то, что сетевой уровень (L3) и узел живы.
1. Порты (L4): Проверяем, слушает ли веб-сервер нужный порт (80/443) через `telnet` или `nc -zv`.
2. MTU: Если маленькие пакеты (пинг) проходят, а большие (HTTP-трафик) — нет, проблема в MTU/MSS на пути следования. Пакеты просто дропаются без фрагментации.
3. Firewall: Возможно, ICMP разрешен, а TCP/443 закрыт на внешнем или внутреннем (iptables/nftables) фаерволе.
4. SSL/TLS: Проверяем, не истек ли сертификат. Браузер может блокировать соединение, хотя сервер работает.
💡 Золотое правило собеса:
Сохраняйте, запоминайте и не давайте застать себя врасплох!
#собеседование_AF #docker #devops #networking #osi #sysadmin #admin_future
👍3
🚀 DevOps: Podman 5.0 — запускаем контейнеры без Root и лишних демонов 🛡️
Если ты всё еще используешь Docker-демона, который крутится под рутом, у нас для тебя новости из 2026 года. Podman окончательно стал взрослым. Главная фишка пятой версии — полностью переписанный сетевой стек (pasta), который сделал Rootless-контейнеры (запуск от обычного юзера) такими же быстрыми, как и обычные.
Команды для старта:
Зачем это нужно: Это стандарт безопасности. В 2026 году запуск Docker под root в продакшене без веской причины считается дурным тоном.
#devops #containers #podman #docker #security #sysadmin #admin_future
Если ты всё еще используешь Docker-демона, который крутится под рутом, у нас для тебя новости из 2026 года. Podman окончательно стал взрослым. Главная фишка пятой версии — полностью переписанный сетевой стек (pasta), который сделал Rootless-контейнеры (запуск от обычного юзера) такими же быстрыми, как и обычные.
Техническая суть:
Podman не требует запущенного демона (daemonless) и позволяет запускать контейнеры в изолированных User Namespaces. Если хакер «сломает» контейнер, он окажется внутри системы с правами обычного бесправного пользователя.
Команды для старта:
# Запуск контейнера от обычного пользователя (без sudo!)
podman run -d --name my-app -p 8080:80 nginx
# Генерируем systemd-юнит, чтобы контейнер сам стартовал после ребута
podman generate systemd --name my-app --files --new
Зачем это нужно: Это стандарт безопасности. В 2026 году запуск Docker под root в продакшене без веской причины считается дурным тоном.
#devops #containers #podman #docker #security #sysadmin #admin_future
📦 Linux: Наводим порядок в Docker — удаляем «висячие» ресурсы
Коллеги, признавайтесь: как часто вы заходите на сервер и обнаруживаете, что Docker сожрал всё место образами годичной давности и остановленными контейнерами, которые «может еще пригодятся»? В 2026-м контейнеризация повсюду, и мусор в /var/lib/docker — это главная причина алертов по дискам.
Магическая команда для терминала:
Вывод: Чистый Docker — залог быстрого деплоя. Не превращайте свой сервер в кладбище контейнеров.
#linux #docker #devops #cleanup #sysadmin #admin_future
Коллеги, признавайтесь: как часто вы заходите на сервер и обнаруживаете, что Docker сожрал всё место образами годичной давности и остановленными контейнерами, которые «может еще пригодятся»? В 2026-м контейнеризация повсюду, и мусор в /var/lib/docker — это главная причина алертов по дискам.
Не нужно удалять всё по отдельности. Есть одна команда-швейцарский нож, которая вычистит всё лишнее, не сломав работающий прод.
Магическая команда для терминала:
# Удаляем неиспользуемые контейнеры, сети и "висячие" (dangling) образы
docker system prune -f
# А если нужно вычистить ВООБЩЕ всё неиспользуемое (включая старые тома)
docker system prune -a --volumes -f
Чтобы не плодить сущности. Каждый docker build оставляет после себя слои, а каждый docker stop — мертвое тело контейнера. Регулярный запуск этой команды (лучше в cron раз в неделю) экономит десятки гигабайт и избавляет от путаницы при просмотре списка образов.
Вывод: Чистый Docker — залог быстрого деплоя. Не превращайте свой сервер в кладбище контейнеров.
#linux #docker #devops #cleanup #sysadmin #admin_future
🐧 Linux: живёшь под root в контейнере — живёшь опасно. Исправляем за 10 минут
Коллеги, воскресный пост про вещь, которую игнорируют даже опытные администраторы. Зайди в любой Docker-окружение на среднестатистическом сервере и запусти:
Готов поспорить — большинство контейнеров покажут пустой User. Это означает root внутри. 79% Linux-атак в 2026 году используют легитимные системные инструменты — bash, cron, curl. Контейнер с root-процессом при любом побеге из namespace превращается в полноценный вектор атаки на хост.
Исправляется в три шага:
Зачем это нужно:
Контейнер не является изолированной средой по умолчанию. Безопасность зависит от корректной настройки. Запуск под root — это не дефолт ради удобства, это дефолт ради лени. После вчерашней CVE-2026-31431 «Copy Fail» — любой непривилегированный пользователь на хосте мог стать root. Если контейнер уже запускается как root — второй шаг атаки не нужен.
Итог: один Dockerfile и десять минут — и твои контейнеры перестают быть тривиальным вектором атаки. Запусти аудит сегодня.
#linux #docker #containers #security #hardening #sysadmin #admin_future
Коллеги, воскресный пост про вещь, которую игнорируют даже опытные администраторы. Зайди в любой Docker-окружение на среднестатистическом сервере и запусти:
docker inspect $(docker ps -q) --format '{{.Name}}: User={{.Config.User}}'
Готов поспорить — большинство контейнеров покажут пустой User. Это означает root внутри. 79% Linux-атак в 2026 году используют легитимные системные инструменты — bash, cron, curl. Контейнер с root-процессом при любом побеге из namespace превращается в полноценный вектор атаки на хост.
Исправляется в три шага:
# В Dockerfile: создаём непривилегированного пользователя
FROM ubuntu:24.04
RUN groupadd -r appgroup && \
useradd -r -g appgroup -s /sbin/nologin appuser
# Устанавливаем зависимости под root — пока ещё нужно
RUN apt-get update && apt-get install -y nginx && \
chown -R appuser:appgroup /var/log/nginx /var/cache/nginx
# Переключаемся на непривилегированного
USER appuser
CMD ["nginx", "-g", "daemon off;"]
# Для уже запущенных контейнеров — аудит прямо сейчас:
# Кто реально запускает процессы внутри:
docker exec <container> ps aux | head -5
# В docker-compose.yml — добавляем user для каждого сервиса:
# services:
# app:
# image: myapp:latest
# user: "1001:1001" # uid:gid непривилегированного пользователя
# Запрещаем privilege escalation на уровне демона Docker:
# В /etc/docker/daemon.json:
# {
# "userns-remap": "default",
# "no-new-privileges": true
# }
# Проверяем что флаг no-new-privileges работает:
docker run --security-opt no-new-privileges:true \
--user 1001 alpine whoami
Зачем это нужно:
Контейнер не является изолированной средой по умолчанию. Безопасность зависит от корректной настройки. Запуск под root — это не дефолт ради удобства, это дефолт ради лени. После вчерашней CVE-2026-31431 «Copy Fail» — любой непривилегированный пользователь на хосте мог стать root. Если контейнер уже запускается как root — второй шаг атаки не нужен.
Итог: один Dockerfile и десять минут — и твои контейнеры перестают быть тривиальным вектором атаки. Запусти аудит сегодня.
#linux #docker #containers #security #hardening #sysadmin #admin_future