FUSE с нуля #4: gocryptfs — шифрованный маунт поверх обычной ФС

encfs долгое время был стандартным выбором для шифрованного FUSE-маунта, пока в нём не нашли структурные уязвимости (утечка метаданных, уязвимость к атакам по объёму файла). gocryptfs написан позже с учётом этих проблем — тоже FUSE, тоже пофайловое шифрование, но с современной криптографией (AES-256-GCM) и явным аудитом на старте проекта. mkdir cipher plain gocryptfs -init cipher gocryptfs cipher plain После -init в cipher/ создаётся мастер-ключ, зашифрованный паролем; gocryptfs cipher plain монтирует расшифрованное представление в plain/ — файлы внутри лежат как обычно, а в cipher/ физически видны только зашифрованные блобы с именами тоже зашифрованными. ...

September 18, 2026 · llexa

keepalived: плавающий IP через VRRP без облачного балансировщика

Когда облачного балансировщика нет (bare-metal, свой ЦОД), а нужен один IP, за которым прозрачно стоит один из двух серверов — keepalived поднимает VRRP: два узла договариваются, кто сейчас MASTER и держит виртуальный IP, а кто BACKUP и ждёт. # /etc/keepalived/keepalived.conf на MASTER vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 150 virtual_ipaddress { 10.0.0.100/24 } } На BACKUP — та же конфигурация, но state BACKUP и priority ниже (например, 100). virtual_router_id должен совпадать на обеих машинах — это идентификатор VRRP-группы, не порт и не IP. ...

September 18, 2026 · llexa

Обзор новинок #9: релизы за 5–12 сентября

Новые релизы за неделю — что важно для сервера и терминала. syncthing v2.1.5 — поддержка HTTP/HTTPS-прокси с CONNECT https://github.com/syncthing/syncthing/releases/tag/v2.1.5 uptime-kuma 2.5.4 — новые провайдеры уведомлений, SFTP-монитор https://github.com/louislam/uptime-kuma/releases/tag/2.5.4 io_uring — крупные патчи производительности от Jens Axboe https://www.phoronix.com/news/Linux-IO-uring-Crazy-Friday mold — линкер переписывают на Rust, цель — стать линкером по умолчанию https://www.phoronix.com/news/Mold-Linker-In-Rust-Coming skim v5.7.0 — фаззи-поиск в терминале, обновление https://github.com/skim-rs/skim/releases/tag/v5.7.0 #linux #sysadmin #releases

September 18, 2026 · llexa

nsenter: заходим в namespace процесса без docker exec

docker exec работает только если в образе есть шелл, а сам docker жив. nsenter заходит в те же namespaces напрямую через процесс на хосте — работает и для контейнеров без шелла (distroless-образы), и для разбора любых процессов, изолированных namespaces, не только Docker. nsenter --target $(pgrep -f myservice) --mount --uts --ipc --net --pid -- /bin/sh --target PID — чей namespace открываем, дальше флаги выбирают какие именно namespace’ы разделить: --net — сетевой стек контейнера, --mount — его файловую систему, --pid — его дерево процессов. ...

September 17, 2026 · llexa

systemd timers вместо cron: когда это оправдано

Таймер systemd — это два юнита: .timer задаёт расписание, .service — что выполнить. Не замена cron ради моды — таймер даёт то, чего у cron нет: журналирование через journald, зависимости между юнитами, и самое полезное — Persistent=true. # /etc/systemd/system/backup.timer [Timer] OnCalendar=daily Persistent=true [Install] WantedBy=timers.target Persistent=true запускает пропущенный job сразу после старта системы, если она была выключена в момент срабатывания — у cron такого нет, пропущенный запуск в down-time просто теряется. ...

September 17, 2026 · llexa

Vim с нуля #8: diff-режим и работа с патчами

vimdiff file1 file2 открывает оба файла side-by-side с подсветкой различий. Свой diff, без отдельной установки. Перенос изменений: :diffget " взять блок из другого окна :diffput " отправить блок в другое окно ]c / [c " к следующему/предыдущему различию Если правил файл вручную и подсветка не обновилась — :diffupdate пересчитает её заново. Патч можно накатить прямо из Vim: :!patch -p1 < fix.patch. Команда идёт в шелл и правит файл на диске, буфер она не трогает. Поэтому сразу за ней — :e!, иначе Vim покажет старую версию. ...

September 17, 2026 · llexa

DBA на минималках #9: WAL и archive_command для PITR

Point-in-time recovery в PostgreSQL строится на непрерывном архиве WAL-сегментов — без него pg_basebackup даёт снимок на момент бэкапа, и всё, что случилось после, потеряно безвозвратно. Минимум в postgresql.conf: wal_level = replica archive_mode = on archive_command = 'test ! -f /archive/%f && cp %p /archive/%f' %p — путь к сегменту, %f — имя файла. test ! -f не даёт молча перезаписать уже сохранённый сегмент. С PostgreSQL 12 recovery_target_time и restore_command идут прямо в postgresql.conf, режим восстановления включает файл recovery.signal в PGDATA — отдельного recovery.conf больше нет. restore_command — обратный путь: читает сегменты из архива в pg_wal. ...

September 16, 2026 · llexa

pgAudit: детальный аудит-лог для PostgreSQL

Штатный log_statement = all пишет все запросы плоским текстом без структуры — для аудита по требованиям безопасности (кто читал таблицу с ПДн, кто менял схему) этого недостаточно. pgAudit добавляет классифицированный лог, который проще парсить и фильтровать. Подключение: shared_preload_libraries = 'pgaudit' (требует перезапуска инстанса, не reload). Дальше в postgresql.conf или на уровне роли: ALTER SYSTEM SET pgaudit.log = 'read, write, ddl'; SELECT pg_reload_conf(); Классы read/write логируют SELECT и модифицирующие запросы отдельно от ddl (CREATE/ALTER/DROP) — можно включить только то, что реально нужно для аудита, не заливая лог избыточным SELECT-шумом на нагруженной базе. ...

September 16, 2026 · llexa

tcpdump: захват трафика из терминала

Wireshark на сервере без GUI не поставить, а разобраться, что происходит на сети, иногда нужно прямо там. tcpdump закрывает этот разрыв — захват и базовый разбор пакетов одной командой, файл потом можно открыть в Wireshark локально. tcpdump -i eth0 -n port 443 tcpdump -i any -n host 10.0.0.5 and not port 22 tcpdump -i eth0 -w capture.pcap -n отключает резолв DNS/портов в имена — без него каждый пакет тормозит на обратном lookup. -w пишет в pcap-файл вместо вывода в терминал — так и захватывать на сервере, а анализировать в Wireshark на своей машине. ...

September 16, 2026 · llexa

firewalld: зоны вместо линейных цепочек правил

На RPM-системах (RED OS, RHEL, Fedora) по умолчанию стоит firewalld — модель зон вместо линейного списка правил как в nftables/iptables. Интерфейс приписан к зоне (public, internal, trusted), и правила действуют в контексте зоны, а не глобально. firewall-cmd --get-active-zones firewall-cmd --zone=public --add-service=https --permanent firewall-cmd --zone=public --add-port=8443/tcp --permanent firewall-cmd --reload Без --permanent правило живёт до перезагрузки демона — удобно для теста, опасно для продакшена, если забыл добавить постоянно. Rich rules — точечные исключения, которых нет в сервисах: ...

September 15, 2026 · llexa