Защита от "самого себя": Как обезопасить критичные конфиги в Linux
Проблема: Один rm -rf по ошибке. Одна неудачная правка nginx.conf в 3 часа ночи. И prod лежит. "Админ" надеется на бэкапы (восстановление). "Архитектор" предотвращает саму возможность ошибки.
Вот 3 уровня эшелонированной обороны для ваших самых важных файлов (конфигов, скриптов, сертификатов).
Уровень 1: "Бетонный бункер" (chattr)
Это — ваш immutable (неизменяемый) флаг. Самая сильная защита, даже от root.
⏺ Как включить: sudo chattr +i /etc/nginx/nginx.conf
Теперь этот файл нельзя удалить, изменить, переименовать или даже создать на него ссылку. Совсем.
⏺ Как выключить (для плановых правок): sudo chattr -i /etc/nginx/nginx.conf
#АрхитекторскийЛайфхак: Сделали правки -> немедленно включили защиту обратно! Это лучшая защита от случайного rm или sed -i.
Уровень 2: "Гибкий контроль" (ACL)
Стандартных rwx (владелец/группа/остальные) часто не хватает. ACL (Access Control Lists) дают гранулярный доступ.
Задача: Дать юзеру deploy право только читать конфиг, но не менять.
⏺ Назначаем права: sudo setfacl -m u:deploy:r /etc/nginx/nginx.conf
⏺ Проверяем права: getfacl /etc/nginx/nginx.conf
Это намного чище, чем добавлять deploy в группу root (чего делать нельзя никогда).
Уровень 3: "Умный Sudo" (sudoers)
Никогда не давайте сервисным юзерам и коллегам ALL=(ALL) ALL. Это "ключи от королевства". Давайте только то, что нужно.
Задача: Дать deploy право только перезапускать Nginx, но не редактировать или удалять его файлы.
⏺ Редактируем visudo: deploy ALL=(root) NOPASSWD: /bin/systemctl restart nginx
Теперь deploy может выполнить sudo systemctl restart nginx, но sudo rm /etc/nginx/nginx.conf ему "откажет в доступе".
Итог: sudoers защищает от эскалации привилегий. ACL защищает от случайных правок другими пользователями. chattr защищает от root-ошибок (включая вас самих в 3 часа ночи).
#linux #security #sysadmin #chattr #acl #sudo #bestpractice
Проблема: Один rm -rf по ошибке. Одна неудачная правка nginx.conf в 3 часа ночи. И prod лежит. "Админ" надеется на бэкапы (восстановление). "Архитектор" предотвращает саму возможность ошибки.
Вот 3 уровня эшелонированной обороны для ваших самых важных файлов (конфигов, скриптов, сертификатов).
Уровень 1: "Бетонный бункер" (chattr)
Это — ваш immutable (неизменяемый) флаг. Самая сильная защита, даже от root.
⏺ Как включить: sudo chattr +i /etc/nginx/nginx.conf
Теперь этот файл нельзя удалить, изменить, переименовать или даже создать на него ссылку. Совсем.
⏺ Как выключить (для плановых правок): sudo chattr -i /etc/nginx/nginx.conf
#АрхитекторскийЛайфхак: Сделали правки -> немедленно включили защиту обратно! Это лучшая защита от случайного rm или sed -i.
Уровень 2: "Гибкий контроль" (ACL)
Стандартных rwx (владелец/группа/остальные) часто не хватает. ACL (Access Control Lists) дают гранулярный доступ.
Задача: Дать юзеру deploy право только читать конфиг, но не менять.
⏺ Назначаем права: sudo setfacl -m u:deploy:r /etc/nginx/nginx.conf
⏺ Проверяем права: getfacl /etc/nginx/nginx.conf
Это намного чище, чем добавлять deploy в группу root (чего делать нельзя никогда).
Уровень 3: "Умный Sudo" (sudoers)
Никогда не давайте сервисным юзерам и коллегам ALL=(ALL) ALL. Это "ключи от королевства". Давайте только то, что нужно.
Задача: Дать deploy право только перезапускать Nginx, но не редактировать или удалять его файлы.
⏺ Редактируем visudo: deploy ALL=(root) NOPASSWD: /bin/systemctl restart nginx
Теперь deploy может выполнить sudo systemctl restart nginx, но sudo rm /etc/nginx/nginx.conf ему "откажет в доступе".
Итог: sudoers защищает от эскалации привилегий. ACL защищает от случайных правок другими пользователями. chattr защищает от root-ошибок (включая вас самих в 3 часа ночи).
#linux #security #sysadmin #chattr #acl #sudo #bestpractice
🔥4
♻️ AD: Кнопка "Отменить удаление". Почему у вас выключена AD Recycle Bin?
Сценарий: Утро субботы. HelpDesk "случайно" удалил целое OU с бухгалтерией. Вариант А (Плохой): Перезагружать DC в режим DSRM, восстанавливать ntds.dit из бэкапа, делать Authoritative Restore. Простой — часы. Вариант Б (Архитектурный): Восстановить объекты за 3 секунды через Active Directory Recycle Bin.
Эта фича появилась в Server 2008 R2, но она отключена по умолчанию.
Как проверить и включить (PowerShell):
Проверка статуса:
Если EnabledScopes пустое — корзина выключена!
Включение (Внимание! Это необратимо!):
Восстановление удаленного объекта (Пример):
Взгляд архитектора: Включение корзины — это нулевой шаг при настройке любого домена. Это превращает катастрофу (потерю данных) в мелкий инцидент. Если у вас она выключена — сделайте это прямо сейчас.
#windows #activedirectory #recovery #powershell #bestpractice #гайд
Сценарий: Утро субботы. HelpDesk "случайно" удалил целое OU с бухгалтерией. Вариант А (Плохой): Перезагружать DC в режим DSRM, восстанавливать ntds.dit из бэкапа, делать Authoritative Restore. Простой — часы. Вариант Б (Архитектурный): Восстановить объекты за 3 секунды через Active Directory Recycle Bin.
Эта фича появилась в Server 2008 R2, но она отключена по умолчанию.
Как проверить и включить (PowerShell):
Проверка статуса:
Get-ADOptionalFeature -Filter 'Name -like "Recycle Bin Feature"'
Если EnabledScopes пустое — корзина выключена!
Включение (Внимание! Это необратимо!):
Enable-ADOptionalFeature 'Recycle Bin Feature' -Scope ForestOrConfigurationSet -Target 'corp.local'
Восстановление удаленного объекта (Пример):
Get-ADObject -Filter 'Name -like "Ivanov"' -IncludeDeletedObjects | Restore-ADObject
Взгляд архитектора: Включение корзины — это нулевой шаг при настройке любого домена. Это превращает катастрофу (потерю данных) в мелкий инцидент. Если у вас она выключена — сделайте это прямо сейчас.
#windows #activedirectory #recovery #powershell #bestpractice #гайд
🔥2
🏗 Архитектура: Как НЕ нужно называть домен Active Directory
Вы поднимаете новый контроллер домена. Рука тянется написать company.local? Остановитесь. Имя домена AD выбирается один раз, а последствия вы будете разгребать годами. Миграция/переименование домена — это ад, которого лучше избежать на старте.
Вот 3 главные ошибки и одно правильное решение.
❌ Ошибка 1: Зона .local (company.local) Классика 2000-х, которая в 2025 году стала проблемой.
Почему плохо: Конфликтует с протоколом mDNS (Bonjour), который используют macOS, Linux и IoT-устройства для поиска соседей.
Последствия: Глюки при подключении маков, принтеров и Linux-серверов. Плюс — вы никогда не купите доверенный SSL-сертификат для .local.
❌ Ошибка 2: Совпадение с публичным сайтом (company.ru) Называете AD так же, как ваш внешний сайт.
Почему плохо: Привет, Split-Brain DNS. Контроллеры домена считают, что company.ru — это они.
Последствия: Юзеры внутри офиса вводят company.ru, чтобы попасть на сайт фирмы, а попадают на страницу входа IIS контроллера домена (или получают ошибку). Приходится костылить www и мучаться с записями.
❌ Ошибка 3: Однословные имена (CORP) Single Label Domains (SLD).
Почему плохо: Устарело. Многие современные приложения (включая продукты Microsoft) просто откажутся работать с таким доменом корректно.
✅ Как сделать правильно (Best Practice)
Используйте субдомен от вашего реального публичного домена.
Пример: если ваш сайт future-admin.ru, назовите AD: 👉 corp.future-admin.ru 👉 ad.future-admin.ru 👉 int.future-admin.ru
В чем профит:
SSL: Вы можете купить Wildcard-сертификат *.corp.future-admin.ru и он будет валиден везде.
DNS: Никаких конфликтов с внешним сайтом.
Azure/Entra ID: Идеальная синхронизация с облаком без лишних суффиксов.
Собственность: Вы гарантированно владеете этим пространством имен в интернете.
💡 Совет архитектора: Даже если у вас маленькая фирма «Рога и Копыта», стройте AD так, будто завтра вы будете интегрироваться с Azure или поглощать конкурентов.
#activedirectory #windows #architecture #bestpractice #dns #security
Вы поднимаете новый контроллер домена. Рука тянется написать company.local? Остановитесь. Имя домена AD выбирается один раз, а последствия вы будете разгребать годами. Миграция/переименование домена — это ад, которого лучше избежать на старте.
Вот 3 главные ошибки и одно правильное решение.
❌ Ошибка 1: Зона .local (company.local) Классика 2000-х, которая в 2025 году стала проблемой.
Почему плохо: Конфликтует с протоколом mDNS (Bonjour), который используют macOS, Linux и IoT-устройства для поиска соседей.
Последствия: Глюки при подключении маков, принтеров и Linux-серверов. Плюс — вы никогда не купите доверенный SSL-сертификат для .local.
❌ Ошибка 2: Совпадение с публичным сайтом (company.ru) Называете AD так же, как ваш внешний сайт.
Почему плохо: Привет, Split-Brain DNS. Контроллеры домена считают, что company.ru — это они.
Последствия: Юзеры внутри офиса вводят company.ru, чтобы попасть на сайт фирмы, а попадают на страницу входа IIS контроллера домена (или получают ошибку). Приходится костылить www и мучаться с записями.
❌ Ошибка 3: Однословные имена (CORP) Single Label Domains (SLD).
Почему плохо: Устарело. Многие современные приложения (включая продукты Microsoft) просто откажутся работать с таким доменом корректно.
✅ Как сделать правильно (Best Practice)
Используйте субдомен от вашего реального публичного домена.
Пример: если ваш сайт future-admin.ru, назовите AD: 👉 corp.future-admin.ru 👉 ad.future-admin.ru 👉 int.future-admin.ru
В чем профит:
SSL: Вы можете купить Wildcard-сертификат *.corp.future-admin.ru и он будет валиден везде.
DNS: Никаких конфликтов с внешним сайтом.
Azure/Entra ID: Идеальная синхронизация с облаком без лишних суффиксов.
Собственность: Вы гарантированно владеете этим пространством имен в интернете.
💡 Совет архитектора: Даже если у вас маленькая фирма «Рога и Копыта», стройте AD так, будто завтра вы будете интегрироваться с Azure или поглощать конкурентов.
#activedirectory #windows #architecture #bestpractice #dns #security
👍1
⛔ Read-Only Friday: Манифест спокойных выходных
Коллеги, напоминаем золотое правило: В пятницу мы ничего не трогаем. Сервер работает? Не дыши на него. Клиент просит «быстренько обновить сертификат»? Переносим на понедельник.
Почему? Потому что закон Мерфи работает без выходных: если что-то может упасть после патча, оно упадет в 18:00 пятницы, когда вы уже открываете пиво.
Чем заняться админу в пятницу (Safe List):
1. 🧹 Документация. Опишите ту схему сети, которую держите в голове полгода.
2. 👀 Мониторинг. Посмотрите на красивые графики в Grafana. Не настраивайте, просто смотрите.
3. 🗑 Чистка. Удалите старые логи или снапшоты (аккуратно!).
4. 🎓 Обучение. Почитайте про Docker или новый Windows Server.
Соблюдаешь Read-Only Friday — спишь спокойно в субботу. Согласны? Ставь 🔥.
#readonlyfriday #adminlife #humor #bestpractice #stressmanagement
Коллеги, напоминаем золотое правило: В пятницу мы ничего не трогаем. Сервер работает? Не дыши на него. Клиент просит «быстренько обновить сертификат»? Переносим на понедельник.
Почему? Потому что закон Мерфи работает без выходных: если что-то может упасть после патча, оно упадет в 18:00 пятницы, когда вы уже открываете пиво.
Чем заняться админу в пятницу (Safe List):
1. 🧹 Документация. Опишите ту схему сети, которую держите в голове полгода.
2. 👀 Мониторинг. Посмотрите на красивые графики в Grafana. Не настраивайте, просто смотрите.
3. 🗑 Чистка. Удалите старые логи или снапшоты (аккуратно!).
4. 🎓 Обучение. Почитайте про Docker или новый Windows Server.
Соблюдаешь Read-Only Friday — спишь спокойно в субботу. Согласны? Ставь 🔥.
#readonlyfriday #adminlife #humor #bestpractice #stressmanagement
🔥10
❄️ 1 Декабря: Начало конца (года)
Коллеги, на календаре 1 декабря. В мире IT это означает одно: Code Freeze близко.
Если вы планировали: — Мигрировать почтовик; — Обновлять ядро корп-файервола; — Переезжать на новый Kubernetes-кластер;
...то у вас есть максимум 2 недели. После 15-20 декабря наступает негласный (или гласный) режим Read-Only.
Правила выживания в декабре:
1. Завершаем, а не начинаем. Доделываем хвосты, закрываем тикеты. Новые глобальные проекты — в бэклог на январь.
2. Закупка железа/лицензий. Бюджеты закрываются. Если вам нужен новый сервер — счет должен быть оплачен вчера.
3. График дежурств. Утвердите, кто будет "трезвым водителем" инфраструктуры в новогоднюю ночь, уже сейчас.
Не станьте тем админом, который деплоит продакшен 30 декабря. Чудес не бывает, бывают только факапы.
#adminlife #planning #codefreeze #management #bestpractice
Коллеги, на календаре 1 декабря. В мире IT это означает одно: Code Freeze близко.
Если вы планировали: — Мигрировать почтовик; — Обновлять ядро корп-файервола; — Переезжать на новый Kubernetes-кластер;
...то у вас есть максимум 2 недели. После 15-20 декабря наступает негласный (или гласный) режим Read-Only.
Правила выживания в декабре:
1. Завершаем, а не начинаем. Доделываем хвосты, закрываем тикеты. Новые глобальные проекты — в бэклог на январь.
2. Закупка железа/лицензий. Бюджеты закрываются. Если вам нужен новый сервер — счет должен быть оплачен вчера.
3. График дежурств. Утвердите, кто будет "трезвым водителем" инфраструктуры в новогоднюю ночь, уже сейчас.
Не станьте тем админом, который деплоит продакшен 30 декабря. Чудес не бывает, бывают только факапы.
#adminlife #planning #codefreeze #management #bestpractice
🔥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
🔐 Windows LAPS: Хватит ставить один пароль на всех
Если у вас на 100 компьютерах одинаковый пароль локального администратора — поздравляю, один взломанный ноутбук компрометирует всю сеть. Это называется Lateral Movement (горизонтальное перемещение).
Решение — Windows LAPS (Local Administrator Password Solution). В 2025 году это уже не отдельный MSI-пакет, а встроенная функция Windows 10/11 и Server 2022/2025.
Как это работает:
Компьютер сам генерирует сложный пароль для локального админа.
Отправляет его в Active Directory (в защищенный атрибут) или в Azure AD.
Меняет его по расписанию (например, каждые 30 дней) или после использования.
Как включить (Modern Way): Вам не нужно качать софт. Просто настройте GPO или Intune: Computer Configuration > Administrative Templates > System > LAPS
Полезный командлет (PowerShell): Чтобы узнать текущий пароль конкретного компа (если у вас есть права):
Итог: Админу удобно (пароли в AD), хакеру больно (пароль от одного ПК не подходит к другому).
#windows #security #laps #activedirectory #bestpractice
Если у вас на 100 компьютерах одинаковый пароль локального администратора — поздравляю, один взломанный ноутбук компрометирует всю сеть. Это называется Lateral Movement (горизонтальное перемещение).
Решение — Windows LAPS (Local Administrator Password Solution). В 2025 году это уже не отдельный MSI-пакет, а встроенная функция Windows 10/11 и Server 2022/2025.
Как это работает:
Компьютер сам генерирует сложный пароль для локального админа.
Отправляет его в Active Directory (в защищенный атрибут) или в Azure AD.
Меняет его по расписанию (например, каждые 30 дней) или после использования.
Как включить (Modern Way): Вам не нужно качать софт. Просто настройте GPO или Intune: Computer Configuration > Administrative Templates > System > LAPS
Полезный командлет (PowerShell): Чтобы узнать текущий пароль конкретного компа (если у вас есть права):
Get-LapsADPassword -Identity "PC-ACCOUNTING-01" -AsPlainText
Итог: Админу удобно (пароли в AD), хакеру больно (пароль от одного ПК не подходит к другому).
#windows #security #laps #activedirectory #bestpractice
🔥1
🔄 Идемпотентность: Главное слово в словаре архитектора
Если вы пишете скрипты или Ansible-плейбуки, вы обязаны понимать концепцию Идемпотентности. Без этого автоматизация превращается в хаос.
Определение: Операция считается идемпотентной, если её многократное повторение приводит к тому же результату, что и однократное выполнение, не вызывая ошибок и дублирования данных.
Пример на Bash:
❌ Не идемпотентно:
✅ Идемпотентно:
Почему это важно: В современном мире (Ansible, Terraform, Kubernetes) агент запускается каждые 15-30 минут. Если ваш скрипт не идемпотентен, он каждый раз будет ломать конфиги, дублировать строки или перезапускать сервисы без причины.
Правило: Пишите любой скрипт так, будто он будет запускаться каждую минуту.
#devops #architecture #coding #bestpractice #theory #automation
Если вы пишете скрипты или Ansible-плейбуки, вы обязаны понимать концепцию Идемпотентности. Без этого автоматизация превращается в хаос.
Определение: Операция считается идемпотентной, если её многократное повторение приводит к тому же результату, что и однократное выполнение, не вызывая ошибок и дублирования данных.
Пример на Bash:
❌ Не идемпотентно:
# Если запустить 2 раза, в файле будет две записи
echo "127.0.0.1 myapp.local" >> /etc/hosts
✅ Идемпотентно:
# Проверяем, есть ли запись, и добавляем только если нет
grep -q "myapp.local" /etc/hosts || echo "127.0.0.1 myapp.local" >> /etc/hosts
Почему это важно: В современном мире (Ansible, Terraform, Kubernetes) агент запускается каждые 15-30 минут. Если ваш скрипт не идемпотентен, он каждый раз будет ломать конфиги, дублировать строки или перезапускать сервисы без причины.
Правило: Пишите любой скрипт так, будто он будет запускаться каждую минуту.
#devops #architecture #coding #bestpractice #theory #automation
🤔 Network: В чем разница между 127.0.0.1 и 0.0.0.0?
Классический вопрос на собеседовании и частая ошибка в конфигах Nginx/Docker. Оба адреса относятся к "этому компьютеру", но работают они принципиально по-разному.
1. 127.0.0.1 (Localhost)
Суть: Loopback-интерфейс.
Как работает: Трафик никогда не покидает хост. Он даже не доходит до сетевой карты.
Кейс: Вы запускаете базу данных и хотите, чтобы к ней мог подключиться только ваш локальный бэкенд.
Конфиг: bind-address = 127.0.0.1
2. 0.0.0.0 (Wildcard)
Суть: "Все доступные интерфейсы".
Как работает: Сервис начинает слушать на всех IP-адресах, которые есть у сервера (и на локальном 127.0.0.1, и на внешнем Ethernet/Wi-Fi).
Кейс: Вы запускаете веб-сервер, который должен быть доступен из интернета.
Конфиг: listen 0.0.0.0:80
☠️ Где ошибаются: Если вы в Docker или базе данных напишете 0.0.0.0 вместо 127.0.0.1, вы можете случайно открыть порт для всего интернета (если фаервол не настроен). Правило архитектора: Всегда биндите сервисы на 127.0.0.1, если нет явной причины пускать мир внутрь.
#network #security #theory #bestpractice #interview
Классический вопрос на собеседовании и частая ошибка в конфигах Nginx/Docker. Оба адреса относятся к "этому компьютеру", но работают они принципиально по-разному.
1. 127.0.0.1 (Localhost)
Суть: Loopback-интерфейс.
Как работает: Трафик никогда не покидает хост. Он даже не доходит до сетевой карты.
Кейс: Вы запускаете базу данных и хотите, чтобы к ней мог подключиться только ваш локальный бэкенд.
Конфиг: bind-address = 127.0.0.1
2. 0.0.0.0 (Wildcard)
Суть: "Все доступные интерфейсы".
Как работает: Сервис начинает слушать на всех IP-адресах, которые есть у сервера (и на локальном 127.0.0.1, и на внешнем Ethernet/Wi-Fi).
Кейс: Вы запускаете веб-сервер, который должен быть доступен из интернета.
Конфиг: listen 0.0.0.0:80
☠️ Где ошибаются: Если вы в Docker или базе данных напишете 0.0.0.0 вместо 127.0.0.1, вы можете случайно открыть порт для всего интернета (если фаервол не настроен). Правило архитектора: Всегда биндите сервисы на 127.0.0.1, если нет явной причины пускать мир внутрь.
#network #security #theory #bestpractice #interview
🛡 Правило 3-2-1 устарело. Встречайте 3-2-1-1-0
Нас всех учили правилу бэкапов 3-2-1:
* 3 копии данных.
* 2 разных носителя.
* 1 копия офлайн (вне офиса).
В 2025 году, в эру программ-вымогателей (Ransomware), этого мало. Шифровальщики научились находить сетевые бэкапы и шифровать их тоже.
Новый стандарт — 3-2-1-1-0:
* 3 копии данных.
* 2 разных типа носителей.
* 1 копия вне офиса (Cloud/Remote).
* 1 копия Immutable (Неизменяемая) или Air-Gapped (Физически отключенная).
Immutable: Это флаг в S3 (AWS/MinIO) или Veeam Hardened Repository. Даже если хакер получит root-права, он не сможет удалить или зашифровать этот бэкап в течение заданного времени (например, 30 дней).
* 0 ошибок при проверке восстановления (SureBackup). Бэкап, который вы не тестово не развернули — это не бэкап, а надежда.
Проверьте свои репозитории. Если у вас нет Immutable-копии — вы беззащитны перед шифровальщиком.
#backup #security #ransomware #veeam #architecture #bestpractice
Нас всех учили правилу бэкапов 3-2-1:
* 3 копии данных.
* 2 разных носителя.
* 1 копия офлайн (вне офиса).
В 2025 году, в эру программ-вымогателей (Ransomware), этого мало. Шифровальщики научились находить сетевые бэкапы и шифровать их тоже.
Новый стандарт — 3-2-1-1-0:
* 3 копии данных.
* 2 разных типа носителей.
* 1 копия вне офиса (Cloud/Remote).
* 1 копия Immutable (Неизменяемая) или Air-Gapped (Физически отключенная).
Immutable: Это флаг в S3 (AWS/MinIO) или Veeam Hardened Repository. Даже если хакер получит root-права, он не сможет удалить или зашифровать этот бэкап в течение заданного времени (например, 30 дней).
* 0 ошибок при проверке восстановления (SureBackup). Бэкап, который вы не тестово не развернули — это не бэкап, а надежда.
Проверьте свои репозитории. Если у вас нет Immutable-копии — вы беззащитны перед шифровальщиком.
#backup #security #ransomware #veeam #architecture #bestpractice
🔥2
👮♂️ Linux: Настраиваем sudo как Архитектор
Давать пользователю ALL=(ALL) ALL — это лень, граничащая с преступлением. Если разработчику нужно только перезапускать Nginx, дайте ему право только на это.
Редактируем файл (ТОЛЬКО через visudo!):
1. Создаем алиас команды (чтобы не писать пути):
2. Даем права конкретной группе:
Что мы сделали:
* %web_team — группа пользователей.
* (root) — от чьего имени запускаем.
* NOPASSWD — не спрашивать пароль (удобно для скриптов).
* RESTART_NGINX — разрешили только эти команды.
Теперь, если дев попытается сделать sudo rm -rf /, система вежливо его пошлет.
#linux #security #sudo #accesscontrol #bestpractice
Давать пользователю ALL=(ALL) ALL — это лень, граничащая с преступлением. Если разработчику нужно только перезапускать Nginx, дайте ему право только на это.
Редактируем файл (ТОЛЬКО через visudo!):
1. Создаем алиас команды (чтобы не писать пути):
Cmnd_Alias RESTART_NGINX = /usr/bin/systemctl restart nginx, /usr/bin/systemctl reload nginx
2. Даем права конкретной группе:
%web_team ALL=(root) NOPASSWD: RESTART_NGINX
Что мы сделали:
* %web_team — группа пользователей.
* (root) — от чьего имени запускаем.
* NOPASSWD — не спрашивать пароль (удобно для скриптов).
* RESTART_NGINX — разрешили только эти команды.
Теперь, если дев попытается сделать sudo rm -rf /, система вежливо его пошлет.
#linux #security #sudo #accesscontrol #bestpractice
👍2
📦 Windows Sandbox: Изолятор для подозрительного софта
Ситуация: Нужно запустить странный .exe или скрипт, который прислал юзер. ❌ Плохо: Запускать на своей машине («авось пронесет»). ❌ Долго: Разворачивать виртуалку в Hyper-V/VMware. ✅ Архитектор: Запускает Windows Sandbox.
Это встроенная в Pro/Enterprise версию легковесная виртуалка. Она грузится за 5 секунд, использует ваше текущее ядро Windows, но полностью изолирована. Главная фишка: Как только вы закрываете окно — всё содержимое уничтожается. Никаких следов.
Как включить (PowerShell):
Pro Tip: Можно создать конфиг .wsb, чтобы пробрасывать внутрь папки с хоста (Read-Only) или запускать скрипты при старте.
Идеально для тестов софта и открытия подозрительных вложений.
#windows #security #sandbox #testing #bestpractice
Ситуация: Нужно запустить странный .exe или скрипт, который прислал юзер. ❌ Плохо: Запускать на своей машине («авось пронесет»). ❌ Долго: Разворачивать виртуалку в Hyper-V/VMware. ✅ Архитектор: Запускает Windows Sandbox.
Это встроенная в Pro/Enterprise версию легковесная виртуалка. Она грузится за 5 секунд, использует ваше текущее ядро Windows, но полностью изолирована. Главная фишка: Как только вы закрываете окно — всё содержимое уничтожается. Никаких следов.
Как включить (PowerShell):
Enable-WindowsOptionalFeature -FeatureName "Containers-DisposableClientVM" -All -Online
(Потребуется перезагрузка)
Pro Tip: Можно создать конфиг .wsb, чтобы пробрасывать внутрь папки с хоста (Read-Only) или запускать скрипты при старте.
Идеально для тестов софта и открытия подозрительных вложений.
#windows #security #sandbox #testing #bestpractice
🚫 IPv6: Перестаньте его отключать
Есть старая привычка эникейщиков: «Глючит сеть? Отключи IPv6 в адаптере». В 2010 году это помогало. В 2025 году это архитектурная ошибка.
Почему нельзя просто снять галочку:
Windows Server: Microsoft официально заявляет: «Мы не тестируем Windows Server без IPv6». Многие внутренние службы (Exchange, Cluster Service, Active Directory) используют его для общения между собой, даже если у вас нет внешнего v6 адреса.
Тормоза: При отключении IPv6 через GUI адаптера, система всё равно пытается резолвить AAAA-записи DNS, ждет таймаута и только потом идет по IPv4. Это добавляет задержки (latency) при открытии сайтов и подключении к БД.
Как правильно (если очень надо): Если ваш провайдер или свитч реально не дружит с v6, не отключайте протокол. Настройте приоритет (Prefer IPv4 over IPv6) через реестр:
Пусть IPv6 живет своей жизнью внутри ядра. Не мешайте механизму работать.
#network #ipv6 #windows #bestpractice #mythbusters
Есть старая привычка эникейщиков: «Глючит сеть? Отключи IPv6 в адаптере». В 2010 году это помогало. В 2025 году это архитектурная ошибка.
Почему нельзя просто снять галочку:
Windows Server: Microsoft официально заявляет: «Мы не тестируем Windows Server без IPv6». Многие внутренние службы (Exchange, Cluster Service, Active Directory) используют его для общения между собой, даже если у вас нет внешнего v6 адреса.
Тормоза: При отключении IPv6 через GUI адаптера, система всё равно пытается резолвить AAAA-записи DNS, ждет таймаута и только потом идет по IPv4. Это добавляет задержки (latency) при открытии сайтов и подключении к БД.
Как правильно (если очень надо): Если ваш провайдер или свитч реально не дружит с v6, не отключайте протокол. Настройте приоритет (Prefer IPv4 over IPv6) через реестр:
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters" -Name "DisabledComponents" -PropertyType DWord -Value 0x20
Пусть IPv6 живет своей жизнью внутри ядра. Не мешайте механизму работать.
#network #ipv6 #windows #bestpractice #mythbusters
💀 Cron мертв. Да здравствуют Systemd Timers
Мы все привыкли писать crontab -e. Это просто, но убого: ❌ Если задача упала, вы узнаете об этом только если настроили почту. ❌ Логи надо перенаправлять вручную (>> /var/log/my.log 2>&1). ❌ Нельзя сказать: «Запусти бэкап только ПОСЛЕ того, как загрузилась база данных».
В 2025 году Архитектор использует Systemd Timers.
Как это сделать:
Создаем сервис (/etc/systemd/system/backup.service): Описываем, что делать.
Создаем таймер (/etc/systemd/system/backup.timer): Описываем, когда делать.
Активируем: systemctl enable --now backup.timer
Бонусы:
* systemctl list-timers — показывает, когда был последний запуск и когда следующий.
* journalctl -u backup.service — все логи из коробки.
* Можно добавить OnFailure=alert.service, чтобы телеграфировать об ошибках.
#linux #systemd #cron #automation #modern #bestpractice
Мы все привыкли писать crontab -e. Это просто, но убого: ❌ Если задача упала, вы узнаете об этом только если настроили почту. ❌ Логи надо перенаправлять вручную (>> /var/log/my.log 2>&1). ❌ Нельзя сказать: «Запусти бэкап только ПОСЛЕ того, как загрузилась база данных».
В 2025 году Архитектор использует Systemd Timers.
Как это сделать:
Создаем сервис (/etc/systemd/system/backup.service): Описываем, что делать.
[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
Создаем таймер (/etc/systemd/system/backup.timer): Описываем, когда делать.
[Timer]
OnCalendar=*-*-* 03:00:00 # Каждый день в 3 ночи
Persistent=true # Если сервер был выключен, запустить сразу при включении!
[Install]
WantedBy=timers.target
Активируем: systemctl enable --now backup.timer
Бонусы:
* systemctl list-timers — показывает, когда был последний запуск и когда следующий.
* journalctl -u backup.service — все логи из коробки.
* Можно добавить OnFailure=alert.service, чтобы телеграфировать об ошибках.
#linux #systemd #cron #automation #modern #bestpractice
🛡 Linux: Как запретить системе убивать твою Базу Данных (OOM Killer)
Ситуация: На сервере кончилась память (RAM). Ядро Linux включает механизм OOM Killer (Out Of Memory Killer), который, как санитар леса, начинает убивать самые "жирные" процессы, чтобы спасти систему. Чаще всего под нож попадает MySQL, PostgreSQL или Java-приложение. И сервер падает.
Вы можете сказать ядру: "Не трогай этот процесс, убей лучше что-нибудь другое".
Как это сделать: У каждого процесса есть файл /proc/[PID]/oom_score_adj. Значения в нем: от -1000 (бессмертный) до 1000 (убить первым).
Защищаем процесс (например, SSH или БД):
Как сделать это вечным (через Systemd): Добавьте в unit-файл сервиса (/etc/systemd/system/mysql.service.d/override.conf):
Теперь, даже если память кончится полностью, Linux убьет Apache, агенты мониторинга, cron, но Базу Данных будет держать до последнего байта.
#linux #kernel #oom #stability #systemd #bestpractice
Ситуация: На сервере кончилась память (RAM). Ядро Linux включает механизм OOM Killer (Out Of Memory Killer), который, как санитар леса, начинает убивать самые "жирные" процессы, чтобы спасти систему. Чаще всего под нож попадает MySQL, PostgreSQL или Java-приложение. И сервер падает.
Вы можете сказать ядру: "Не трогай этот процесс, убей лучше что-нибудь другое".
Как это сделать: У каждого процесса есть файл /proc/[PID]/oom_score_adj. Значения в нем: от -1000 (бессмертный) до 1000 (убить первым).
Защищаем процесс (например, SSH или БД):
# Находим PID (например, 1234)
# Записываем -1000 в score_adj
echo -1000 > /proc/1234/oom_score_adj
Как сделать это вечным (через Systemd): Добавьте в unit-файл сервиса (/etc/systemd/system/mysql.service.d/override.conf):
[Service]
OOMScoreAdjust=-1000
Теперь, даже если память кончится полностью, Linux убьет Apache, агенты мониторинга, cron, но Базу Данных будет держать до последнего байта.
#linux #kernel #oom #stability #systemd #bestpractice
🚪 SSH: Не пускай никого, кроме избранных (AllowUsers)
Все знают: надо отключать вход по паролю (
Допустим, у вас на сервере 50 пользователей (разработчики, сервис-аккаунты). Если у одного из них утечет ключ или пароль — хакер зайдет.
Сделайте так, чтобы по SSH могли заходить только админы.
Настройка
Фрагмент кода
Фишки:
1. Можно указать конкретные логины.
2. Можно привязать логин к IP (manager@IP).
3. Все остальные пользователи (даже если у них есть правильный пароль/ключ) получат "Permission denied".
Это железобетонная защита от случайных дыр в забытых аккаунтах.
#linux #ssh #security #hardening #bestpractice #config
Все знают: надо отключать вход по паролю (
PasswordAuthentication no ) и вход рута ( PermitRootLogin no ). Но есть еще один слой защиты, который часто игнорируют — Белый список пользователей.Допустим, у вас на сервере 50 пользователей (разработчики, сервис-аккаунты). Если у одного из них утечет ключ или пароль — хакер зайдет.
Сделайте так, чтобы по SSH могли заходить только админы.
Настройка
/etc/ssh/sshd_config : В конец файла добавьте:Фрагмент кода
# Разрешить вход ТОЛЬКО этим пользователям
AllowUsers admin deploy_bot manager@192.168.1.*
Фишки:
1. Можно указать конкретные логины.
2. Можно привязать логин к IP (manager@IP).
3. Все остальные пользователи (даже если у них есть правильный пароль/ключ) получат "Permission denied".
Это железобетонная защита от случайных дыр в забытых аккаунтах.
#linux #ssh #security #hardening #bestpractice #config
🔥2👍1
🛑 Alias: Ремень безопасности для админа (rm -i)
В пятницу вечером концентрация падает. Одно неловкое движение, и rm -rf * удаляет не временную папку, а продакшен. Сделайте так, чтобы Linux всегда спрашивал подтверждение перед удалением или перезаписью файлов.
Добавьте эти строки в свой ~/.bashrc (или .zshrc):
Как это спасет: Теперь, когда вы напишете
#linux #safety #alias #bestpractice #readonlyfriday #config
В пятницу вечером концентрация падает. Одно неловкое движение, и rm -rf * удаляет не временную папку, а продакшен. Сделайте так, чтобы Linux всегда спрашивал подтверждение перед удалением или перезаписью файлов.
Добавьте эти строки в свой ~/.bashrc (или .zshrc):
# Интерактивный режим (спрашивать "Вы уверены?")
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
Как это спасет: Теперь, когда вы напишете
rm important_file , система спросит: remove regular file 'important_file' ? У вас будет секунда, чтобы подумать: "Ой, не тот сервер!".#linux #safety #alias #bestpractice #readonlyfriday #config
🛡️ Active Directory: Группа "Protected Users"
Вы знаете, что если вы зашли Доменным Админом на компьютер пользователя (починить принтер), ваши хеши паролей остались в памяти этого ПК? Хакер запускает Mimikatz и крадет ваши права за секунду.
Есть штатное решение, про которое забывают: группа Protected Users.
Что она делает (для тех, кто в ней состоит):
1. Запрещает кэширование паролей.
2. Запрещает NTLM-аутентификацию (только Kerberos).
3. Запрещает делегирование (Constrained Delegation).
Задача на пятницу: Добавьте свою учетную запись администратора в группу
P.S. Только не добавляйте туда сервис-аккаунты, пока не протестируете — старый софт может отвалиться.
#windows #security #activedirectory #hardening #mimikatz #bestpractice
Вы знаете, что если вы зашли Доменным Админом на компьютер пользователя (починить принтер), ваши хеши паролей остались в памяти этого ПК? Хакер запускает Mimikatz и крадет ваши права за секунду.
Есть штатное решение, про которое забывают: группа Protected Users.
Что она делает (для тех, кто в ней состоит):
1. Запрещает кэширование паролей.
2. Запрещает NTLM-аутентификацию (только Kerberos).
3. Запрещает делегирование (Constrained Delegation).
Задача на пятницу: Добавьте свою учетную запись администратора в группу
Protected Users в AD. Это резко снизит риск компрометации домена, даже если вы случайно залогинитесь на зараженной машине.P.S. Только не добавляйте туда сервис-аккаунты, пока не протестируете — старый софт может отвалиться.
#windows #security #activedirectory #hardening #mimikatz #bestpractice
❤2
💾 Правило 3-2-1
В пятницу вечером самое время спросить себя: "Если завтра сгорит серверная, а облако заблокируют — я восстановлю данные?".
Существует только один стандарт надежности бэкапов. Правило 3-2-1.
Разбор:
1. 3 копии данных: Одна боевая (оригинал) + Две резервных.
* Почему: Вероятность смерти одного диска — 1/100. Трех сразу — 1/1 000 000.
2. 2 разных носителя: Не храните все копии на одном RAID-массиве или одном типе дисков.
* Пример: HDD сервера + Ленточная библиотека (или NAS другого бренда).
3. 1 копия оффсайт: Одна копия должна лежать физически в другом здании (или облаке).
* Почему: Пожар, потоп или кража в офисе уничтожат и сервер, и локальный бэкап.
Если у вас нет пункта №3 — считайте, у вас нет бэкапов.
#backup #security #theory #321rule #bestpractice #disasterrecovery #adminlife
В пятницу вечером самое время спросить себя: "Если завтра сгорит серверная, а облако заблокируют — я восстановлю данные?".
Существует только один стандарт надежности бэкапов. Правило 3-2-1.
Разбор:
1. 3 копии данных: Одна боевая (оригинал) + Две резервных.
* Почему: Вероятность смерти одного диска — 1/100. Трех сразу — 1/1 000 000.
2. 2 разных носителя: Не храните все копии на одном RAID-массиве или одном типе дисков.
* Пример: HDD сервера + Ленточная библиотека (или NAS другого бренда).
3. 1 копия оффсайт: Одна копия должна лежать физически в другом здании (или облаке).
* Почему: Пожар, потоп или кража в офисе уничтожат и сервер, и локальный бэкап.
Если у вас нет пункта №3 — считайте, у вас нет бэкапов.
#backup #security #theory #321rule #bestpractice #disasterrecovery #adminlife