DevOps Brain 🧠
1.21K subscribers
127 photos
16 videos
119 links
Пишу про kubernetes, terraform, linux, сети, автоматизации и полезные тулзы. Без спама и щитпостинга.

Хотите пообщаться? @devopsbrain_chat

Автор: @itcaat
Download Telegram
Не смотря на то, что ИИ вылез уже из каждой дырки, а важность знаний обесценивают с каждым днем – я считаю, что чтение хороших книг дает тот самый важный фундамент, на котором может и должна строиться карьера инженера.

Пусть все говорят «можно спросить у ИИ». Но это как списывать решения, не понимая, как они получены. Книга в первую очередь заставляет думать. Медленно, местами больно, иногда с возвращением назад и перечитыванием.

Но именно в этот момент и происходит магия🪄формируется мышление. Не просто набор ответов, а способность задавать правильные вопросы, видеть причинно-следственные связи и понимать, где у решения границы применимости. Так что ИИ – это ускоритель. Книги – это база. Без базы ускорять нечего.

Я тут подумал – давайте разыграем одну из книг, которые лично мне помогали формировать ту самую базу. Единственное, что мне надо будет чуть времени, чтобы разобраться как делают розыгыши в телеге. А пока выберите какую книгу – через пару минут я скину голосовалку :loading:

• «Высоконагруженные приложения. Программирование, масштабирование, поддержка» — Мартин Клеппман.
• «Site Reliability Engineering. Надежность и безотказность как в Google» – Б. Бейер, К. Джоунс, Дж. Петофф, Н. Р. Мёрфи.
• «Основы инженерии данных» – Джо Райс, Мэтт Хаусли.
• «Распределенные данные» – Алекс Петров.
• «System Design: подготовка к интервью» – Алекс Сюй.
• «System Design: пережить интервью» – Чжиюн Тань.
• «Чистая архитектура. Искусство разработки программного обеспечения» – Роберт Мартин.
• «Семь баз данных за семь недель» – Эрик Редмонд, Джим Уилсон.

---
Telegram | Github | YouTube | Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9❤‍🔥6
Отпуск закончился, а вместе с ним и семейная поездка в Шанхай. Хочу поделиться с вами фотографиями и поделиться нюансами, если вы тоже решите туда сгонять. Long story short: “стоит ли туда вообще лететь? Однозначно да!”.

💳 Обязательно ставим AliPay. Я регистрировался просто по email, так как SMS не приходила. Вообще alipay must have в Китае. Вы сможете там и на наличку жить, но это очень неудобно. Например, меню большинства рестиков это qr-код на столе. Сканите прямо в alipay, закаываете, тут же платите и заказ приносят. Обязательно пройдите KYC. В интернетах есть инструкции.

Бабки загонять можно через крипту p2p в приложении HTX. Процесс максимально простой: переводите свою крипту на кошелек в HTX и дальше просто выбираете CNY → Размещаете ордер → Кидаете свой QR в чат с покупателем → Он вам переводит на алик, а вы подтверждаете получение. Ни разу не подводило.

🏝 Обязательно ставим trip.com. Супер нужное приложение для путешествия по Китаю и не только. Там вы можете за рубли купить ESIM, билеты на любые достопримечательности, поезда, авиабилеты, выставки. Также вы сможете почитать опыт других путешественников. Это такой комбайн с соцсетью внутри - прям мастхев.

ESIM активируйте до вылета в Китай. Там конечно будет WIFI в аэропорту Шанхая, но мало-ли - лучше сделать заранее. И включите роумнинг на esim, а то я затупил и ходил ругался что ничего не работает. =)

Также за день до вылета заполните арривал кард. В принципе можно и прилету сделать, но в домашней обстановке как то поспокойнее.

Я не буду описывать все достопримечательности - их вы найдете на том же trip.com, где и сможете себе выбрать что-то по душе от зоопарков до прышков с парашютом. Кстати, там же я рассказал как можно прокатиться на беспилотном такси.

🎧 В общем - не забывайте ходить, ездить или ползти в отпуска. А то тут видел недавно твит: чел радовался айфону в качестве компенсации, что он 2 года в отпуске не был.

А мой отпуск всё и я побежал делать свои задачки и пойду готовить для вас интересные посты. Кстати книгу скоро разыграем тоже - я помню =)

---
Telegram | Github | YouTube | Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17
Ребята, привет. У меня тут накопилось какое-то количество апдейтов по всякому непотребству.

Возможно вам что-то из этого будет полезно 🙂

1. Grafana + Proxmox
Пошарил дашборд Multi-Cluster Proxmox Pulse Overview.
Даёт быстрый обзор нагрузки по нодам и VM — удобно для первичной диагностики без лишнего кликанья.

2. cli-stash → bulk insert
Добавил возможность массово загружать команды (спасибо sai21-learn за пулик). Напомню тем кто не знает – это тулза для часто используемых и сложных CLI-команд – сильно ускоряет работу.


# Bulk add commands
cli-stash add "echo 'hello world'" "ls -la"
cli-stash add --bulk "git status, docker ps, kubectl get pods"

# Add commands from a file
cli-stash add --file commands.txt


3. Smart Tabs 1.0.20 → виджеты
В дополнении для хрома Smart Tabs теперь можно встраивать произвольные данные (например, метрики из Prometheus) прямо в интерфейс. Будет отображаться на отдельной панели виджетов внизу.

---
Telegram | Github | YouTube | Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥13
Никогда не было и вот опять... Доброе утро 🫣

‼️🚨 BREAKING: An AI found a Linux kernel zero-day that roots every distribution since 2017. The exploit fits in 732 bytes of Python. Patch your kernel ASAP.

https://copy.fail/

---
Telegram | Github | YouTube | Twitter
7
Короче, ребята, по поводу того, что в ядре Linux нашли критическую дыру CVE-2026-31431.

Если кратко: это локальный root за один проход. Без танцев с бубном, без рейс-кондишнов и бесконечных циклов. Просто запускаешь скрипт на 700 байт - и ты админ.

Косяк зарыт в криптографической подсистеме (режим authencesn). Там при записи влетает лишних 4 байта мимо буфера. Но самое паршивое - куда они влетают. Они ложатся прямо в page cache. То есть на диске бинарник (тот же /usr/bin/su) чистый и хеш-суммы сходятся. Но в оперативке он уже модифицирован. Ядро верит кэшу, исполняет этот мусор в памяти и дает рута. Причем можно вылезти даже из контейнера.

Я протестировал эксплойт на разных виртуалках в разных клаудах и везде мне удалось легко получить root. Поэтому, если прямо сейчас у вас есть какие-то пользователи на ваших серверах - нужно срочно установить системные обновления/патчи на ваши сервера ( с ребутом ).

Если такой возможности нет, то делаем так:


### Отключаем какашку
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.conf
rmmod algif_aead

### Смотрим что какашки больше нет и сбрасываем кеши
lsmod | grep algif
echo 3 > /proc/sys/vm/drop_caches

### Протестировать будет ли воспроизводиться эксплойт можно еще так:
python3 -c 'import socket;
s = socket.socket(socket.AF_ALG, socket.SOCK_SEQPACKET, 0);
s.bind(("aead","authencesn(hmac(sha256),cbc(aes))"));
print("algif_aead successfully loaded, mitigation not effective; remove it with: # rmmod algif_aead")'


Patch now, cry later. Хорошей пятницы 😕

---
Telegram | Github | YouTube | Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥212
Если вы не успели обновить свои серваки, чтобы закрыть CVE-2026-31431, то и правильно сделали =)). Вышла уже новая критическая уязвимость – Dirty Frag. И снова любой локальный пользователь может поднять свои права до root.

Проблема затрагивает почти все дистрибутивы Linux, вышедшие с 2017 года. Похожа на недавний Copy Fail (см. предыдущий пост). Эксплойт уже в открытом доступе на GitHub вместе с инструкцией, так что школо-хакеры и ботнеты подтянутся быстро.

На текущий момент (8 мая 2026) патчей в официальных репозиториях популярных дистрибутивов еще нет. Ждем обновлений ядра в ближайшие дни.

Пока нет патча делаем временный костыль – отключаем модули esp4, esp6 и rxrpc. Если они вам не критичны для работы, выполните в терминале:


sh -c "printf 'install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n' > /etc/modprobe.d/dirtyfrag.conf; rmmod esp4 esp6 rxrpc 2>/dev/null; true"


Как только прилетят обновы ядра – сразу ставим и ребутаемся. Это единственный нормальный способ закрыть вопрос.

Технические подробности и сам код эксплойта лежат тут: https://github.com/V4bel/dirtyfrag

Что-то мне подсказывает, что будет нас еще ждет много эксплойтов веселых и рахных. Берегите свои сервера, а я пока пойду потестирую эксплойт 😕
Please open Telegram to view this post
VIEW IN TELEGRAM
9🔥5😁2
Media is too big
VIEW IN TELEGRAM
Шо опять? 😈

Пару часов назад Уильям Боулинг и команда V12 выложила свежайший эксплойт для повышения привилегий – встречайте Fragnesia.

Как это работает:
1. Создается lookup-таблица из 256 значений, сопоставляя байты кейстрима AES-GCM с нужными нам IV (nonce).
2. Сплайсятся данные из целевого файла в TCP-сокет, а затем происходит переключение его в режим espintcp.
3. Ядро пытается расшифровать данные прямо в кэше страниц. Подбирая IV, заставляем алгоритм XOR-ить именно тот байт, который нам нужен, превращая оригинальный код в наш шелл-код.
4. Заменяются первые 192 байта su в памяти на стаб, вызывающий /bin/sh с правами root. При этом файл на диске остается нетронутым

Временный фикс:

rmmod esp4 esp6 rxrpc
printf 'install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n' > /etc/modprobe.d/dirtyfrag.conf


Похоже, мы вошли в эпоху, когда новости о критических уязвимостях в Linux выходят чаще, чем обновления в App Store. Не успели просохнуть патчи для первого Dirty Frag, как прилетела Fragnesia.

---
Telegram | Github | YouTube | Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥92
🔖Контейнер ≠ Docker [1/3]

Представьте: вы проходите собеседование в уважаемую компанию, и вам задают «любимый» вопрос: «А чем отличаются контейнеры от виртуальных машин?»

На самом деле сама постановка вопроса уже говорит о низкой квалификации собеседующего. Почему? Сейчас объясню.

Современные контейнеры давно вышли за рамки исключительно Linux namespaces и cgroups, а официальный стандарт OCI вообще допускает контейнеры на базе виртуальных машин.

Согласно OCI-спецификации: контейнер – это изолированная среда для выполнения процессов с настраиваемыми ограничениями ресурсов и уровнями изоляции. Ключевой момент здесь – среда выполнения, а не сам процесс. То есть контейнер – это не просто “изолированный процесс Linux” как многие думают, а стандартизированная среда запуска.

Но это ещё не всё – OCI допускает контейнеры, построенные поверх виртуализации. В этом случае изоляция достигается не namespaces (cgroups, seccomp, capabilities etc), а гипервизором.

Самая известная реализация VM-контейнеров – Kata Containers. Kata запускает OCI-контейнеры внутри лёгких виртуальных машин.

Как итог это позволяет получить:

- повышенную безопасность;
- изоляцию уровня виртуальных машин;
- относительно быстрый старт – там есть оверхед, но не сильно критичный.

Более того мы можем научить docker cli использовать runtime kata. Снаружи это выглядит как обычный контейнер, а внутри – microVM:


docker run --rm -it --runtime kata --cpus 0.5 ubuntu nproc


Короче: если собеседующий задаёт этот вопрос – бегите. Он застрял в 2015 году и перепутал Docker с религией.

Ну а в следующих частях я расскажу как использовать Kata Containers и Firecracker практике. Покажу как развернуть эту всю историю на сервере и запускать microVM для достижения максимально изоляции.

Если вам интересна эта тема - ставьте 🔥 и всем хорошей пятницы.

---
Telegram | Github | YouTube | Twitter
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥47
🔖Когда графики в Grafana врут?

Хотите разобраться почему графики показывают разные данные в grafana на разных интервалах и дипазонах? Сейчас мы с вами за 4 шага разберемся почему так происходит…

Я специально сделал гремучую смесь параметров в панели, чтобы детально показать что происходит под капотом. Нам важны три цифры со скрина:

Окно в функции PromQL: increase(...[5m]).
Interval: 10m.
Глобальный диапазон: Last 7 days.

1. Какую сетку строит Grafana?

Смотрим на поле Interval – Grafana уже сама все посчитала и поставила 10m.

Interval один из самых важных параметров. Grafana использует его и в запросах в PromQL, и в визуализации панели.

Тут сработала математика самой Grafana: она взяла 7 дней, разделила на ширину панели в пикселях (Max data points = 1146), получила число в районе 8.6 минут и округлила его вверх до ближайшего красивого шага – 10 мин. Формула подсчета интервала там есть прямо рядом Time range / max data points.

В данном примере Grafana выполнит range query с шагом 10 минут: 12:00, 12:10, 12:20, 12:30...

Немного отвлечемся на другой немаловажный параметр - Min interval. Представим, что мы решили посмотреть детально и выделили на графике узкий отрезок – всего в 15 мин (вместо текущих 7 дней).

Исходя из формулы Interval = Time range / max data points получились бы интервалы в 0.76 сек. и это очень мало для корректной визуализации. Тут в игру вступает Min interval = 1m:

• Grafana видит, что расчетный шаг (0.76 сек) меньше, чем лимит (1m).
• Она говорит: “Окей, я не буду частить. Буду просить данные с шагом строго 1 мин..

По сути Min Interval это защита от бессмысленных маленьких интервалов.

С этим вроде разобрались – погнали смотреть что в запросе PromQL.

2. Какое окно считает Prometheus?

Когда Prometheus выполняет запрос для каждой точки, он видит твою функцию increase(...[5m]). Это значит в этой конкретной точке оглянись назад ровно на 5 минут и посчитай прирост счетчика.

Складываем это вместе и смотрим на хронологию:

• Точка 12:10: Prometheus смотрит назад на 5 мин. – оценивает отрезок с 12:05 до 12:10. Отдает значение. Grafana рисует точку.
• Точка 12:20: Prometheus делает шаг в 10 мин., встает на новую точку и снова смотрит назад на 5 минут – оценивает отрезок с 12:15 до 12:20.

3. Главный инсайт – на графике появились “слепые зоны”!

Заметили, что произошло?

• 1 точка покрыла интервал 12:05 - 12:10.
• 2 точка покрыла интервал 12:15 - 12:20.

А куда делся промежуток времени с 12:10 до 12:15? Он просто выпал из расчетов. Он не попал ни в первую точку, ни во вторую.

Когда интервал шага на графике (10m) больше, чем окно в самой функции ([5m]) – наше временное окно больше не скользит с пересечением. Оно начинает прыгать через промежутки времени, оставляя слепые зоны.

Если в промежуток с 12:10 до 12:15 бахнет жесткий всплеск – график его вообще не покажет, потому что Prometheus физически не заглянет в этот пятиминутный отрезок.

4. Как это исправить, чтобы график стал адекватным?

Тут важно понимать, что я специально сделал довольно спорные параметры панели, которые в реальной жизни я бы не стал применять. Но (как я уже говорил) они отлично подходят для демонстрации того, что происходит под капотом.

Самый правильный путь – переписать запрос на rate с динамическим интервалом $__rate_interval = max( $interval + scrape_interval , 4 × scrape_interval ).

$__rate_interval значительно уменьшает вероятность появления слепых зон и делает поведение графика гораздо стабильнее при смене диапазона.


rate(postfix_smtp_messages_processed_total{...}[$__rate_interval])


На самом деле $__rate_interval довольно крут тем, что на широких дипазонах Grafana сама передаст Prometheus окно в 10m подстроившись под шаг графика. А если бы мы смотрели узкий диапазон (например, 15 мин), то:

• interval = 0.76 с.
• 4 × scrape_interval = 1 мин.
• Итоговое окно = 1 мин. (а не 0.76 сек.)

То есть $__rate_interval всегда не меньше 1 мин (или 4×scrape_interval), что защищает от слишком маленьких окон.

А на этом у меня всё – ставьте лайки, задавайте вопросы

Telegram | Github | YouTube | X
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12❤‍🔥42