linuxskill | Unsorted

Telegram-канал linuxskill - LinuxSkill - Сводки с прода и Шпаргалки

10723

Следим за новостями Linux, DevOps и ИБ, чтобы быть готовым к любым факапам. Бонусом — плотные шпаргалки и чеклисты для ежедневной работы в терминале. 📩 По всем вопросам: @chorapov Зеркало в MAX: https://max.ru/LinuxSkill РКН https://vk.cc/cMUwm4

Subscribe to a channel

LinuxSkill - Сводки с прода и Шпаргалки

☠️ Реплики плодятся и умирают? Траблшутинг Docker-кластера для мидлов

Распределённые сервисы падают незаметно. Вчера работало три реплики, а сегодня нода отвалилась из-за нехватки памяти, и кластер бьётся в агонии. Показываю, как жёстко протестировать self-healing и дебажить мульти-нодовые сервисы прямо из терминала. Всё ниже — про Docker Swarm (не про обычный docker run).

Срез состояния распределённого сервиса

# На каких нодах (NODE) запущены реплики сервиса web.
# Столбцы DESIRED STATE и CURRENT STATE сразу покажут зависшую или упавшую задачу.
docker service ps web


Имитация аппаратного сбоя (Failover)

# Мягко выводим ноду из балансировки — задачи переедут на живые узлы.
docker node update --availability drain worker-1

# Возвращаем ноду в строй (реплики сами обратно НЕ переедут — нужен ребаланс).
docker node update --availability active worker-1


Глобальная агрегация логов

# Логи со всех реплик на всех нодах в один поток.
# --raw убирает служебные префиксы Swarm, если нужен чистый вывод приложения.
docker service logs --follow --details web


Детальный дебаг умирающих реплик

# Надёжнее текстового grep — встроенный фильтр по состоянию задачи.
# Показывает именно завершённые/упавшие задачи, а колонка ERROR даёт причину.
docker service ps web --no-trunc --filter "desired-state=shutdown"

# Альтернатива через grep (работает, но чувствительна к регистру и формату):
docker service ps web --no-trunc | grep -i "failed"


Инспекция здоровья менеджеров

# Не рассинхронизировался ли Raft: доступность конкретного менеджера.
docker node inspect manager-1 --format '{{.ManagerStatus.Reachability}}'

# Кто сейчас лидер кластера (true = этот узел лидер).
docker node inspect manager-1 --format '{{.ManagerStatus.Leader}}'


Подводные камни:
Если кворум менеджеров (Raft) потерян, воркеры продолжат обслуживать трафик, но управлять кластером ты не сможешь. Держи нечётное число менеджеров: 3 переживают падение 1, 5 — падение 2, 7 — падение 3.
docker logs работает только для локального контейнера на конкретной ноде. В кластере используй docker service logs.

Не тестируй отказоустойчивость убийством одного контейнера — Swarm просто перезапустит его на той же ноде. Имитируй падение узла целиком через drain.

Держи кластер под жёстким контролем и тестируй failover раньше, чем это сделает боевой трафик.

❗️❗️❗️ Нравится формат? Ставь 👍

👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #Docker #DevOps #Swarm #SysAdmin

Читать полностью…

LinuxSkill - Сводки с прода и Шпаргалки

☠️ Твой скрипт не переживёт пробел в имени файла. 15 сниппетов для сеньоров

Замечал, как рабочий скрипт внезапно затирает данные из-за пустой переменной или ломается от кривого переноса строки? Чтобы не краснеть за код перед коллегами, перестань использовать устаревшие конструкции. Держи 15 жёстких приёмов для неубиваемых скриптов.

Защита от фатальных сбоев

# 1. Неофициальный строгий режим. Падение при первой ошибке,
# обращении к пустой переменной и ошибке внутри конвейера.
set -euo pipefail

# 2. Безопасная очистка мусора. Сработает даже при Ctrl+C (SIGINT).
TMP_DIR=$(mktemp -d)
trap 'rm -rf "$TMP_DIR"' EXIT

# 3. Статусы в конвейере. Обычный $? покажет только последнюю команду.
# PIPESTATUS хранит массив — обращайся ПО ИНДЕКСУ: [0], [1]...
cat /etc/passwd | grep -q missing_user
echo "Статус cat: ${PIPESTATUS[0]}, статус grep: ${PIPESTATUS[1]}"


Работа с переменными без sed и awk

# 4. Значение по умолчанию. Защищает от rm по пустому пути.
# ВАЖНО: при set -u скрипт и так упадёт на пустой TARGET — двойная защита.
rm -rf "${TARGET:-/tmp/fallback}/"*

# 5. Глобальная замена подстроки в памяти.
LOG="error db, error net"
echo "${LOG//error/warning}"

# 6. Косвенная адресация: чтение переменной по имени из другой переменной.
REAL_VAR="SecretKey"
POINTER="REAL_VAR"
echo "${!POINTER}"

# 7. Нативная замена basename и dirname (без вызова внешних утилит).
FILE="/var/log/syslog.gz"
echo "${FILE##*/}" # syslog.gz (срезано всё до последнего слеша)
echo "${FILE%/*}" # /var/log (срезано всё после последнего слеша)


Логика без костылей

# 8. Регулярки нативно (только в [[ ]], регулярку справа НЕ кавычим).
if [[ $1 =~ ^[0-9]+$ ]]; then
echo "Передано число"
fi

# 9. Группа команд в текущем процессе (без subshell) — переменные сохраняются.
[[ -d /app ]] || { echo "Директории нет"; exit 1; }

# 10. Арифметика в стиле C. expr мёртв.
# ОСТОРОЖНО: под set -e постфиксный (( COUNT++ )) возвращает код 1, когда старое
# значение было 0, и убивает скрипт. Используй префиксную форму ++COUNT.
COUNT=5
(( ++COUNT ))
(( REMAINING = 100 - COUNT ))


Работа с файлами и потоками

# 11. Подстановка процессов: вывод команд туда, где ждут файлы.
diff -u <(ls -l /dir1) <(ls -l /dir2)

# 12. Here String: строка на stdin без лишнего echo | grep.
grep "critical" <<< "$LOG_DATA"

# 13. Эталонное построчное чтение: -r не трогает бэкслеши, IFS= хранит пробелы.
while IFS= read -r line; do
echo "Строка: $line"
done < config.txt

# 14. Разбивка строки на переменные с локальной подменой разделителя.
USER_DATA="admin:x:1000"
IFS=":" read -r user pass uid <<< "$USER_DATA"

# 15. Совместное перенаправление stdout и stderr одним оператором.
/opt/scripts/deploy.sh &> /var/log/deploy.log


❗️❗️❗️ Нравится формат? Ставь 👍

👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #Bash #DevOps #Scripting #SysAdmin

Читать полностью…

LinuxSkill - Сводки с прода и Шпаргалки

💣 Контейнер остался без сети? Дебажим трафик прямо с хоста

Старый ifconfig давно устарел, а Docker строит сети поверх абстракций ядра, скрывая интерфейсы контейнеров. Понимание iproute2 и неймспейсов netns — граница между джуном и профи. Держи шпаргалку по управлению скрытыми сетями оркестраторов.

Базовое управление интерфейсами хоста

Пакет iproute2 заменяет зоопарк старых сетевых утилит.


# Показать все IP-адреса и интерфейсы (сокращение от 'ip address show').
# Флаг -c включает цветной вывод для удобного чтения.
ip -c a

# Погасить или поднять интерфейс (замена 'ifconfig eth0 down/up').
sudo ip link set dev eth0 down
sudo ip link set dev eth0 up

# Добавить дополнительный IP (алиас) на интерфейс на лету.
sudo ip addr add 10.0.0.5/24 dev eth0

# Удалить IP с интерфейса.
sudo ip addr del 10.0.0.5/24 dev eth0


Маршрутизация и таблица соседей


# Таблица маршрутизации ядра (замена 'route -n').
ip r

# Прописать шлюз по умолчанию.
sudo ip route add default via 192.168.1.1 dev eth0

# Таблица соседей: ARP для IPv4 и NDP для IPv6 (замена 'arp -n').
ip neigh show


Инспекция сетей Docker

На дефолтном bridge контейнеры получают адреса из подсети docker0. Достаём IP без входа внутрь.


# ВАЖНО: .NetworkSettings.IPAddress пуст для user-defined сетей (docker-compose и т.п.).
# Надёжный способ — итерировать по .Networks (работает для ЛЮБОГО типа сети):
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' my_container

# IP всех работающих контейнеров с именами и именем сети:
docker ps -q | while read id; do
name=$(docker inspect -f '{{.Name}}' "$id" | tr -d '/')
ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}} {{end}}' "$id")
echo "$name: $ip"
done


Дебаг неймспейсов: команды ip внутри контейнера с хоста

Docker создаёт netns для каждого контейнера, но не кладёт симлинк в /var/run/netns, откуда его читает ip netns. Восстанавливаем симлинк вручную, чтобы дебажить сеть контейнера прямо с хоста.


# 1. Достаём главный PID контейнера.
export CPID=$(docker inspect -f '{{.State.Pid}}' my_container)

# 2. Создаём стандартный каталог для неймспейсов, если его нет.
sudo mkdir -p /var/run/netns

# 3. Пробрасываем netns контейнера туда, где его найдёт 'ip netns'.
sudo ln -s /proc/$CPID/ns/net /var/run/netns/my_container_ns

# 4. Теперь любые ip-команды выполняются В КОНТЕКСТЕ сети контейнера.
sudo ip netns exec my_container_ns ip a # интерфейсы внутри контейнера
sudo ip netns exec my_container_ns ip r # маршруты внутри контейнера

# 5. Убираем симлинк после отладки (rm, НЕ 'ip netns del' — иначе снесёт сам netns!).
sudo rm /var/run/netns/my_container_ns


Используй iproute2 в связке с сетевыми неймспейсами, чтобы траблшутить аномалии на самом низком уровне.

❗️❗️❗️ Нравится формат? Ставь 👍

👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #Docker #Networking #DevOps #SysAdmin

Читать полностью…

LinuxSkill - Сводки с прода и Шпаргалки

🔪 Режем права контейнеров: 10 неочевидных команд безопасности Docker

Дефолтные настройки Docker оставляют большую поверхность атаки. Взлом приложения внутри контейнера без ограничений легко ведёт к компрометации хоста. Держи 10 параметров, которые жёстко изолируют продакшен.

Контроль привилегий и эскалации

# 1. Тотальный сброс привилегий ядра (Capabilities).
# Сбрасываем все и выдаём только нужную для bind на порты <1024.
docker run --cap-drop ALL --cap-add NET_BIND_SERVICE -d nginx

# 2. Блокировка эскалации через SUID/SGID бинарники (в Dockerfile).
# ВАЖНО: синтаксис '-perm /6000', а НЕ '+6000' (последний давно не работает в GNU find).
RUN find / -xdev -perm /6000 -type f -exec chmod a-s {} \; || true

# 3. Использование gosu вместо sudo в ENTRYPOINT.
# sudo плодит процессы и криво обрабатывает сигналы PID 1. gosu самоустраняется (exec).
exec gosu appuser "$@"


Изоляция файловой системы и ядра

# 4. Корневая ФС только для чтения; для записи монтируем именованный том.
# Атакующий не сможет скачать малварь или переписать скрипты в контейнере.
docker run --read-only --tmpfs /tmp -v /host/data:/app/data:rw -d myapp

# 5. Изоляция тома через SELinux (метка :Z).
# :Z = приватная метка ТОЛЬКО для этого контейнера (:z, строчная — общая для нескольких).
docker run -v /host/secret:/data:Z -d db_service

# 6. Кастомный профиль AppArmor (синтаксис через '=', а не ':').
# Профиль ДО этого нужно загрузить: sudo apparmor_parser -r -W /etc/apparmor.d/custom-nginx
docker run --security-opt apparmor=custom-nginx-profile -d nginx


Защита от отказа в обслуживании (DoS)

# 7. Лимит файловых дескрипторов (по дефолту на systemd-хостах ~1048576).
# Режет атаки, открывающие тысячи соединений/файлов.
docker run --ulimit nofile=1024:2048 -d backend_app

# 8. Жёсткий лимит RAM + запрет свопа.
# memory-swap = memory (256m=256m) означает СВОП ОТКЛЮЧЁН: утечка не выжрет своп хоста.
docker run -m 256m --memory-swap 256m -d heavy_service


Сеть и аутентичность образов

# 9. Отключение межконтейнерного обмена (ICC) — через daemon.json, НЕ /etc/default/docker.
# Файл /etc/docker/daemon.json:
# { "icc": false, "iptables": true }
# Затем: sudo systemctl restart docker
# (старый DOCKER_OPTS в /etc/default/docker на systemd-хостах игнорируется)

# 10. Принудительная проверка подписей образов (Content Trust).
# Блокирует pull/run образов без валидной криптоподписи.
export DOCKER_CONTENT_TRUST=1
docker pull myorg/backend:latest


Интегрируй эти параметры в свои Compose-манифесты и пайплайны. Безопасность начинается с принципа наименьших привилегий.

❗️❗️❗️ Нравится формат? Ставь 👍
👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #Docker #Security #DevOps #SysAdmin

Читать полностью…

LinuxSkill - Сводки с прода и Шпаргалки

🔧 Укрощаем bash: 15 железобетонных функций для профи

Самописные функции в конфигурации оболочки экономят часы рутины, но часто пишутся "на коленке" и падают с синтаксическими ошибками, если забыть передать им аргумент. Я собрал 15 убойных функций для твоего конфига и добавил в них жесткие проверки и значения по умолчанию. Забирай в продакшен.

Навигация и управление файлами


# 1. Создать директорию и сразу в нее перейти
mkcd() {
mkdir -p "$1" && cd "$1"
}

# 2. Подняться на N уровней вверх. Если аргумент не передан, поднимаемся на 1 (защита от syntax error)
up() {
local d=""
local limit="${1:-1}"
for ((i=1; i<=limit; i++)); do d+="../"; done
cd "$d"
}

# 3. Быстрый поиск файла по имени в текущей директории
ff() {
find . -type f -iname "*$1*"
}

# 4. Быстрый поиск директории по имени
fd() {
find . -type d -iname "*$1*"
}

# 5. Узнать размер директории. Если путь не передан, считаем текущую (.)
dirsize() {
du -sh "${1:-.}"
}


Работа с процессами и историей

# 6. Найти процесс, отсекая из вывода сам grep
psg() {
ps aux | grep -i "$1" | grep -v grep
}

# 7. Посмотреть N последних введенных команд (по умолчанию 10)
h() {
history | tail -n "${1:-10}"
}

# 8. Быстрый поиск по истории команд
hg() {
history | grep "$1"
}


Сеть и порты

# 9. Поднять HTTP-сервер в текущей папке (по умолчанию порт 8000)
serve() {
python3 -m http.server "${1:-8000}"
}

# 10. Узнать свой внешний IP-адрес
myip() {
curl -s ifconfig.me
}

# 11. Узнать IP-адрес нужного домена
ipinfo() {
dig +short "$1"
}

# 12. Показать все открытые слушающие порты
ports() {
ss -tuln
}


Система и безопасность

# 13. Полная очистка терминала вместе с буфером прокрутки
cls() {
clear && printf '\e[3J'
}

# 14. Универсальная распаковка архива с проверкой существования файла
extract() {
if [ -f "$1" ]; then
case "$1" in
*.tar.bz2|*.tbz2) tar xjf "$1" ;;
*.tar.gz|*.tgz) tar xzf "$1" ;;
*.bz2) bunzip2 "$1" ;;
*.rar) unrar x "$1" ;;
*.gz) gunzip "$1" ;;
*.tar) tar xf "$1" ;;
*.zip) unzip "$1" ;;
*.7z) 7z x "$1" ;;
*) echo "Неизвестный архив" ;;
esac
else
echo "Файл '$1' не найден"
fi
}

# 15. Безопасный rm: защита от пустого вызова и регистронезависимое подтверждение (Y/y)
rm() {
if [ -z "$1" ]; then
command rm
return
fi
ls -FCsd -- "$@"
read -p 'Удалить безвозвратно? [y/N] ' ans
if [[ "$ans" =~ ^[Yy]$ ]]; then
command rm -rf -- "$@"
fi
}


Все конструкции используют конструкцию ${1:-значение}, которая спасает bash от падения при пустых переменных. Добавь нужные блоки в свой файл конфигурации и выполни команду source ~/.bashrc для применения изменений.

❗️❗️❗️ Нравится формат? Ставь 👍

👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #Bash #CLI #DevOps #Bashrc

Читать полностью…

LinuxSkill - Сводки с прода и Шпаргалки

🎯 Инкрементные бэкапы без костылей: хардкорная шпаргалка по tar -g

Ежедневное создание полных архивов убивает дисковое пространство и перегружает подсистему ввода-вывода. Показываю, как собирать только измененные файлы и правильно отслеживать удаления, не копируя терабайты лишних данных.

Настрой инкрементное копирование, чтобы радикально снизить нагрузку на дисковую подсистему серверов.

❗️❗️❗️ Нравится формат? Ставь 👍

👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #Bash #Backup #Tar #DevOps #SysAdmin

Читать полностью…

LinuxSkill - Сводки с прода и Шпаргалки

📦 Ломаются зависимости при unshare? Настраиваем изоляцию как профи

Ошибки libc.so возникают, когда ты меняешь корень через chroot в пустую файловую систему без библиотек. Оставим ФС хоста на месте и изолируем только namespaces: все бинарники останутся доступны, а процессы и сеть будут в глухой песочнице.

❗️❗️❗️ Нравится формат? Ставь 👍

👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #Namespaces #Containers #DevOps #SysAdmin

Читать полностью…

LinuxSkill - Сводки с прода и Шпаргалки

🔧 Забудь про сотни пайпов: хардкорная фильтрация логов через grep -E

Базовый синтаксис grep (BRE) заставляет экранировать каждый спецсимвол, превращая сложные фильтры в нечитаемую кашу из слешей. Расширенные регулярные выражения (ERE) через параметр -E позволяют использовать группировки и квантификаторы напрямую. Классическая утилита egrep устарела (deprecated), поэтому на современных серверах всегда используй grep -E.


❗️❗️❗️ Нравится формат? Ставь 👍

👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #Bash #Grep #DevOps #SysAdmin

Читать полностью…

LinuxSkill - Сводки с прода и Шпаргалки

🔪 Забудь про grep: ультимативная шпаргалка по journalctl

Обычные текстовые логи отнимают время. Переходи на journalctl, чтобы находить причины сбоев мгновенно по бинарным метаданным, без лишнего мусора.

❗️❗️❗️ Нравится формат? Ставь 👍

👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #Systemd #Journalctl #DevOps #SysAdmin

Читать полностью…

LinuxSkill - Сводки с прода и Шпаргалки

⏱ Таймеры systemd: продвинутая альтернатива cron
Они требуют чуть больше строчек, чем crontab, но из коробки дают защиту от наслаивания процессов, контроль зависимостей и мощное логирование в journald.

❗️❗️❗️ Нравится формат? Ставь 👍

👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #Systemd #DevOps #Timers #SysAdmin

Читать полностью…

LinuxSkill - Сводки с прода и Шпаргалки

💣 Cron для сеньоров: защита от дублей и правильные логи
Держи концентрат боевых примеров для crontab, которые нужны на реальном продакшене.

❗️❗️❗️ Нравится формат? Ставь 👍

👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #Cron #DevOps #Bash #SysAdmin

Читать полностью…

LinuxSkill - Сводки с прода и Шпаргалки

🧨 Твои скрипты падают на проде? 43 команды Bash, которые спасут твою репутацию

Скрипт отработал с ошибкой, но не остановился и удалил половину нужных файлов? Или CI/CD пайплайн споткнулся о пустую переменную? Я отжал воду из огромных справочников и оставил ровно 50 самых хардкорных и важных конструкций Bash, которые жизненно необходимы.

1. Безопасность и запуск (Strict Mode)
Эти настройки — стандарт де-факто для любых production-скриптов. Они отлавливают ошибки на раннем этапе.

# Указать интерпретатор (лучшая практика переносимости)
#!/usr/bin/env bash

# Сделать скрипт исполняемым
chmod +x script.sh

# "Strict Mode" (выход при ошибке, ошибке переменной или в пайплайне)
set -euo pipefail

# Выйти немедленно при ошибке
set -e

# Режим отладки (выводить команды перед выполнением)
set -x



2. Продвинутая работа с переменными
Защита от пустых значений, которые могут сломать автоматизацию.

# Присвоить значение (строго без пробелов вокруг =)
VAR=value

# Безопасное чтение с кавычками (предотвращает word splitting)
"$VAR"

# Использовать по умолчанию, если переменная не задана (важно для Docker)
${VAR:-default}

# Назначить значение по умолчанию, если VAR не задана
${VAR:=default}

# Выйти с ошибкой, если переменная не задана (failsafe для деплоя)
${VAR:?error msg}

# Сделать переменную доступной только для чтения (константа)
readonly VAR

# Экспортировать переменную для дочерних процессов
export VAR



3. Системные переменные
Идентификаторы процессов и аргументы функций.

# Имя скрипта
$0

# Позиционные параметры (аргументы 1-9)
$1..$9

# Количество переданных аргументов
$#

# Все аргументы безопасно как отдельные слова
$@

# Статус выхода последней команды (0 - успех, иное - ошибка)
$?

# PID текущего процесса shell
$$



4. Парсинг строк (без вызова awk/sed)
Молниеносные встроенные манипуляции с путями и текстом.

# Удалить самое короткое совпадение паттерна с начала
${VAR#pattern}

# Удалить самое короткое совпадение с конца (удобно для расширений файлов)
${VAR%pattern}

# Заменить все вхождения подстроки
${VAR//old/new}

# Перевести все символы в нижний регистр
${VAR,,}



5. Условия и мощные проверки
Используй `[[ ]]` вместо старого `[ ]` — это безопаснее и поддерживает регулярные выражения.

# Проверить существование файла и вывести результат
if [[ -f "file.txt" ]]; then echo "exists"; fi

# Проверка по регулярному выражению
=~

# Конструкция case (идеально для стартовых скриптов systemd)
case "$1" in start) echo "Starting";; stop) echo "Stopping";; *) echo "Usage: $0 {start|stop}";; esac

# Файл существует и является обычным
-f file

# Файл существует и является директорией
-d file

# Строка пустая
-z string

# Строка не пустая
-n string

# Строковое равенство и неравенство
==
!=

# Числовое равенство и неравенство
-eq
-ne



6. Массивы и словари
Незаменимо для перебора IP-адресов, списков серверов и портов.

# Объявить индексированный массив
arr=(a b c)

# Получить все элементы массива
${arr[@]}

# Узнать количество элементов в массиве
${#arr[@]}

# Объявить ассоциативный массив (словарь)
declare -A map

# Добавить значение по ключу
map[key]="value"



7. Математика, Ввод/Вывод и Сигналы
Форматирование вывода для дашбордов и правильная очистка мусора за скриптом.

# Арифметика: сложение
$((a + b))

# Арифметическое присваивание
let "a += 5"

# Прочитать строку в массив
read -r -a items <<< "a b c"

# Форматированный вывод (надежнее чем echo)
printf "Name: %s, Age: %d\n" "$name" "$age"

# Многострочный ввод (Here document) для генерации конфигов
cat <<EOF
Lines of text go here.
Variables like $HOME are expanded.
$ EOF

# Завершить скрипт с кодом успеха
exit 0

# Завершить скрипт с кодом ошибки
exit 1

# Выполнить очистку (например, удалить лок-файл) при любом выходе
trap ' rm -f /tmp/mylock' EXIT


Теперь твой код готов к нагрузкам. Сохраняй шпаргалку, чтобы не плодить костыли, и применяй правильный синтаксис!


❗️❗️❗️ Нравится формат? Ставь 👍

👉 Рубрика: #шпаргалка@LinuxSkill
⭐️ Зеркало в MAX

#Linux #Bash #DevOps #Sysadmin #ShellScripting #CLI

Читать полностью…

LinuxSkill - Сводки с прода и Шпаргалки

🚨 Останови захват root через кэш. Защищаем сервер от Fragnesia

Не успели мы выдохнуть после патчей для Dirty Frag, как исследователь William Bowling из команды V12 выкатил продолжение — уязвимость «Fragnesia» (CVE-2026-46300). Давай разберем механику угрозы и посмотрим на официальные методы защиты.

Новый баг — это непреднамеренный побочный эффект от патчей, которыми ранее закрывали прошлую дыру Dirty Frag. Проблема находится в подсистеме ядра XFRM, отвечающей за обработку ESP-in-TCP (поддержка IPsec).

Опасность Fragnesia кроется в трех факторах:
- Логическая ошибка позволяет произвольно записывать байты в кэш страниц ядра (page cache) для файлов, доступных только для чтения.
- Опубликованный эксплойт успешно модифицирует бинарник /usr/bin/su прямо в оперативной памяти, открывая root-оболочку без изменения файла на диске.
- Эксплойт абсолютно предсказуем. В отличие от старых багов вроде Dirty COW, он вообще не полагается на состояния гонки (Race Conditions), что делает его сверхнадежным.

Такие вендоры, как Ubuntu, RHEL, Debian, SUSE и Amazon Linux, уже оценивают масштабы проблемы по всем поддерживаемым версиям ядер. Microsoft предупреждает: эксплойт позволяет модифицировать любой читаемый юзером файл, включая /etc/passwd

Что делать прямо сейчас? Инженеры уже подготовили патч из двух строк для файла skbuff.c, но пока он едет в стабильные ветки дистрибутивов (Ubuntu, Debian, RHEL, SUSE и др.), разработчики AlmaLinux выпустили официальную рекомендацию по защите:

«Если твой сервер не использует IPsec/ESP, жесткое отключение этих модулей ядра поможет срезать вектор атаки до установки финального патча. Следи за пакетным менеджером и обновляйся.»


👉 Патч тут

❗️❗️❗️ Нравится формат? Ставь 👍

👉 Рубрика: #News@LinuxSkill
⭐️ Зеркало в MAX

#Linux #Security #Fragnesia #CVE #Root

Читать полностью…

LinuxSkill - Сводки с прода и Шпаргалки

🚨 Останови кражу root-файлов без перезагрузки сервера

Любой локальный пользователь без привилегий прямо сейчас может прочитать твои приватные SSH-ключи и хеши паролей из /etc/shadow. Давай закроем брешь CVE-2026-46333 на уровне ядра строго по рекомендациям Red Hat.

Ошибка кроется в функции __ptrace_may_access(). Во время завершения процесса ядро освобождает память до закрытия файловых дескрипторов. Возникает состояние гонки. Успешная эксплуатация опирается на использование вызова pidfd_getfd(2). Под ударом RHEL 8, 9, 10 и зависимые продукты (RHEL CoreOS, OpenShift, OpenStack, Red Hat Virtualization).

Официальный бюллетень Red Hat не предоставляет готовых bash-скриптов, но описывает два варианта изоляции угрозы:

1. Option 1: Admin-only scope (Безопасный режим)
Необходимо установить ptrace_scope в значение 2. Это ограничит ptrace только для процессов с правами CAP_SYS_PTRACE и заблокирует известные векторы атак.
Важно: это не позволит обычным пользователям использовать отладчики (gdb, strace -p) для своих собственных процессов.

2. Option 2: Most restrictive scope (Радикальный режим)
Необходимо установить ptrace_scope в значение 3. Это полностью отключит любые операции ptrace для всех, включая root.
Важно: сломаются любые инструменты мониторинга, опирающиеся на ptrace. Требуется жесткое тестирование.

Для отката любого из этих вариантов (Mitigation removal) вендор дает следующую прямую инструкцию:

delete /etc/sysctl.d/ptrace-restrict.conf and run sysctl --system

Помни, что изменения ptrace блокируют только известные эксплойты. Полностью уязвимость закроет только официальный патч ядра.


❗️❗️❗️ Нравится формат? Ставь 👍

👉 Рубрика: #News@LinuxSkill
⭐️ Зеркало в MAX

#Linux #Security #CVE #RHEL #Root

Читать полностью…

LinuxSkill - Сводки с прода и Шпаргалки

🚀 Systemd + Bash: Мониторинг зависшего PHP-FPM за 5 строк кода

Привет, повелитель терминала!

Твой php-fpm начал зависать в любой момент и перестал отвечать на запросы? Это происходит из-за исчерпания ресурсов или процессов, ушедших в непрерываемое ожидание.

Вместо ручного поиска и убийства PID, давай настроим автоматический скрипт, который решит эту проблему за тебя.

📌 Авто-чистка зависших FPM

Этот скрипт ищет дочерние процессы php-fpm в состоянии D и принудительно завершает их, чтобы твой пул восстановился, используя базовые принципы Bash-сценариев.

# Ищем процессы FPM, застрявшие в D-состоянии
STUCK_PIDS=$(ps -o pid=,state= -C php-fpm | grep D | awk '{print $1}')

if [ -n "$STUCK_PIDS" ]; then
# Найдено: принудительно убиваем зависшие процессы (SIGKILL)
# Используй kill -9 только в крайних случаях!
echo "$STUCK_PIDS" | xargs kill -9

# Перезапускаем сервис для гарантированного восстановления
systemctl restart php-fpm
fi


💡 Фишка: Ты можешь запускать этот скрипт через cron или systemd.timer, чтобы автоматизировать траблшутинг. Это гарантирует стабильность твоего сервиса.

#Linux #Bash #DevOps #автоматизация #мониторинг

Читать полностью…

LinuxSkill - Сводки с прода и Шпаргалки

🎯 Настоящий хардкор. Автоматизация рутины в vim без плагинов

Правишь сотни строк логов и конфигов руками? Использование vim как «блокнота» — преступление против твоего времени. Показываю встроенные механизмы: макросы, фильтры, внешние команды — чтобы редактор делал рутину за тебя.

Макросы (запись и воспроизведение рутины)

Vim умеет записать последовательность нажатий в именованный регистр и многократно её повторить.

# Начать запись макроса в регистр 'a'
qa
# ... выполняем любые действия редактирования ...
# Остановить запись
q
# Воспроизвести макрос из 'a' 50 раз подряд
50@a
# Повторить макрос до конца файла (не считая строки вручную):
:%normal @a


Глобальная замена с контекстом

Команда :g находит строки по шаблону и выполняет в них замену или другую команду.

# В строках с "FIXME" заменить "timeout" на "resolved"
:g/FIXME/s/timeout/resolved/g


Интеграция с внешними bash-утилитами

Текст из буфера можно прогнать через внешнюю команду, а вывод вставить на место старого.

# Отсортировать строки от текущей до конца файла через sort
:.,$!sort
# Заменить весь буфер выводом awk (печатаем вторую колонку)
:%!awk '{print $2}'


Чтение вывода консоли прямо в текст

# Вставить список файлов на строку НИЖЕ курсора
:r !ls -l
# Вставить текущую дату и время
:r !date


Собственные сокращения (аббревиатуры)

Разворачиваются в режиме вставки, когда вводишь их как отдельное слово.

# "imrc" + пробел/Enter развернётся в полную фразу.
# Лучше iabbrev — срабатывает ТОЛЬКО в режиме вставки (ab цепляет и командную строку):
:iabbrev imrc International Materials Research Center


Переназначение клавиш (шорткаты)

Для частых действий вешаем свою комбинацию. Используем nnoremap (нерекурсивный маппинг только для Normal-режима) и свободную клавишу — не затирай встроенные.

# Безопасно: пробел-лидер под "удалить слово под курсором и вставить из регистра".
# <leader> по умолчанию '\'. daw — delete-a-word, "0p — вставить из нулевого регистра.
:nnoremap <leader>d daw"0p


Добавь нужные аббревиатуры и маппинги в ~/.vimrc, чтобы они подхватывались при каждом запуске. Перестань делать рутину руками.

❗️❗️❗️ Нравится формат? Ставь 👍

👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #Vim #DevOps #SysAdmin #Automation

Читать полностью…

LinuxSkill - Сводки с прода и Шпаргалки

☠️ Забыл флаг -a в usermod и сломал доступ? Учимся управлять группами

Создание учёток кажется банальщиной, пока кто-то не затрёт списки групп кривым ключом или не оставит доступ уволенному подрядчику. Держи 15 команд для тотального контроля пользователей на проде.

Создание и системные учётки


# 1. Эталонное создание пользователя (папка, оболочка, доп. группы).
# ВАЖНО: 'wheel' есть в RHEL/Fedora/Arch; в Debian/Ubuntu для sudo используй группу 'sudo'.
# Группа 'docker' появляется только после установки Docker — иначе useradd упадёт.
sudo useradd -m -s /bin/bash -G docker,sudo ivanov

# 2. Системный демон (без входа; -r не создаёт каталог, home лучше задать явно).
sudo useradd -r -s /usr/sbin/nologin -d /nonexistent nginx_worker

# 3. Дефолтные скелеты: содержимое /etc/skel копируется в /home новичку при -m.
ls -la /etc/skel/


Опасные игры с группами


# 4. Безопасное добавление в группу (-a обязательно, иначе -G затрёт все старые группы!)
sudo usermod -aG developers petrov

# 5. Исключение пользователя из одной конкретной группы (порядок: сначала USER, потом GROUP)
sudo gpasswd -d petrov developers

# 6. Запустить НОВЫЙ шелл с другой основной группой (выход — exit). Группу указывать обязательно.
newgrp developers

# 7. Создание системной группы с кастомным GID
sudo groupadd -r -g 555 appgroup


Пароли и жёсткие блокировки


# 8. Заставить сменить пароль при первом входе (last change = 0 => пароль просрочен).
sudo chage -d 0 ivanov

# 9. Жёсткая блокировка учётки (ставит ! перед хешем в /etc/shadow).
sudo usermod -L ivanov

# 10. Быстрая разблокировка (убирает ! из /etc/shadow).
sudo usermod -U ivanov

# 11. Отключение учётки по дате YYYY-MM-DD (идеально для внешних подрядчиков).
sudo usermod -e 2026-12-31 contract_user


Аудит и чистое удаление


# 12. Проверка passwd/shadow на синтаксис. Флаг -r = только чтение (ничего не меняет).
sudo pwck -r

# 13. Проверка файла групп на целостность (тоже -r для безопасного аудита).
sudo grpck -r

# 14. Чтение учёток через NSS (видит и локальных, и LDAP/AD пользователей).
getent passwd petrov

# 15. Полное удаление юзера вместе с домашней директорией и почтовым спулом.
sudo userdel -r ivanov


Никогда не забывай -a в связке с -G и прогоняй pwck после ручной правки системных файлов.

❗️❗️❗️ Нравится формат? Ставь 👍

👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #Security #SysAdmin #DevOps #Bash

Читать полностью…

LinuxSkill - Сводки с прода и Шпаргалки

🔧 Хватит писать как джун. 15 хардкорных идиом Bash для профи

Bash-скрипты кажутся простыми, пока не начинают молча ломать серверы из-за неэкранированных пробелов или проигнорированных ошибок в конвейерах. Держи 15 идиом, которые выведут твои скрипты на уровень Senior.

Жёсткая защита и отладка


# 1. Неофициальный строгий режим bash.
# Падение при первой ошибке (-e), при обращении к необъявленной переменной (-u), и ошибка внутри конвейера не проглатывается (pipefail).
set -euo pipefail

# 2. Массив PIPESTATUS.
# В конвейере обычный $? покажет статус только ПОСЛЕДНЕЙ команды.
# PIPESTATUS хранит коды всех команд — ОБРАЩАЙСЯ ПО ИНДЕКСУ: ${PIPESTATUS[0]}, [1]...
cat /etc/passwd | grep -q root
echo "Статус cat: ${PIPESTATUS[0]}, статус grep: ${PIPESTATUS[1]}"

# 3. Безопасная очистка через trap.
# Временные файлы удалятся при любом выходе, включая Ctrl+C.
TMP_FILE=$(mktemp)
trap 'rm -f "$TMP_FILE"' EXIT


Подстановки переменных (без sed и awk)


# 4. Значение по умолчанию, если TARGET не задана или пуста.
cd "${TARGET:-/tmp}"

# 5. Глобальная замена подстрок в памяти (все вхождения).
LOG="system error, network error"
echo "${LOG//error/warning}"

# 6. Косвенные ссылки: читаем переменную, имя которой лежит в другой переменной.
REAL_VAR="SecretData"
POINTER="REAL_VAR"
echo "${!POINTER}"

# 7. Обрезка префикса/суффикса (замена basename и dirname).
FILEPATH="/var/log/syslog.tar.gz"
echo "${FILEPATH##*/}" # всё до последнего слеша срезано: syslog.tar.gz
echo "${FILEPATH%/*}" # всё после последнего слеша срезано: /var/log


Логика и структуры


# 8. Регулярки прямо в условии (только в [[ ... ]], регулярку справа НЕ кавычим).
if [[ $1 =~ ^[0-9]+$ ]]; then
echo "Аргумент состоит только из цифр"
fi

# 9. Группировка команд в ТЕКУЩЕМ процессе через { ... } (переменные сохраняются).
[[ -d /tmp/app ]] || { echo "Каталог не найден"; exit 1; }

# 10. Встроенная арифметика вместо мёртвого expr.
# ОСТОРОЖНО: под 'set -e' выражение (( x++ )) возвращает код 1, когда старое значение 0, и убивает скрипт. Используй префиксную форму ++COUNT или добавляй '|| true'.
COUNT=5
(( ++COUNT ))
(( REMAINING = 100 - COUNT ))


Потоки и дескрипторы


# 11. Подстановка процессов: вывод команд туда, где ждут ИМЕНА файлов.
diff -u <(ls -l /dir1) <(ls -l /dir2)

# 12. Here String: строка на stdin без лишнего процесса echo.
grep "critical" <<< "$LOG_DATA"

# 13. Правильное построчное чтение.
# -r запрещает трактовать бэкслеши, пустой IFS= сохраняет ведущие пробелы.
while IFS= read -r line; do
echo "Прочитана строка: $line"
done < config.txt

# 14. Парсинг строки с локальной подменой IFS (только для этой команды read).
USER_INFO="root:x:0:0:root:/root:/bin/bash"
IFS=":" read -r user pass uid gid desc home shell <<< "$USER_INFO"

# 15. Совместное перенаправление stdout и stderr одним оператором.
/opt/scripts/backup.sh &> /var/log/backup.log


Внедряй эти идиомы, чтобы скрипты не зависели от внешних утилит и не падали на пустом месте.

❗️❗️❗️ Нравится формат? Ставь 👍

👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #Bash #DevOps #Scripting #SysAdmin

Читать полностью…

LinuxSkill - Сводки с прода и Шпаргалки

💀 Твой сервер светит реальным IP? Закрываем дыру через VPS и WAF

Оставлять реальный IP сервера открытым — верный путь к взлому. Держи два хардкорных и бесплатных способа спрятать бэкенд и отбить атаки.

Вариант 1: Туннель Netbird + Nginx на дешёвой VPS

Покупаем самую слабую внешнюю VPS, поднимаем на ней Netbird и Nginx. Реальный сервер прячется хоть за 1000 NAT в домашнем Proxmox. Внешняя VPS принимает трафик и прокидывает его в защищённый туннель.

# /etc/nginx/sites-available/backend  (проверено парсером nginx)
upstream backend {
server 100.64.0.5:8080; # IP Proxmox-контейнера внутри сети Netbird
keepalive 32;
}

server {
listen 80;
server_name myapp.ru;

location / {
proxy_pass http://backend;
proxy_http_version 1.1;

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

# поддержка WebSocket
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

proxy_connect_timeout 60s;
proxy_read_timeout 60s;
}
}


Активация и проверка конфига перед перезапуском:

sudo ln -s /etc/nginx/sites-available/backend /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx # nginx -t = обязательная проверка синтаксиса


Вариант 2: Внешняя VPS + Safeline WAF

Перед приложением ставится комбайн Safeline: фильтрует трафик, режет ботов, спасает от SQLi, XSS, Command injection, Path traversal и RCE. Работает как reverse-proxy на движке Tengine с семантическим анализом.

Быстрый старт Safeline одной командой (актуальный официальный установщик):

# manager.sh сам поставит Docker, скачает образы и поднимет весь стек
bash -c "$(curl -fsSLk https://waf.chaitin.com/release/latest/manager.sh)" -- --en


Ручной деплой (официальный способ — compose скачивается, а не пишется руками):

Стек состоит из 6 контейнеров (postgres, fvm, detector, mgt, mario, tengine), поэтому compose берём готовый и настраиваем через .env:

# 1. Директория (нужно ≥5 ГБ)
sudo mkdir -p /data/safeline && cd /data/safeline

# 2. Официальный docker-compose (руками его собрать нельзя — сервисов много и они связаны)
sudo wget https://waf.chaitin.com/release/latest/compose.yaml

# 3. Файл окружения (пароль обязателен, иначе postgres не стартует)
sudo tee .env > /dev/null << 'EOF'
SAFELINE_DIR=/data/safeline
IMAGE_TAG=latest
MGT_PORT=9443
POSTGRES_PASSWORD=CHANGE_ME_strong_password
SUBNET_PREFIX=172.22.222
IMAGE_PREFIX=chaitin
ARCH_SUFFIX=
RELEASE=
REGION=-g
EOF

# 4. Запуск
sudo docker compose up -d

# 5. Получить логин/пароль админа
sudo docker exec safeline-mgt resetadmin


Панель управления: https://<IP-твоей-VPS>:9443

⚠️ На ARM-серверах меняй ARCH_SUFFIX=-arm; Personal Edition на ARM не работает — нужна Pro-лицензия.

Внедряй эти подходы, чтобы не только анализировать трафик, но и на 100% скрывать IP своих приложений.

❗️❗️❗️ Нравится формат? Ставь 👍
👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #Security #WAF #Docker #DevOps

Читать полностью…

LinuxSkill - Сводки с прода и Шпаргалки

💀 Твой демон падает из-за изоляции? Учим AppArmor работать правильно

Использование aa-disable или teardown для неработающего демона полностью снимает MAC-изоляцию на продакшене. Вместо выгрузки защиты мы переведем профиль в режим обучения, соберем реальные пути и вернем жесткий контроль. Помни: AppArmor привязывает правила к абсолютному пути бинарника, а не к меткам типов, как это делает SELinux.

❗️❗️❗️ Нравится формат? Ставь 👍

👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #AppArmor #Security #Ubuntu #DevOps

Читать полностью…

LinuxSkill - Сводки с прода и Шпаргалки

🎯 Твой DROP пропускает пакеты? Исправляем фатальную ошибку лимитов nftables

Stateless-фаерволы сверяют каждый пакет со всем списком правил, сжигая ресурсы. Stateful-фаервол с conntrack помнит сессии и пропускает 99% трафика первым же правилом. Показываю, как написать эталонный конфиг и не попасть в ловушку лимитирования, из-за которой часть мусорного трафика пробивает твою защиту.

Перед применением policy drop без разрешающего правила SSH ты заблокируешь сам себя — сначала всегда прописывай свой доступ. Всегда держи второй открытый сеанс для отката и не забудь сделать systemctl enable nftables, чтобы защита пережила перезагрузку.

❗️❗️❗️ Нравится формат? Ставь 👍

👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #Security #nftables #Firewall #DevOps

Читать полностью…

LinuxSkill - Сводки с прода и Шпаргалки

🕰 Твои скрипты падают в systemd? Идеальный конфиг .timer

Демоны systemd работают с сильно урезанным окружением $PATH. Из-за этого вызовы обычных утилит внутри сервисов часто падают без видимых причин. Показываю, как написать железобетонный конфиг таймера, защититься от шторма нагрузки и отловить синтаксические ошибки еще до деплоя.

❗️❗️❗️ Нравится формат? Ставь 👍

👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #Systemd #DevOps #Timers #SysAdmin

Читать полностью…

LinuxSkill - Сводки с прода и Шпаргалки

💀 Забудь про тормоза strace: мониторим процессы через eBPF

Привычный strace безжалостно тормозит приложения, прерывая их на каждом системном вызове. Сейчас покажу, как фильтровать события прямо в ядре через bcc-tools, ловить короткоживущие процессы и отлаживать I/O с нулевым оверхедом.

❗️❗️❗️ Нравится формат? Ставь 👍

👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #eBPF #BCC #DevOps #Security

Читать полностью…

LinuxSkill - Сводки с прода и Шпаргалки

💣 find -delete сносит всё? Исправляем фатальные ошибки зачистки

Наивный конвейер с xargs rm легко ломается о пробелы и кавычки в именах файлов, удаляя нужные данные. Показываю, как безопасно зачищать систему и работать со списками файлов, не боясь кривых имен.

❗️❗️❗️ Нравится формат? Ставь 👍

👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #Bash #xargs #rm #find

Читать полностью…

LinuxSkill - Сводки с прода и Шпаргалки

🛡 Железобетонный SSH: харденинг без ошибок
Внедряй эти параметры в свои пайплайны, и твой сервер станет неприступной крепостью.

❗️❗️❗️ Нравится формат? Ставь 👍

👉 Рубрика: #шпаргалка@LinuxSkill
#Linux #SSH #Security #Hardening #SysAdmin #DevOps

Читать полностью…

LinuxSkill - Сводки с прода и Шпаргалки

🛡️ SSH-туннель отваливается? Вечные соединения за секунду

Обычный SSH-туннель или прокси падает при малейшем сбое сети, оставляя тебя без связи. Утилита autossh решает эту проблему: она оборачивает SSH-соединение, мониторит его состояние и автоматически перезапускает при обрыве.

Ниже подробная шпаргалка, как поднять вечные туннели для любых задач.

1. Поднимаем постоянный локальный SSH-туннель (Local port forward)
Пробрасываем удаленный порт 80 на локальный 8080 с портом мониторинга 20000
autossh -M 20000 -N -L 8080:localhost:80 user@remote

2. Туннель без отдельного порта мониторинга
Полезно, если порты мониторинга закрыты (полагается на ServerAliveInterval)
autossh -M 0 -N -L 8080:localhost:80 user@remote

3. Поднимаем вечный обратный туннель (Reverse port forward)
Пробрасываем наш локальный порт 80 на удаленный порт 8080
autossh -M 20000 -N -R 8080:localhost:80 user@remote

4. Запуск в фоновом режиме
Ключ -f уводит процесс в фон сразу после аутентификации
autossh -f -M 20000 -N -L 8080:localhost:80 user@remote

5. Создаем неразрывный SOCKS-прокси
autossh -M 20000 -N -D 8080 user@remote

6. Управление через переменные окружения
Включаем отладку и задаем задержку перед первой проверкой (по умолчанию 30 сек)
AUTOSSH_DEBUG=1 AUTOSSH_GATETIME=10 autossh -M 20000 -N -D 8080 user@remote

Настрой это один раз, и твои пробросы портов больше никогда не умрут от смены IP или перезагрузки роутера. Проверь свои туннели прямо сейчас.


❗️❗️❗️ Нравится формат? Ставь 👍

👉 Рубрика: #шпаргалка@LinuxSkill

#SSH #Autossh #Linux #DevOps #SysAdmin

Читать полностью…

LinuxSkill - Сводки с прода и Шпаргалки

🚨 Экстренно меняем токены: атака Megalodon ломает GitHub-репозитории

Масштабная автоматизированная supply-chain атака Megalodon всего за шесть часов поразила более 5500 репозиториев на GitHub. Злоумышленники внедряют вредоносные рабочие процессы в CI/CD и сливают критичные секреты инфраструктуры. Разберем механику взлома и официальные шаги по защите.

Аналитики Hudson Rock подтвердили: источником заражения стали обычные инфостилеры на рабочих компьютерах разработчиков. Украденные учетные данные позволили хакерам получить доступ к репозиториям.

Как действует эксплойт:
- Атакующие используют поддельные имена авторов, маскируясь под легитимных ботов (build-bot, auto-ci, ci-bot, pipeline-bot).
- В GitHub Actions внедряется вредоносный workflow с полезной нагрузкой на bash в кодировке Base64.
- Скрипт собирает переменные окружения, ключи AWS, SSH, токены Kubernetes, Docker, Vault и Terraform, после чего отправляет их на C2-сервер атакующих.

Опасность в том, что атака активируется автоматически при каждом пуше (вариант SysDiag) или ждет ручного запуска через workflow_dispatch (вариант Optimize-Build), гарантируя хакерам максимальный охват.

Поскольку проблема кроется в утечке доступов, готовых bash-скриптов для очистки нет — зараженные пайплайны нужно вычищать вручную. Платформа npm уже начала принудительно аннулировать скомпрометированные ключи и выпустила официальную инструкцию по сдерживанию угрозы:


Официальные меры по защите от атаки в экосистеме npm
1. Немедленно аннулировать гранулярные токены доступа с правами на запись, которые обходят двухфакторную аутентификацию (2FA).
2. Перевести публикацию пакетов на механизм Trusted Publishing, чтобы снизить зависимость от статических токенов.

Машина разработчика с трояном — это прямой бэкдор в твой продакшен. Проверь историю коммитов на предмет странных ботов и отзови старые токены прямо сегодня.

❗️❗️❗️ Нравится формат? Ставь 👍

👉 Рубрика: #News@LinuxSkill
⭐️ Зеркало в MAX

#GitHub #Security #CICD #Megalodon #DevOps

Читать полностью…

LinuxSkill - Сводки с прода и Шпаргалки

🧠 Закипел мозг от конфигов? 10 скрытых игр прямо в терминале

Устал парсить бесконечные логи и ждать завершения долгого деплоя? Есть легальный способ выдохнуть, не сворачивая любимую консоль. Держи шпаргалку по 10 олдскульным играм, которые запускаются прямо в терминале.

1. Знаменитая головоломка 2048.

$ 2048

2. Классический сапёр (mines)

$ nbmines
$ freesweep



3. Текстовое приключение (adventure).

$ adventure


4. Лунный багги (moon-buggy).

$ moon-buggy


5. Классическая ролевая игра (angband).

$ angband


6. Подземелья Мории (moria).

$ moria


7. Симулятор авиадиспетчера (atc).

$ atc


8. Легендарный рогалик (nethack).

$ nethack-console


9. Нарды в консоли (backgammon).

$ backgammon


10. Космические захватчики (ninvaders).

$ ninvaders

Сохрани этот пост, чтобы быстро переключиться и дать мозгу отдохнуть, пока шеф думает, что ты упорно дебажишь ядро.


❗️❗️❗️ Нравится формат? Ставь 👍

👉 Рубрика: #шпаргалка@LinuxSkill
⭐️ Зеркало в MAX

#Linux #Terminal #CLI #Games #Sysadmin #DevOps

Читать полностью…

LinuxSkill - Сводки с прода и Шпаргалки

🤖 Синхронизация каталогов: Ультимативный Bash-гайд для сисадмина

Эй, технарь! Готов автоматизировать рутину?

Не оставляет меня идея создания собственных простых видео. Вот второй подход к снаряду. Напомню источниками являются официальные гайды.

📃 Текстовая инструкция

#Linux #Bash #Автоматизация #rsync #Cron #CLI

Читать полностью…

LinuxSkill - Сводки с прода и Шпаргалки

💡 Systemd обещает быструю загрузку, но твоя система тормозит?

Привет, цифровой архитектор! 👋

Классика: сам демон работает быстро, но вынужден ждать ленивые юниты, которые создают "критическую цепочку" задержек. Покажу, как быстро найти виновника и устранить проблему с помощью двух команд.

1. 🔍 Кто виноват: Анализ времени запуска

Команда systemd-analyze blame покажет точное время, которое каждый юнит потратил на запуск, сортируя их по убыванию.


# Выводит список юнитов, отсортированный по времени запуска
systemd-analyze blame

Назначение: Быстрый поиск юнитов, которые стартуют медленнее всего.

2. ⛓️ Поиск узкого места: Критическая цепочка

Если юнит стартует быстро, но при этом висит в топе, значит, он кого-то ждет. Нам нужно увидеть цепочку зависимостей, которая создает задержку.


# Анализ цепочки зависимостей, которая замедляет запуск системы
systemd-analyze critical-chain

Назначение: Показывает, какой именно юнит или зависимость блокирует загрузку критических служб.

Частый пример: docker.service ждет поднятия сети (systemd-networkd-wait-online.service). Это бессмысленно, если у Docker нет жесткой зависимости от сети на старте.

3. 🛠️ Устраняем задержку через override

Чтобы «отвязать» Docker от медленной сети, используем правильный подход systemd — не трогаем оригинальный файл юнита, а создаем прокладку override.conf:


# Открыть редактор для создания override.conf
sudo systemctl edit docker.service

# В открывшийся файл вставьте:
[Unit]
After=network.target
Wants=network.target

Назначение: Переопределяем параметры After и Wants, чтобы Docker не ждал некритичные сетевые службы.

После этого не забудьте применить изменения:


# Применить изменения
sudo systemctl daemon-reload
sudo systemctl restart docker


Важно: Использование systemctl edit создает отдельный файл, который не будет перезаписан при обновлении пакета Docker.

💡 Вывод: Регулярное использование systemd-analyze позволяет держать под контролем стартовую производительность сервера и избегать фантомный задержек, которые съедают рабочее время.

#Linux #systemd #CLI #DevOps #Optimization

Читать полностью…
Subscribe to a channel