Сисадмин В Kernel Panic
31 subscribers
229 photos
25 videos
1 file
106 links
Небольшой канал, злого сисадмина. Личные заметки и решения, мемы, интересные утилиты.
Download Telegram
Полезные приёмы Bash, которые стоит использовать в скриптах

1. Контроль наличия файлов и каталогов
if [ -f "$file" ]; then
echo "Файл существует"
fi

Конструкция тестирования через [ ]позволяет проверять разные типы объектов файловой системы.
-f - обычный файл
-d - директория
-x - исполняемый файл

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

2. Подстановка значения по умолчанию
name=${NAME:-"Гость"}

Если переменная NAME не определена или пуста, будет использовано значение "Гость".

Разница вариантов:
${VAR:-value} - только подставляет
${VAR:=value} - подставляет и записывает в переменную

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

3. Обход файлов через цикл for
for file in *.txt; do
echo "Обрабатываю $file"
done

Важно помнить:

-всегда заключать переменные в кавычки
-при работе с произвольными именами лучше использовать
for file in *; do

Это защищает от проблем с пробелами и спецсимволами в именах файлов.

4. Чтение файла построчно
while IFS= read -r line; do
echo "Строка: $line"
done < input.txt

Безопасный способ чтения строк.

IFS= отключает автоматическое разбиение по пробелам
-r запрещает интерпретацию backslash

Такой шаблон обязателен при работе с конфигами, логами и любыми текстовыми данными.

5. Проверка результата выполнения команды
if command; then
echo "Команда прошла успешно"
else
echo "Ошибка"
fi

В Bash код возврата 0 означает успех, любое другое значение - ошибка.

Использование if напрямую с командой - базовый механизм обработки ошибок. Это предпочтительнее, чем анализ вывода.

6. Многострочный ввод через heredoc
cat << EOF
Это многострочный текст.
EOF

Позволяет передать блоку команд заранее заданный текст.

Часто используется для генерации конфигурационных файлов, шаблонов и inline-скриптов.

7. Очистка ресурсов через trap
trap 'rm -f /tmp/tempfile' EXIT

Команда trap регистрирует обработчик завершения.

EXIT - выполняется при любом выходе из скрипта
INT - перехват Ctrl+C
TERM - корректное завершение процесса

Необходимо для удаления временных файлов и корректного освобождения ресурсов.

8. Жёсткий режим выполнения
set -e

После включения этой опции Bash завершит выполнение при первой команде, вернувшей ненулевой код выхода.
Что это даёт:

-Любая ошибка прерывает сценарий немедленно.
-Исключается продолжение работы в неконсистентном состоянии.
-Снижается риск повреждения данных из-за "тихих" сбоев.


Обычно включают вместе с:
set -u

Ошибка при обращении к неинициализированной переменной. Позволяет отлавливать опечатки и логические дефекты.
set -o pipefail

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

#learn
👍2
SELinux и AppArmor - что делать, если сервис не запускается или работает некорректно.

SELinux и AppArmor - это механизмы принудительного контроля доступа MAC. Они ограничивают действия процессов независимо от прав пользователя, включая root. Если служба не читает файлы, не открывает порт или падает без очевидной причины, проблема часто связана именно с ними.

В Linux действует двухуровневая модель безопасности:

1) DAC - классические UNIX права и владельцы.
2) MAC - обязательная политика, которая проверяется дополнительно.

Если DAC разрешает доступ, но MAC запрещает, операция будет заблокирована.

SELinux

SELinux использует модель на основе меток. Каждый объект в системе имеет security context:

user:role:type:level

Решение принимается по правилу type enforcement. Если для пары source_type и target_type нет разрешения allow - операция будет отклонена.

Что проверить в первую очередь:
getenforce

Возможные значения:
Enforcing - блокирует
Permissive - только логирует
Disabled - отключен

Если в Permissive сервис начинает работать, причина точно в политике.

Проверка контекстов:
ls -Z /path
ps -eZ | grep nginx

Тип процесса должен соответствовать типу файлов. Например, процесс httpd_t может читать только файлы с httpd_sys_content_t. Если каталог имеет тип default_t - будет отказ.

Анализ отказов:
grep "avc: denied" /var/log/audit/audit.log

или
ausearch -m avc -ts recent

Типовые причины:

1) файлы скопированы вручную и потеряли корректный label
2) данные размещены в нестандартном каталоге
3) сервис использует нетипичный порт
4) приложению требуется доступ к сети, не разрешенный boolean


Корректное исправление - восстановление контекста:
restorecon -Rv /var/www/html


Если используется нестандартный путь:
semanage fcontext -a -t httpd_sys_content_t "/srv/site(/.*)?"
restorecon -Rv /srv/site


Добавление нестандартного порта:
semanage port -a -t http_port_t -p tcp 8080


Проверка и включение boolean:
getsebool -a | grep httpd
setsebool -P httpd_can_network_connect on


Создание локального модуля политики:
grep "avc: denied" /var/log/audit/audit.log | audit2allow -M mymodule
semodule -i mymodule.pp

Этот способ добавляет новое allow правило. Использовать только если невозможно решить проблему через корректные типы или booleans. audit2allow может открыть избыточный доступ.

Временный перевод в permissive режим для диагностики:
setenforce 0

Но это только для диага, не для прода.


AppArmor

AppArmor использует модель на основе путей. Политика задается профилем, который ограничивает доступ к конкретным файлам, каталогам и возможностям ядра.

Проверка статуса:
aa-status


Поиск отказов:
journalctl -xe | grep apparmor
dmesg | grep DENIED

В логе будет строка вида:

apparmor="DENIED" operation="open" profile="/usr/sbin/nginx"


Решение через complain режим:
aa-complain /usr/sbin/nginx

Профиль перестает блокировать и начинает только логировать.

Автоматическое добавление правил из логов:
aa-logprof


Редактирование профиля вручную:
/etc/apparmor.d/usr.sbin.nginx


Добавление правила доступа:
/srv/site/** r,


Перезагрузка профиля:
apparmor_parser -r /etc/apparmor.d/usr.sbin.nginx


Основные ошибки сисадминов ^_^

1) Полное отключение SELinux или AppArmor вместо анализа причины.
2) Использование
chmod 777 вместо корректной политики.
3) Генерация модуля через
audit2allow без понимания, что именно разрешается.
4) Оставление системы в
permissive или complain режиме в продакшене.

Рабочий алгоритм при отказе сервиса:

1) Проверить режим SELinux или AppArmor.
2) Найти deny в логах.
3) Проверить контексты или профиль.
4) Попробовать восстановить стандартную политику.
5) Добавить точечное разрешение.
6) Только в крайнем случае создавать кастомный модуль.


MAC - это лишь доп слой защиты. Он не должен мешать, а только ограничивать потенциальный ущерб.
Правильная настройка залог нервов, и спокойной смены на работе :)

#learn
😶 Забудьте про изоляцию в Wi-Fi.

Годами мы лепили гостевые SSID, ставили галочку AP Isolation и верили, что юзеры внутри одной подсети изолированы друг от друга. Оказалось - показалось 😬

На симпозиуме NDSS 2026 показали атаку AirSnitch, которая умножает на ноль всю изоляцию Wi-Fi клиентов. Причем делает это не брутфорсом, а фундаментальным обманом логики работы коммутаторов на первом и втором уровнях модели OSI. Уязвимы практически все протестированные железки... Cisco, Ubiquiti, Netgear, D-Link, а также кастомные прошивки OpenWrt и DD-WRT 🤙

Суть атаки... Атакующий подключается к точке доступа, подделывая MAC-адрес жертвы. AP обновляет таблицу коммутации, связывая виртуальный порт атакующего с MAC-адресом жертвы. В результате весь входящий трафик начинает литься хакеру. Но чтобы сделать атаку двусторонней и не сбросить жертву окончательно, хакер использует хитрый трюк... он отправляет ICMP-пинг с рандомного MAC-адреса, завернутый в общий групповой ключ сети. Это заставляет точку доступа переключить маршрутизацию обратно на жертву. Постоянно жонглируя этими состояниями, атакующий незаметно встает посередине канала ⌨️

Самая дичь заключается в том, что атака работает даже за пределами одного BSSID. Злоумышленник может сидеть на гостевом SSID, а ломать клиента из корпоративного SSID, если они обслуживаются одной точкой доступа. В энтерпрайз-сетях ситуация еще хуже, т.к. AirSnitch позволяет перехватывать трафик между пользователями, подключенными к разным физическим точкам доступа, если они делят общую проводную распределительную сеть. Разделение по VLAN помогает далеко не всегда, так как многие вендоры криво реализуют изоляцию между L2 и L3. Исследователи даже продемонстрировали, как с помощью этого метода перехватить RADIUS-пакеты и поднять фейкового двойника корпоративной WPA3-Enterprise сети.

Что со всем этим делать - пока вопрос открытый. Проблема кроется в самой архитектуре обработки фреймов, и некоторые производители железа уже говорят, что починить это программно невозможно и нужны фиксы в Wi-Fi чипах. Патчи будут, но до тех пор любая открытая или слабо защищенная сеть (даже с изоляцией) - это ваши риски уже сейчас 😶

Типичный 🥸 Сисадмин
Please open Telegram to view this post
VIEW IN TELEGRAM
😨2
🧬 Ученые собрали перезаписываемый жесткий диск из ДНК

Исследователи научились не просто архивировать данные в молекулы ДНК (это умели и раньше в режиме...записал и положил в холодильник на сотню лет), а создали полноценный многоразовый носитель. Теперь эту био-флешку можно стирать и переписывать по кругу, прямо как обычный хард 😮

Внутри сплошной киберпанк. Чтобы записать инфу, бинарный код конвертируют в последовательности нуклеотидов (A, C, G, T) с помощью алгоритма frameshift encoding. А для чтения используется сенсор-нанопора... нить ДНК протаскивают через микроскопическое отверстие, электроника замеряет колебания электрического сигнала и расшифровывает их обратно в нули и единицы. По сути, получилась классическая логика контроллера HDD, только на молекулярном уровне.

Профиты технологии очевидны. Плотность записи такая, что в одной пробирке можно унести бэкапы ДЦ среднего гиперскейлера. Плюс нулевое энергопотребление в режиме простоя и срок хранения в несколько столетий. Никакой деградации ячеек, как в SSD, и никаких заклинивших головок.

Однако до коммерческого прода и компактных USB-свистков с ДНК еще пройдут годы. Но перспектива забавная. Походу в будущем придется следить за тем, чтобы полка с бэкапами случайно не мутировала 🏥

Типичный 🥸 Сисадмин
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔1
А ведь в чём-то он прав :)
Если запускаешь сервисы или ботов на сервере, не храни токены и API-ключи в коде и не вводи их через export в терминале. Они остаются в git и истории shell.

Используй .env файл и подгружай переменные при запуске процесса.

Плюсы:

Ключи не попадают в git.
Не сохраняются в history.
Проще переносить сервис между серверами.
Конфигурация лежит в одном месте
.

После изменения .env всегда проверяй, какие переменные реально видит процесс.

Создание .env:
cd /root/bot
vim .env
chmod 600 .env

Пример переменных:
X_API_KEY=your_key_here
OPENAI_API_KEY=your_key_here

Загрузка переменных:
set -a
source .env
set +a

Проверка:
python -c "import os; print(os.getenv('X_API_KEY'))"
👎1
🎂 Деду Столлману сегодня стукнуло 73 года.

Сегодня, 16 марта, свой 73-й левелап празднует Ричард Мэттью Столлман (он же RMS). Отец-основатель Фонда свободного ПО, создатель идеологии опенсорса и человек, который придет к вам во сне и откусит лицо, если вы назовете ОС просто Linux, а не GNU/Linux 🙂

Кто же он, поинтересуется молодой эникей... так вот, пока Гейтс и Джобс в 80-х активно огораживали исходники и впаривали всем проприетарные бинарники, молодой хакер из MIT в соло объявил корпорациям священный ИТ-джихад. Он решил написать свою свободную ОС с блэкджеком и открытым кодом.

В итоге Столлман выкатил фундамент, на котором до сих пор крутится вообще весь современный ИТ-мир... монументальный компилятор GCC (без которого ни одно ядро не собралось бы), отладчик GDB, базовый юзерспейс GNU и Emacs... отличную операционную систему, которой, по историческому недоразумению, не хватает лишь нормального текстового редактора 😂

А главным его достижением стала лицензия GPL, за что ему огромный респект... это гениальный юридический вирус, который заставил жадные корпорации делиться кодом и до сих пор вызывает жжение ниже спины у проприетарных вендоров 🤬

Еще RMS это ходячий генератор приколов. Человек, который благословляет линуксоидов блином от старого винчестера на голове (в образе Святого ИГНУциуса - фото к этому посту). Принципиально не пользуется мобильными телефонами (называя их портативными зондами и мечтой Сталина). Серфит веб через отправку email-запросов к специальному демону. Признает только старые ThinkPad с прошитым Libreboot, чтобы ни один байт проприетарного Intel ME не проник на его жесткий диск. Ну и аппетитная классика... может ВНЕЗАПНО начать отковыривать и есть что-то со своей ноги прямо во время лекции 😂

А еще...дед был прав, ведь что характерно, если в сытые нулевые над паранойей Столлмана откровенно ржали, называя его городским сумасшедшим и радикальным фанатиком, то в суровых реалиях 2026 года смех как-то поутих. Дед теперь не кажется таким сумасшедшим 😱

Когда Windows 11 без онлайна отказывается открывать Блокнот, ИИ-агенты Microsoft и Apple скриншотят каждый твой пук на рабочем столе, вендоры продают по подписке ядра в процессорах и обогрев сидений, а Гугл принудительно выжигает сайдлоадинг APK-файлов на Android - дедовские проповеди о цифровом рабстве и зондах оказались абсолютной базой. Он не был параноиком. Он просто читал логи будущего 👾

С днем рождения, Ричард! Долгих лет жизни, железобетонного здоровья, стабильных компиляций и чистого кода без проприетарных блобов.

Поднимем же бокалы (free as in free beer, разумеется) за этого великого человека в нашем с вами ИТ🍻

Типичный 🥸 Сисадмин
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3😁1
В стане пингвиноводства случилась эпохальная победа. Загрузчик GNU GRUB переходит на современные рельсы разработки. Деды решили отказаться от почтовых рассылок 😬

Испокон веков суровые бородатые мейнтейнеры GRUB хостили исходники на древнем как бивни мамонта GNU Savannah. Весь процесс разработки шел исключительно по олдскульному хардкору... патчи кидались через почтовые рассылки, а ревью кода происходило в тредах email-клиентов.

Но на дворе 2026 год, и даже до таких аксакалов дошло, что этот палеозой пора заканчивать. Разрабы объявили о миграции проекта на мощности FreeDesktop.org. Это полноценный инстанс GitLab. А значит, разработка самого популярного опенсорсного бутлоадера планеты наконец-то получит человеческий воркфлоу.

Вместо git send-email теперь будут нормальные Merge Requests, удобное ревью кода прямо в веб-морде, трекинг багов без необходимости курить мануалы по древним багтрекерам и нормальный CI/CD 🎩

Для нас ничего не изменится... GRUB как грузил ядро, так и будет. А вот для комьюнити разрабов это чистый WIN. Порог входа в контрибьютинг резко снижается, т.к. больше не нужно проходить обряд посвящения 🪄 через настройку почтовых клиентов для отправки патчей. Код будет проверяться быстрее, новые фичи внедряться оперативнее.

Типичный 🥸 Сисадмин
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Nerva - утилита на Go для точного определения сервиса за открытым портом. Не "порт 22", а конкретно: SSH, Redis, Kafka, Kubernetes API и т.д.

Работает за счёт анализа ответов сервиса, баннеров и поведения протокола. На выходе даёт метаданные: тип сервиса, транспорт (TCP/UDP/SCTP), иногда версию и дополнительные детали.
Поддерживает 120+ протоколов: от базовых (HTTP, FTP, PostgreSQL) до телеком и industrial (Diameter, GTP, Modbus, BACnet).

Установка:
go install github.com/praetorian-inc/nerva/cmd/nerva@latest


Примеры:
Определить сервис:
nerva -t example.com:22


JSON-вывод:
nerva -t example.com:22 --json


Связка со сканером:
naabu -host example.com -silent | nerva

Сценарий: сканер находит открытые порты, Nerva определяет, какие сервисы за ними стоят.
Как рекламные SDK сливают всю твою жизнь. Давно хотел собрать этот параноидальный пост 🏥

На скрине обыденность 2026 года, там мы видим интерфейс kepler.gl (мощной опенсорсной тулзы от Uber для гео-анализа). А оранжевые точки, густо засирающие карту Дефолт-сити - это люди. Точнее, логи смартфонов.

Обратите внимание на всплывающую плашку на скрине. Это чистейший дамп от брокеров данных:
🟢 utc_timestamp - точное время вплоть до миллисекунд.
🟢 id_type: aaid - Android Advertising ID. Твой уникальный рекламный идентификатор, который Гугл так заботливо присваивает каждому устройству.
🟢 horizontal_accuracy: 11 - точность до 11 метров.
🟢 ip_address - тут очевидно.

Как эти данные попадают на рынок? Юзверь покупает обычный, нерутованный телефон на стоковом Android или iOS. Ставит бесплатный 😬 фонарик, приложение доставки еды, игры для высокого интеллекта или виджет погоды.

Что характерно, разрабам этих приложух даже не нужно уметь стягивать данные. Они просто вшивают в код сторонние проприетарные модули... типа рекламные SDK (от Яндекса, Гугла, ФБ, Unity и тысяч ноунейм-контор). Эти SDK работают в фоне, запрашивают доступ к геопозиции (ты же сам нажал Разрешить 💩) и нон-стопом шлют координаты на свои сервера, привязывая их к тебе.

Брокеры данных скупают эти логи, склеивают их в датасеты и перепродают кому угодно... маркетологам, аналитикам, а на даркнете - хацкерам и не только. По этим точкам вычисляется, где ты спишь (кластер точек с 23:00 до 07:00), где работаешь и к кому ездишь по пятницам 😗

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

Про Пуш-уведомления ⌨️... они в Android (и iOS тоже) не работают так, что приложение само сидит и слушает сеть. Вся архитектура завязана на Firebase Cloud Messaging - гугловский прокси. Когда телефон держит один-единственный, вечно открытый TCP-сокет до серверов Гугла. И через него корпорация знает твой реальный IP-адрес 24/7.

Но самый сок - это тихие или data-уведомления. Разраб (доставки пиццы, игра, погода) хочет узнать твои координаты, но приложение висит в фоне или выгружено из памяти. Сервер разраба шлет специальный невидимый пуш в Гугл. Гугл прокидывает его на твой девайс. Система ВНЕЗАПНО будит приложение в фоне, давая ему пару секунд процессорного времени. Приложение дергает GPS-координаты, отправляет пакет данных на трекер-сервер и снова засыпает. На экране смартфона при этом не появляется ВООБЩЕ НИЧЕГО.

Личное спасение не запрещено:
🔴 Перекат на AOSP-прошивки (GrapheneOS, LineageOS) без GApps. Взамен ставится MicroG - опенсорсный аналог сервисов Гугла. Он умеет принимать пуши, но ты можешь жестко отрезать модулям доступ к геолокации и на лету подменять идентификаторы.
🔴 Рут-права это база. Без рута ты не хозяин своего железа. Только с ним можно поставить нормальный фаервол на базе iptables и жестко отрезать лишние доступы.
🔴 Если рут получить нельзя, то частично могут спасти например NetGuard, TrackerControl, etc. Они поднимают локальный loopback-VPN на самом телефоне и режут коннекты к трекерам и аналитике на уровне доменов.
🔴 Если нужны Банки, Яндекс.Еда или Самокаты, то разумно юзать Shelter или Insular. Эти опенсорсные утилиты юзают встроенный в Android рабочий профиль. Ты ставишь весь проприетарный мусор туда, а когда еда приехала, то просто нажимаешь одну кнопку (или автозаморозка), и весь рабочий профиль замораживается. Приложения физически не могут работать в фоне и тянуть GPS.
🔴 DNS-контроль и никаких гугловских 8.8.8.8. Только NextDNS, AdGuard DNS или собственный Pi-hole завернутый через тоннель до дома. В них должны быть включены жесткие личные блеклисты против телеметрии и трекеров.
🔴 Базовый гигиенический минимум для домохозяек - сброс AAID.
🔴 Для хардкорщиков есть модули типа AppOps или XPrivacyLua. Они скармливают приложениям фейковые GPS-координаты и пустые MAC-адреса. Пусть брокеры анализируют твое перемещение по дну Марианской впадины 😂

Если тебе лень всё это настраивать - улыбайся, ты прямо сейчас светишься оранжевой точкой на чьем-то дашборде 😬

Типичный 🥸 Сисадмин
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Nerdlog - быстрый TUI-просмотрщик логов, рассчитанный на работу с несколькими хостами. Вдохновлён Graylog и Kibana, но без избыточных функций. Требует минимальной настройки.

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

Основное применение - просмотр системных логов (/var/log/messages, /var/log/syslog или через journalctl) с одного или нескольких хостов. Эффективно работает даже с большими файлами, включая объёмы от 1 ГБ.

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

Github
А у вас все списки белые!

Типичный 🙂 Сисадмин
Please open Telegram to view this post
VIEW IN TELEGRAM
Во FreeBSD закрыта критическая уязвимость CVE-2026-4747 в ядре (модуль kgssapi.ko).

Через специально сформированные NFS-пакеты возможен RCE на уровне kernel. Эксплойт уже в открытом доступе и запускает /bin/sh от root. Уязвимость нашёл сотрудник Anthropic с помощью Claude, а исследователи из Calif потом скормили модели только официальный отчёт, и за 4 часа ИИ самостоятельно написал полностью рабочий эксплоит.

Продолжая эксперимент, та же модель нашла две новые 0-day в редакторах.
Vim (CVE-2026-34714): ошибка в обработке modeline (включён по умолчанию). Опция tabpanel не имела флага P_MLE, что позволяло обойти sandbox через autocmd_add() и событие SafeStateAgain. Исправлено в Vim 9.2.0272.
Пример эксплойт-строки:
/* vim: set showtabpanel=2 tabpanel=%{%autocmd_add([{'event'\:'SafeStateAgain','pattern'\:'*','cmd'\:'!id>/tmp/calif-vim-rce-poc','once'\:1}])%}: */

Emacs: при открытии файла рядом с .git/ автоматически запускаются git ls-files и git status. Если в .git/config задать core.fsmonitor на команду атакующего RCE. Разработчики Emacs отказались фиксить, заявив, что это проблема Git.