SELinux и AppArmor: два подхода к mandatory access control

Root есть root. Обычные unix-права не останавливают взломанный процесс, если он и так владелец файла. MAC (mandatory access control) добавляет независимый от DAC слой поверх — SELinux и AppArmor решают это по-разному. getenforce # SELinux: Enforcing / Permissive / Disabled ausearch -m avc -ts recent # что заблокировано за последнее время audit2allow -a -M mymodule # черновик модуля из накопленных отказов aa-status # AppArmor: профили и их режим aa-complain /etc/apparmor.d/usr.sbin.nginx # profile → complain вместо enforce SELinux метит файлы и процессы контекстами — гибко, но отлаживать сложнее. AppArmor привязан к пути файла, профиль читается проще. RED OS и RHEL — SELinux по умолчанию, Debian и Ubuntu — AppArmor. ...

2 сентября 2026 г. · llexa

pgbouncer: пул соединений перед PostgreSQL

PostgreSQL на каждое соединение форкает отдельный backend-процесс — при сотнях коротких подключений (веб-запросы, serverless-функции) это съедает память и CPU на сам факт подключения, ещё до первого запроса. pgbouncer держит пул готовых соединений к базе и раздаёт их клиентам. [databases] mydb = host=127.0.0.1 port=5432 dbname=mydb [pgbouncer] listen_port = 6432 pool_mode = transaction max_client_conn = 1000 default_pool_size = 20 Режимы pool_mode: session — за клиентом до disconnect, совместимо со всем (advisory locks, prepared statements) transaction — на время транзакции, самый экономный, но ломает session-level фичи statement — на один запрос, только для read-only трафика psql -h 127.0.0.1 -p 6432 -U app mydb # подключение через pgbouncer, не напрямую в базу #postgresql #dba

4 августа 2026 г. · llexa

SELinux и AppArmor: два подхода к mandatory access control

Root есть root. Обычные unix-права не останавливают взломанный процесс, если он и так владелец файла. MAC (mandatory access control) добавляет независимый от DAC слой поверх — SELinux и AppArmor решают это по-разному. getenforce # SELinux: Enforcing / Permissive / Disabled ausearch -m avc -ts recent # что заблокировано за последнее время audit2allow -a -M mymodule # черновик модуля из накопленных отказов aa-status # AppArmor: профили и их режим aa-complain /etc/apparmor.d/usr.sbin.nginx # profile → complain вместо enforce SELinux метит файлы и процессы контекстами — гибко, но отлаживать сложнее. AppArmor привязан к пути файла, профиль читается проще. RED OS и RHEL — SELinux по умолчанию, Debian и Ubuntu — AppArmor. ...

4 августа 2026 г. · llexa

Proxmox #8: pvesr — репликация VM между нодами без shared storage

Shared storage (Ceph, NFS, iSCSI) — не всегда вариант, не каждая инсталляция тянет отдельный кластер хранения. pvesr реплицирует VM между нодами ZFS-снапшотами по расписанию — дешёвая замена shared storage для не самых критичных нагрузок. pvesr create-local-job 100-0 pve2 --schedule '*/15' # реплика VM 100 на pve2 каждые 15 минут pvesr status # последний снапшот, задержка pvesr disable 100-0 # остановить job, не удаляя Разница с HA-кластером на shared storage — окно потери данных равно интервалу репликации: упала нода между снапшотами — потеряны изменения за этот промежуток. pvesr не переключает нагрузку сам, после сбоя старт на целевой ноде — qm start 100 вручную. ...

3 августа 2026 г. · llexa

Архиваторы #6: xz и lzma — максимум сжатия ценой времени

xz (формат LZMA2) даёт лучшую степень сжатия среди классических архиваторов — ценой времени и однопоточности из коробки. xz -9e file.bin # максимальное сжатие (extreme) → file.bin.xz xz -T0 -9 file.bin # многопоточно блоками, степень чуть хуже -9e unxz file.bin.xz # распаковать Сравнение на тех же 1 ГБ логов, что и в выпуске про bzip2: gzip -9 12с 380МБ bzip2 -9 34с 290МБ xz -9e 58с 275МБ zstd -19 18с 310МБ Лучший результат по размеру, но почти вдвое медленнее bzip2 и в разы медленнее zstd. Оправдан для холодных архивов и дистрибутивов — ядро Linux, исходники, релизные тарболы: там жмут один раз, распаковывают часто. ...

3 августа 2026 г. · llexa

left-pad: 11 строк кода, которые сломали половину npm

В марте 2016 года разработчик Azer Koçulu удалил из npm свой пакет left-pad — 11 строк кода, которые дописывали нули слева к строке. Повод — спор из-за названия другого его пакета, которым заинтересовался мессенджер Kik. left-pad был transitive-зависимостью тысяч проектов, включая Babel и сам npm CLI. Через несколько часов по всему миру посыпались билды — от стартапов до крупных компаний. npm пришлось в экстренном порядке восстановить пакет силой, без согласия автора — впервые в истории реестра. ...

2 августа 2026 г. · llexa

Будь добрее #10 - Миллиардер, который открыл остров пострадавшим от урагана

В сентябре 2017 года ураган Ирма пятой категории обрушился на Британские Виргинские острова — в том числе на Necker Island, частный остров Ричарда Брэнсона. Сам он пересидел шторм в бетонном винном погребе поместья вместе с семьёй и персоналом. Как только ураган утих, Брэнсон открыл уцелевшие постройки острова для местных жителей и туристов, оставшихся без крова — люди жили там неделями, пока налаживалась эвакуация. Параллельно он организовал доставку генераторов и воды на соседние острова и публично добивался создания фонда восстановления Карибского бассейна вместо разовой гуманитарной помощи. ...

2 августа 2026 г. · llexa

dnsmasq: локальный DNS и DHCP в одном конфиге

Для полноценного BIND в домашней или маленькой офисной сети — оверкилл. dnsmasq закрывает DNS-кэш и DHCP одним лёгким демоном и одним конфигом. # /etc/dnsmasq.conf interface=eth0 dhcp-range=192.168.1.50,192.168.1.150,12h address=/nas.local/192.168.1.10 server=1.1.1.1 no-resolv dhcp-range включает DHCP-сервер на интерфейсе с указанным пулом и временем аренды. address=/domain/ip — локальная запись без правки /etc/hosts на каждой машине сети. server=1.1.1.1 + no-resolv — форвардить внешние запросы на конкретный DNS, игнорируя системный /etc/resolv.conf. Проверка конфига без перезапуска — dnsmasq --test, применение — systemctl reload dnsmasq. ...

1 августа 2026 г. · llexa

Vector: сборка логов без Logstash на JVM

Logstash тянет за собой JVM и легко съедает гигабайт памяти на пустом месте. vector (Datadog, Rust) решает ту же задачу — собрать логи, разобрать, отправить — без этого веса. [sources.app_logs] type = "file" include = ["/var/log/myapp/*.log"] [transforms.parse] type = "remap" inputs = ["app_logs"] source = '. = parse_json!(.message)' [sinks.loki] type = "loki" inputs = ["parse"] endpoint = "http://loki:3100" labels.job = "myapp" Три секции — источник, трансформация, приёмник — читаются в конфиге так же прямо, как выполняются. remap (язык VRL) заменяет отдельные grok-паттерны Logstash на обычные выражения. Один бинарник, без плагин-менеджера и без JVM warm-up — годится и на слабом Pi-подобном хосте. ...

1 августа 2026 г. · llexa

Vim с нуля #7: quickfix и ctags — навигация без LSP

LSP в vim — это coc.nvim и полноценный language server на каждый язык, но для быстрой навигации по проекту часто хватает связки попроще: quickfix list и ctags работают в любом окружении, без установки сервера. :grep -r "pattern" . заполняет quickfix через внешний grep; :copen открывает список, :cn / :cp — прыжок по совпадениям :make гоняет компилятор или линтер (задаётся через makeprg), ошибки попадают туда же ctags -R . строит файл тегов по всему проекту; Ctrl-] на имени функции — переход к определению, Ctrl-t — назад по стеку :tselect — если тег неоднозначен (несколько функций с одним именем), выбор вручную из списка #vim #linux

1 августа 2026 г. · llexa