DevOps by REBRAIN
Открытые практикумы по DevOps, Linux, Golang, Networks, Security Мы на связи: info@rebrainme.com +7 (499) 116-34-68 https://rebrainme.com/ Зарегистрированы в РКН: https://knd.gov.ru/license?id=674db558d793bc0b0b8845ff®istryType=bloggersPermission
Mostrar más📈 Análisis del canal de Telegram DevOps by REBRAIN
El canal DevOps by REBRAIN (@rebrain_devops) en el segmento lingüístico de Ruso es un actor destacado. Actualmente la comunidad reúne a 28 845 suscriptores, ocupando la posición 4 759 en la categoría Tecnologías y Aplicaciones y el puesto 22 883 en la región Rusia.
📊 Métricas de audiencia y dinámica
Desde su creación el невідомо, el proyecto ha mostrado un crecimiento acelerado, reuniendo a 28 845 suscriptores.
Según los últimos datos del 16 junio, 2026, el canal mantiene una actividad estable. En los últimos 30 días la variación de miembros fue de 111, y en las últimas 24 horas de -9, conservando un alto alcance.
- Estado de verificación: No verificado
- Tasa de interacción (ER): El promedio de interacción de la audiencia es 8.79%. Durante las primeras 24 horas tras publicar, el contenido suele obtener 7.21% de reacciones respecto al total de suscriptores.
- Alcance de las publicaciones: Cada publicación recibe en promedio 2 530 visualizaciones. En el primer día suele acumular 2 075 visualizaciones.
- Reacciones e interacción: La audiencia responde de forma activa: el promedio de reacciones por publicación es 12.
- Intereses temáticos: El contenido se centra en temas clave como dovecot, linux, скрипт, postfix, yandex.
📝 Descripción y política de contenido
El autor describe el recurso como un espacio para expresar opiniones subjetivas:
“Открытые практикумы по DevOps, Linux, Golang, Networks, Security
Мы на связи:
info@rebrainme.com
+7 (499) 116-34-68
https://rebrainme.com/
Зарегистрированы в РКН: https://knd.gov.ru/license?id=674db558d793bc0b0b8845ff®istryType=bloggersPermiss...”
Gracias a la alta frecuencia de actualizaciones (últimos datos recibidos el 17 junio, 2026), el canal mantiene la vigencia y un amplio alcance. La analítica demuestra que la audiencia interactúa activamente con el contenido, lo que lo convierte en un punto de referencia dentro de la categoría Tecnologías y Aplicaciones.
# ⛔️ ОШИБКА, НЕ ДЕЛАЙ ТАК!
sudo chown root my_tool.sh
sudo chmod u+s my_tool.sh
Эта команда ставит SUID`-бит, который должен запускать файл с правами владельца (`root`). Но с скриптами (.sh`, .py`) это не работает — ядро Linux игнорирует `SUID для них из соображений безопасности.
Хуже того, это создает ложное чувство защиты и открывает двери для атаки Path Injection.
Как `root`-скрипт отдает тебе систему
Представь, у тебя есть скрипт, который запускается через sudo и содержит вызов системной команды без полного пути:
victim_script.sh
#!/bin/bash
# ...какой-то код...
# Вот уязвимость:
ps aux
# ...
Атакующий делает три простых шага:
1️⃣ Создает свой `ps`:
# Этот "ps" на самом деле запускает шелл
echo '/bin/bash' > /home/attacker/ps
chmod +x /home/attacker/ps
2️⃣ Добавляет свою папку в `PATH`:
export PATH=/home/attacker:$PATH
Теперь его папка в приоритете для поиска команд.
3️⃣ Запускает твой скрипт:
sudo /path/to/victim_script.sh
Скрипт попытается выполнить ps, найдет вредоносный файл атакующего и запустит его с правами root. Игра окончена, система захвачена.
Как делать правильно и безопасно
Всего два железных правила, которые спасут твою инфраструктуру:
1️⃣ Всегда указывай полные пути к исполняемым файлам в своих скриптах: /bin/ps, /usr/bin/systemctl и т.д.
2️⃣ Используй `sudoers` для выдачи прав. Это единственный контролируемый способ.
Создай файл /etc/sudoers.d/developers:
# Дать право запускать ТОЛЬКО один конкретный скрипт без пароля
developer ALL=(root) NOPASSWD: /usr/local/bin/my_awesome_tool.sh
Это безопасно, логируется и полностью под твоим контролем.
---
Знание таких основ — это фундамент. Чтобы видеть все векторы атак, от sudo и SUID до эксплойтов ядра, и уметь им противостоять, нужно мыслить как атакующий.
Именно этому мы учим на нашем практикуме "Повышение привилегий в Linux". Только хардкор, только практика на стендах.
🚀 Старт курса уже 26 января! Успей запрыгнуть, чтобы стать на голову выше в понимании Linux.
🤘Записаться на курс
---
P.S. Мы хотим постить прямые ссылки на самые сочные материалы в сторис, но для этого Телеграм просит "бусты". Если наши посты тебе полезны, поддержи канал своим голосом! Это быстро и бесплатно.
🚀 Бустануть канал Rebrain
Спасибо! 💪
Сегмент 1: sales {A, C, E}, products {A, D}
Сегмент 2: sales {B, D, F}, products {B, C}
➡️ При join по product_id системе придётся "гонять" почти все строки между серверами (reshuffle). Это и есть главный тормоз.
Как это выглядит в коде (проблемный вариант):
-- Таблицы созданы без общей стратегии дистрибуции
CREATE TABLE sales (sale_id bigint, product_id int, amount decimal)
DISTRIBUTED RANDOMLY; -- или DISTRIBUTED BY (sale_id)
CREATE TABLE products (product_id int, name text)
DISTRIBUTED BY (product_id);
💡Решение — контроль дистрибуции от создателей технологии:
Эксперты Yandex Cloud покажут, как проектировать схему с самого начала, чтобы соединения работали локально.
-- Правильная дистрибуция по общему ключу соединения
CREATE TABLE sales_opt (sale_id bigint, product_id int, amount decimal)
DISTRIBUTED BY (product_id); -- Теперь product_id совпадает с products!
CREATE TABLE products (product_id int, name text)
DISTRIBUTED BY (product_id);
Результат: Данные с одинаковым product_id лежат на одном сегменте. Join выполняется локально, ускоряясь в десятки раз.
🎯 Где вы научитесь такому подходу? Только на курсе, разработанном и проводимом командой Yandex Cloud.
Это не просто теория. Это официальная программа от Yandex Cloud, где:
🔹 Все практические работы выполняются на реальных инструментах Yandex Cloud — в сервисе Yandex MPP Analytics for PostgreSQL.
🔹Вы учитесь на кейсах и best practices, которые используют разработчики этой облачной платформы.
🔹Формат этой когорты — гибридный для максимального результата:
🔹Гибкий график: Теорию и задачи проходите в удобное время.
🔹Синхронные вебинары с экспертом Yandex Cloud: Онлайн-встречи привязаны к программе, чтобы разбирать сложные моменты и давать обратную связь. Держите ритм, чтобы не отстать!
Вебинары проведёт Никита Целищев — эксперт по Big Data из команды Yandex Cloud, который ежедневно работает с сервисом Yandex MPP Analytics и знает все тонкости оптимизации изнутри.
🚀 Хотите не просто использовать Greenplum, а понимать его архитектуру и выжимать максимум производительности?
Записывайтесь на курс "Greenplum в Yandex MPP Analytics for PostgreSQL" от создателей и главных экспертов по облачной платформе.
👉 Подробнее о курсе и программе: https://rebrainme.com/courses/greenplum
💳 Оплатить по специальной цене:
# Фрагмент values.yaml, основанный на практике YC
usageTracking:
enabled: true
exporter: clickhouse
clickhouse:
hosts:
- rc1a-xxxxxx.mdb.yandexcloud.net:9440
database: datalens_logs
table: usage_events
user: tracker
tls_mode: REQUIRE
3️⃣Верификация потока данных: логи из подов DataLens начинают поступать в ваше управляемое хранилище, где их можно анализировать с помощью SQL.
Архитектурная схема решения:
DataLens Pods (K8s) → [Secure TLS Channel] → Yandex Managed ClickHouse → Ваши SQL-отчёты
💡Где научиться всему циклу работ от первоисточника?
Приглашаем на практический курс «Администрирование DataLens On‑Premises», который полностью разработан и проводится экспертами Yandex Cloud.
Ваши главные преимущества:
🔹Курс от создателей: Программа создана командой Yandex Cloud и отражает внутренние стандарты развёртывания и настройки.
🔹Инструменты от первого лица: Все практические работы вы выполняете в инфраструктуре Yandex Cloud, используя те же сервисы и подходы.
🔹Эксперт-наставник из Яндекс Облака: Онлайн-вебинары ведёт Глеб Белов, Senior Solutions Architect в Yandex Cloud, который непосредственно помогает крупным клиентам внедрять DataLens Enterprise.
Формат: Гибридный. Теорию и задачи в LMS проходите в удобном темпе, а на вебинарах с Глебом разбираете сложные моменты и перенимаете экспертный опыт.
🚀 Специальное предложение до 22 января:
💳 Оплатить со скидкой 30% (38 500 руб. вместо 55 000 руб.)
Научитесь администрировать DataLens у команды, которая его создаёт и развивает.
#!/bin/bash
# audit_scheduler.sh - Улучшенный скрипт для аудита cron и systemd
REPORT_FILE="/var/log/security_audit_$(hostname)_$(date +%F).log"
# Чистим старый лог или начинаем новый
> "$REPORT_FILE"
log_finding() {
local level="$1"
local message="$2"
echo "[${level}] - $(date +'%Y-%m-%d %T') - ${message}" | tee -a "$REPORT_FILE"
}
log_finding "INFO" "Начало аудита безопасности на хосте $(hostname)"
# --- ПРОВЕРКА CRON ---
log_finding "INFO" "Анализ cron-задач..."
# Объединяем все известные места с cron-задачами в один список для анализа
ALL_CRONS=$(mktemp)
(cat /etc/crontab; find /etc/cron.* -type f -exec cat {} +; for user in $(cut -d: -f1 /etc/passwd); do crontab -u "$user" -l 2>/dev/null; done) | grep -v '^\s*#' | grep -v '^\s*$' > "$ALL_CRONS"
# Проверка 1: Скрипты, доступные на запись ВСЕМ (World-writable)
log_finding "INFO" "Поиск скриптов, доступных на запись для всех (world-writable)..."
# Извлекаем путь к исполняемому файлу (более надежный способ)
cut -d ' ' -f 6- "$ALL_CRONS" | tr ' ' '\n' | grep '^/' | sort -u | while read -r cmd_path; do
[ ! -f "$cmd_path" ] && continue
# Находим файлы, у которых есть право на запись для 'other'
if stat -c "%a" "$cmd_path" | grep -qE '.[0-7][2367]$'; then
log_finding "CRITICAL" "Cron-скрипт '$cmd_path' доступен для записи всем! Права: $(stat -c '%a' "$cmd_path")"
fi
done
# Проверка 2: Директории в $PATH, доступные на запись (Path Hijacking)
log_finding "INFO" "Поиск директорий в $PATH, доступных для записи..."
echo "$PATH" | tr ':' '\n' | while read -r dir; do
[ ! -d "$dir" ] && continue
if stat -c "%a" "$dir" | grep -qE '.[0-7][2367]$'; then
log_finding "HIGH" "Директория '$dir' из \$PATH доступна для записи всем. Возможна атака Path Hijacking."
fi
done
# Проверка 3: Wildcard Injection в популярных командах (tar, rsync, chown)
log_finding "INFO" "Поиск потенциально уязвимых wildcard'ов..."
if grep -E '(tar|rsync|chown).*\s+\*' "$ALL_CRONS"; then
log_finding "WARNING" "Найдено использование wildcard (*) в cron. Проверьте вручную на уязвимость Wildcard Injection:"
grep -nE '(tar|rsync|chown).*\s+\*' "$ALL_CRONS" | sed 's/^/ Line /' | tee -a "$REPORT_FILE"
fi
rm "$ALL_CRONS"
# --- ПРОВЕРКА SYSTEMD ---
log_finding "INFO" "Анализ systemd-юнитов..."
find /etc/systemd/system /usr/lib/systemd/system -name "*.service" -type f | while read -r unit_file; do
# Проверяем, что сам .service файл доступен на запись кому-то кроме root
if [ "$(stat -c '%U' "$unit_file")" != "root" ] || stat -c "%a" "$unit_file" | grep -qE '.[0-7][2367]$'; then
log_finding "CRITICAL" "Systemd unit '$unit_file' имеет слабые права доступа: $(stat -c '%a (%U:%G)' "$unit_file")"
fi
# Ищем путь к исполняемому файлу и проверяем его права
exec_start=$(grep -oP 'ExecStart=\K.*' "$unit_file" | awk '{print $1}')
if [[ -n "$exec_start" && -f "$exec_start" ]]; then
if stat -c "%a" "$exec_start" | grep -qE '.[0-7][2367]$'; then
log_finding "HIGH" "Бинарник '$exec_start' из юнита '$unit_file' доступен на запись всем!"
fi
fi
done
log_finding "INFO" "Аудит завершен. Отчет сохранен в $REPORT_FILE"
echo "---"
echo "Аудит завершен. Найденные проблемы уровня CRITICAL/HIGH:"
grep -E '\[CRITICAL\]|\[HIGH\]' "$REPORT_FILE"
# ⛔️ ПЛОХОЙ ПРИМЕР, НЕ ИСПОЛЬЗОВАТЬ! ⛔️
# Ищем скрипты
cmd_list=$(cat /etc/crontab | awk '{print $6}')
# Проверяем, доступны ли они на запись
for script in $cmd_list; do
if [ -w "$script" ]; then
echo "УЯЗВИМОСТЬ: $script доступен на запись!"
fi
done
🔥 Разбор полетов: почему это не работает?
1. Хрупкий парсинг: awk '{print $6}' сработает только для идеально отформатированного crontab из 6 полей. Забыли переменную? MAILTO=... — и всё, парсер поехал. @reboot? Тоже мимо. Команда из нескольких слов? Возьмется только первое.
2. Неверная проверка прав: if [ -w "$script" ], запущенный от root, всегда скажет true для файлов, принадлежащих root. Скрипт будет кричать об уязвимости почти на каждый системный файл, создавая тонны шума. Проверять нужно права для *других* пользователей (`group` и `other`).
3. Поверхностный поиск: Скрипт не проверяет права на *директорию*, где лежит скрипт (атака Path Hijacking), не ищет уязвимости с wildcard (*) и полностью игнорирует пользовательские кронтабы (`crontab -e`).
Итог: такой аудит бесполезен. Он либо ничего не найдет, либо утопит тебя в ложных срабатываниях.
А теперь, как надо. Собираем более надежный и умный скрипт, который учитывает эти нюансы.
ALTER TABLE app_users
ADD COLUMN IF NOT EXISTS email_enabled BOOLEAN DEFAULT TRUE,
ADD COLUMN IF NOT EXISTS quota_mb BIGINT DEFAULT 1024; -- Квота 1Гб
-- Важно: Пароль должен лежать не текстом, а хэшем (например, ARGON2ID или SHA512-CRYPT), который понимает Dovecot.
2️⃣ Создаем системного "почтальона"
Dovecot не должен работать от root. Ему нужен один технический юзер, который будет владеть всеми файлами писем.
# Создаем группу и юзера vmail с uid/gid 5000
groupadd -g 5000 vmail
useradd -g vmail -u 5000 -d /var/vmail -m -s /usr/sbin/nologin vmail
3️⃣ Настраиваем Dovecot
Идем в /etc/dovecot/conf.d/.
Файл `10-auth.conf`
Отключаем системных юзеров и включаем SQL:
# !include auth-system.conf.ext <-- Комментируем это!
!include auth-sql.conf.ext <-- Раскомментируем это
Файл `auth-sql.conf.ext`
Говорим Dovecot, где искать правила:
passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
Файл `dovecot-sql.conf.ext` (Самое мясо)
Здесь мы мапим данные из SQL в переменные Dovecot.
driver = pgsql
# Создайте отдельного юзера в БД с правами ТОЛЬКО на SELECT!
connect = host=127.0.0.1 dbname=mydb user=dovecot_user password=secure_pass
# Схема паролей по умолчанию
default_pass_scheme = ARGON2ID
# Запрос для проверки пароля (PassDB).
# %u = user@domain.com
password_query = \
SELECT username as user, password \
FROM app_users WHERE username = '%u' AND email_enabled = 't'
# Запрос данных пользователя (UserDB).
# Возвращаем UID/GID нашего юзера vmail (5000) и путь к ящику.
# home - где лежат индексы, mail - где лежат письма
user_query = \
SELECT '/var/vmail/%d/%n' as home, \
'maildir:/var/vmail/%d/%n' as mail, \
5000 as uid, 5000 as gid, \
concat('*:storage=', quota_mb, 'M') as quota_rule \
FROM app_users WHERE username = '%u' AND email_enabled = 't'
В чем подвох?
1. Нагрузка: Каждый логин (даже проверка почты телефоном в фоне) — это запрос в БД. Если у вас 10k юзеров, базе может стать плохо. Решение: кэширование в Dovecot или пулеры соединений.
2. Безопасность: Если вашу базу "уведут", утекут и почтовые креды. Ограничивайте права SQL-юзера Dovecot’а.
---
💡 Это — база. Но почтовый сервер — это не только userdb. Это еще TLS, антиспам, Sieve-фильтры, LMTP-доставка и бэкапы, которые реально восстанавливаются.
Хочешь разобраться, как построить production-grade почтовую систему, а не просто скопипастить конфиг? Залетай.
🔥 Курс «Dovecot: настройка и эксплуатация почтовых систем»
Что внутри:
* Полная архитектура (MTA, MDA, LMTP).
* Интеграция не только с SQL, но и с LDAP/AD.
* Безопасность (SSL/TLS, защита от брутфорса).
* Траблшутинг (doveadm, логи, дебаг).
🗓 Старт: 26 января
💰 Цена: 22 000 руб. (до 25 января), потом — 25 000 руб.
Не копи технический долг, учись строить системы правильно с Rebrain!
👉 Программа
👉Ссылка, если готов сразу купить
¡Ya disponible! Investigación de Telegram 2025 — los principales insights del año 
