rkhunter: охота за руткитами и бэкдорами

rkhunter (Rootkit Hunter) ищет то, что обычный антивирус на сервере не ловит: подмену системных бинарников, скрытые процессы, следы известных руткитов. Работает по базе сигнатур плюс сравнение с сохранённым эталоном — эталон нужно снять сразу после чистой установки. apt install rkhunter rkhunter --propupd # снять эталон после установки rkhunter --update # обновить базу сигнатур rkhunter --check --sk # проверка без пауз (--skip-keypress) Результат — в /var/log/rkhunter.log, предупреждения помечены [Warning]. Часть — стандартный шум (изменённые пути после апдейта пакетов, нестандартные права) — разобрать один раз и занести в /etc/rkhunter.conf через ALLOWHIDDENDIR. Для регулярного контроля — --cronjob вместо интерактивного режима. ...

17 июля 2026 г. · llexa

Новые версии: 10 июля — 17 июля

Новые релизы за неделю — только то, что важно для сервера. vscode 1.129.0 nginx 1.31.3 — nginx-1.31.3 mainline: фикс переполнения буфера при использовании map с конкатенацией строк. loki helm-loki-7.1.0 immich v3.0.3 — исправления багов, публикация в собственный F-Droid репозиторий. node_exporter v1.12.1 — фикс обработки флага perf-профайлера, опциональный сбор csrow ue_count в edac. postgres 19_BETA2 3x-ui v3.5.0 — MTProto Multi-Client, миграция SQLite → PostgreSQL, доработки под нагрузку до 500k. terminal v1.25.1912.0 prometheus v0.313.1 bottom 0.14.4 — фикс бага с колонками процессов в конфиге и хоткеем выхода. skim v5.1.0 eza v0.23.5 #linux #sysadmin #releases

17 июля 2026 г. · llexa

iostat и sar: где потерялась производительность

Общая картина по CPU и памяти не отвечает на вопрос «какой конкретно диск тормозит». Для этого — iostat (снимок сейчас) и sar (история за прошлые дни). iostat -xz 1 5 # расширенная статистика, обновление раз в секунду, 5 раз # %util — занятость диска, await — латентность запроса в мс await выше 10-20 мс на HDD или 1-2 мс на SSD — сигнал упереться в диск. sar из пакета sysstat собирает метрики в фоне и хранит историю: ...

16 июля 2026 г. · llexa

Proxmox #6: установка и swap, который забыли создать

Установщик Proxmox VE — обычный Debian-инсталлятор. При выборе ZFS как корневой ФС (raid0/raid1/raidz) он не создаёт swap — итог: под нагрузкой хост не деградирует плавно, а падает в OOM killer. Проверить после установки: free -h swapon --show # пусто — swap отсутствует Вариант 1 — swap-файл: fallocate -l 8G /swapfile chmod 600 /swapfile mkswap /swapfile swapon /swapfile echo '/swapfile none swap sw 0 0' >> /etc/fstab Вариант 2 — zvol, без сжатия (иначе deadlock под памятью): ...

16 июля 2026 г. · llexa

taskset и cpulimit: приручаем прожорливый процесс

nice/renice меняют приоритет в очереди планировщика, но не ограничивают, сколько ядер или % CPU займёт процесс. Для этого — taskset и cpulimit. taskset привязывает процесс к конкретным ядрам (CPU affinity) — чтобы шумный batch-job не мешал latency-чувствительному сервису: taskset -c 2,3 ./backup-script.sh # сразу на ядрах 2 и 3 taskset -cp 4,5 12345 # перепривязать уже запущенный PID cpulimit ограничивает процент CPU у уже работающего процесса, периодически ставя его на паузу — без изменения priority: ...

16 июля 2026 г. · llexa

DBA на минималках #4: EXPLAIN и EXPLAIN ANALYZE

EXPLAIN показывает план планировщика (Seq Scan, Index Scan, Nested Loop, Hash Join) без выполнения запроса. EXPLAIN ANALYZE запускает его по-настоящему, добавляя время и число строк на узел. EXPLAIN ANALYZE SELECT * FROM orders WHERE customer_id = 42; ⚠️ На INSERT/UPDATE/DELETE EXPLAIN ANALYZE реально пишет в таблицу — оборачивай в BEGIN; ... ROLLBACK;. Буферы (кэш vs диск) — первое, что смотрят при разборе медленного запроса: EXPLAIN (ANALYZE, BUFFERS) .... Главное в плане: cost=startup..total — оценка планировщика, не секунды; rows vs actual rows — расхождение значит устаревшую статистику (ANALYZE table_name); Seq Scan вместо Index Scan — повод проверить индекс. ...

15 июля 2026 г. · llexa

mdadm: программный RAID в Linux

mdadm — стандартный инструмент для программного RAID в Linux: массив собирается на уровне ядра (модуль md), без аппаратного контроллера. Дешевле и переносимее, чем железный RAID, но нагрузку на CPU при пересборке никто не прячет. Собрать зеркало из двух дисков: mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1 Следить за состоянием и синхронизацией: cat /proc/mdstat mdadm --detail /dev/md0 Заменить отказавший диск: пометить как сбойный, убрать, добавить новый — ресинхронизация пойдёт автоматически: mdadm --fail /dev/md0 /dev/sdb1 mdadm --remove /dev/md0 /dev/sdb1 mdadm --add /dev/md0 /dev/sdd1 Сохранить конфигурацию массива, чтобы он собирался при загрузке: ...

15 июля 2026 г. · llexa

Современные ФС #5: ZFS — снапшоты и клоны

Снапшот в ZFS — не копия, а заморозка блоков через copy-on-write: старые блоки не перезаписываются, пока на них ссылается снапшот. Создаётся за миллисекунды, места почти не занимает. zfs snapshot tank/data@before-upgrade zfs list -t snapshot zfs rollback tank/data@before-upgrade Если полный откат не нужен — сделать из снапшота записываемый клон, который делит блоки с оригиналом, пока не разойдётся с ним: zfs clone tank/data@before-upgrade tank/data-test Перенести снапшот на другой пул/хост — целиком или только дельту с прошлой передачи (-i): ...

15 июля 2026 г. · llexa

awk: BEGIN/END, массивы и функции — не только '{print $1}'

awk '{print $2}' знают все, но за этим стоит язык программирования с блоками инициализации, накопительными переменными между строками и своими функциями. awk 'BEGIN{print "start"} {n++} END{print "total:", n}' file — счётчик строк с сообщениями до и после обработки awk '{sum[$1]+=$2} END{for (k in sum) print k, sum[k]}' file — суммировать вторую колонку по группам из первой, аналог GROUP BY awk 'function sq(x){return x*x} {print sq($1)}' file — своя функция внутри awk-программы awk -F: '{print $1}' /etc/passwd — свой разделитель полей вместо пробела awk 'NR==FNR{a[$1]=$2; next} $1 in a{print $0, a[$1]}' ref.txt data.txt — join двух файлов по первому полю #linux #bash

14 июля 2026 г. · llexa

grep продвинутый: -P, ripgrep и контекст вокруг совпадений

Большинство используют grep как grep -i слово файл и останавливаются. POSIX-регулярки сильно уступают perl-совместимым, а вывод без контекста заставляет открывать файл заново. grep -P '(?<=user=)\w+' auth.log — perl-совместимые регулярки (lookahead/lookbehind), недоступные в обычном grep grep -A 3 -B 1 "ERROR" — 3 строки после и 1 до совпадения, без повторного открытия файла grep -C 2 "timeout" — то же самое, но одинаковое число строк с обеих сторон grep -o -P '\d+\.\d+\.\d+\.\d+' — вывести только совпавшую часть строки, например IP-адреса rg "pattern" -t log — ripgrep: та же задача в разы быстрее на больших деревьях, уважает .gitignore из коробки #linux #bash

14 июля 2026 г. · llexa