Сисадмин В Kernel Panic
31 subscribers
231 photos
25 videos
1 file
107 links
Небольшой канал, злого сисадмина. Личные заметки и решения, мемы, интересные утилиты.
Download Telegram
Удобный прием для диагностики bash-скриптов

Когда сценарий начинает работать некорректно, обычно нужно выяснить, какая инструкция выполнилась последней и какие значения получили переменные. Вместо бесконечного добавления echo можно воспользоваться встроенной возможностью bash - set -x.

Если разместить set -x в начале файла, оболочка начнет выводить в терминал каждую исполняемую строку вместе с подставленными параметрами. Перед выводом будет стоять знак +, что упрощает анализ.

Пример: создание резервной копии
Напишем минимальный скрипт, который проверяет существование файла и переносит его в каталог для бэкапов:
#!/bin/bash
set -x

src="/etc/hosts"
dst="/tmp/backup"

mkdir -p "$dst"
timestamp=$(date +%Y%m%d_%H%M%S)
cp "$src" "$dst/hosts_$timestamp"

echo "Backup created: $dst/hosts_$timestamp"

Вывод терминала:
# ./backup.sh
+ src=/etc/hosts
+ dst=/tmp/backup
+ mkdir -p /tmp/backup
+ date +%Y%m%d_%H%M%S
+ timestamp=20251007_121330
+ cp /etc/hosts /tmp/backup/hosts_20251007_121330
+ echo 'Backup created: /tmp/backup/hosts_20251007_121330'
Backup created: /tmp/backup/hosts_20251007_121330


Видно каждое выполненное действие: какие значения получили переменные, как сработал вызов date, в какой путь был сохранен файл.

#learn
Nginx и SSH на одном порту

Разбираем схему, где SSH и HTTPS работают через порт 443 одновременно. HTTPS продолжает функционировать как обычно, а SSH становится доступен на том же порту. Решение основано на переменной $ssl_preread_protocol, появившейся в Nginx версии 1.15.2.

Исходные данные

Есть сервер с двумя IP:

1) 1.1.1.1 - используется для stream
2)
2.2.2.2 - на нем работают сайты по HTTPS

SSH-сервис слушает порт 22022. В итоге конфигурация выглядит так:
stream {
upstream ssh {
server 2.2.2.2:22022;
}

upstream web {
server 2.2.2.2:443;
}

map $ssl_preread_protocol $upstream {
"" ssh;
"TLSv1.2" web;
default 2.2.2.2:443;
}

server {
listen 1.1.1.1:443;
proxy_pass $upstream;
ssl_preread on;
}

}

http {

Как это работает

Мы объявили два backend-а: ssh и web. Далее через map и $ssl_preread_protocol описываем логику маршрутизации трафика.

При начале соединения Nginx анализирует протокол:

1) если определяется TLSv1.2, запрос уходит в web upstream
2) если TLS или SSL отсутствует, соединение направляется в ssh
3) в остальных случаях используется
2.2.2.2:443 по умолчанию

Блок stream слушает 1.1.1.1:443. После проверки конфига (nginx -t) и перезапуска можно тестировать.

Проверка
Открытие в браузере:

https://1.1.1.1 - ведет на HTTPS-сайт

Подключение по SSH:
$ ssh root@1.1.1.1 -p443
Enter passphrase for key "/home/user/.ssh/id_rsa":

Итог

В результате SSH становится доступен через порт 443 без нарушения работы HTTPS. Простое и практичное решение для обхода сетевых ограничений.

#learn
Ошибка новичка.
Опытный сисадмин на этот вопрос всегда отвечает:
5000 рублей за выезд, 3000 за диагностику. Деньги вперед


Типичный 😂 Сисадмин
Please open Telegram to view this post
VIEW IN TELEGRAM
LinkChecker

Нужно проверить сайт или документацию на битые ссылки? LinkChecker делает это автоматически и без ручной возни.

Что умеет:
1)проверяет внутренние и внешние ссылки
2)рекурсивно обходит каталоги
3)работает с HTML, XHTML, CSS и другими форматами
4)показывает отчет с ошибками и редиректами


apt install linkchecker -y

Проверка всех ссылок в каталоге:
linkchecker dir/

Проверка только внешних ссылок:
linkchecker --check-extern dir/


Если есть проблемы, утилита выведет список ссылок и HTTP-коды ошибок, например 404.

#utility
Notepad++ мог скачать малварь через апдейтер 😱

Разработчики Notepad++ экстренно выкатили версию 8.8.9, выяснилось, что механизм автообновления редактора (тот самый GUP.exe) годами толком не проверял подлинность скачиваемых файлов. Этим воспользовались хацкеры, которые начали перехватывать трафик апдейтера и подсовывать пользователям вместо новой версии редактора троян.

Апдейтер стучится за обновлением, но из-за отсутствия нормальной криптографической проверки перенаправляется на вредоносный сервер. В итоге в папку %TEMP% прилетает файл AutoUpdater.exe, который вместо патча начинает активно собирать инфу о системе... запускает netstat, systeminfo, tasklist и whoami. Собранные данные потом сливаются на публичный файлообменник temp.sh через системный curl.

В новой версии 8.8.9 наконец-то прикрутили жесткую проверку цифровой подписи установщика, так что теперь, если подпись не сойдется, обновление прервется.

Типичный 🥸 Сисадмин
Please open Telegram to view this post
VIEW IN TELEGRAM
Bash-скрипт для быстрой проверки доступности узлов и сервисов.

Скрипт использует утилиту ping для определения, отвечает ли указанный IP-адрес или hostname.
#!/bin/bash

# Request IP address or hostname from user
read -p "Specify IP address or hostname: " ip

# Send one ICMP request with timeout
if ping -c 1 -W 2 "$ip" &> /dev/null
then
echo "[OK] Host $ip is responding"
else
echo "[ERROR] Host $ip is not reachable"
fi

Легко модифицируется под собственные задачи.

Подходит для оперативной проверки доступности веб-сервера, VPS, сетевого оборудования или любого другого узла. Достаточно указать адрес - скрипт сообщит, есть ли ответ или нет.

#learn
🐧 Microsoft - лучший маркетолог Linux.

В западных интернетах на полном серьезе обсуждают, что 2025 год стал годом Linux на десктопе, потому что Windows стала слишком дорогой и переходит на подписки. Нам, конечно, не то пальто читать про дороговизну софта, который активируется одной командой в PowerShell (спасибо KMSAuto и MAS 👍), но суть они уловили верно. Microsoft делает всё, чтобы даже трофейная версия Windows вызывала рвотный рефлекс у любого адекватного.

Проблема современной Windows у нас не в том, что ее нельзя напрямую купить (кому надо - тот купит на торрентах), а в том, что она превратилась в разжиревшего шпиона. 41 уязвимость нулевого дня за год это цветочки. Ягодки это Microsoft Recall и Copilot, которые невозможно нормально выпилить. Раньше мы боролись с телеметрией правкой реестра, а теперь ОС буквально скринит твой рабочий стол и отправляет данные для анализа в облако, к которому даже доступа официального нет. Плюс искусственное устаревание железа... Windows 11 плюет в лицо владельцам вполне бодрых процессоров 3-5 летней давности, которые в текущих экономических реалиях менять никто не собирается.

В итоге мы пришли к парадоксальной ситуации. В корпоративном секторе нас пересаживают на Astra и RedOS (Debian/RHEL с нюансами), а дома люди потихоньку уходят на Linux. Windows превращается в терминал для показа рекламы и сбора данных, и даже народная лицензия 👨‍🦳 не спасает от того факта, что система живет своей жизнью, нагружая ресурсы бесполезным ИИ-мусором.

Даже пиратская Windows становится невыносимой 🏴‍☠️

Типичный
🎄 Сисадмин
Please open Telegram to view this post
VIEW IN TELEGRAM
💯3
Краткая памятка по tcpdump.

-nn - отключаем DNS-резолвинг.
-i - сетевой интерфейс - всегда указывай текущий, а не оставляй по умолчанию.

Снятие трафика конкретного сервиса (порт 443)
tcpdump -nn -i eth0 tcp port 443 -w /tmp/api443.pcap

Фиксируется только нужное соединение. Подходит для разбора SYN, RST и сетевых задержек.

Отлов SNI (когда сайт открывается нестабильно)
tcpdump -nn -i eth0 -vvv -s 0 -A port 443 | grep -i "server_name"

Отображает фактический SNI, который отправляет клиент. Критично при диагностике SSL.

DNS и типовые ошибки (NXDOMAIN / SERVFAIL)

Все DNS-запросы:
tcpdump -nn -i eth0 udp port 53 or tcp port 53


Только ошибки:
tcpdump -nn -i eth0 -vv udp port 53 | grep -Ei "ServFail|NXDomain"


Поиск оборванных TCP-сессий (RST)
tcpdump -nn -i eth0 'tcp[tcpflags] & tcp-rst != 0'

Полезно, когда соединение обрывается без очевидных причин.

Проверка асимметрии трафика или ECMP
tcpdump -nn -i eth0 'tcp[tcpflags] == tcp-syn'

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

Снятие трафика вокруг конкретного хоста
tcpdump -nn -i eth0 host 10.10.22.15 -w /tmp/host.pcap

Минимальный дамп строго по одному IP.

Ротация дампов (чтобы не положить диск)
tcpdump -nn -i eth0 -s 0 -w trace-%F-%H%M%S.pcap -G 60 -W 5


#learn
👍1
Подстановка последнего аргумента без копипасты

Сколько раз было так: выполнили команду вида
cp report.txt /var/tmp/workdir/

а через пару секунд понадобилось:
cd /var/tmp/workdir/


Можно не повторять. Bash уже помнит последний аргумент.

Alt + . - вставка последнего аргумента

В любой момент нажмите Alt + . и bash подставит последний аргумент из предыдущей команды.
cp report.txt /var/tmp/workdir/
cd <Alt+.>


Результат:
cd /var/tmp/workdir/

Нажимайте Alt + . несколько раз подряд, чтобы перебрать аргументы из истории - bash листает их назад.

Альтернатива через history: !$ и !.
То же самое, но в виде подстановки из истории:

cd !$
или
cd !.


!$ - последний аргумент предыдущей команды.
!. - тот же эффект, но безопаснее, так как разные шеллы могут по-разному интерпретировать $.

Практические примеры
Удалить каталог, который только что создали:
mkdir cache_dir
rm -r !$


Скопировали и сразу перешли внутрь:
cp -r app_source /srv/apps/
cd !$


Переместили файл и тут же открыли его:
mv access.log /var/log/old/
vim !$


Копирование в несколько мест подряд:
cp archive.tar.zst /mnt/storage/
cp !$ /srv/archives/


Меньше ручного ввода, меньше опечаток, выше скорость работы в shell.

#learn
🤡 Даже создатель JavaScript в шоке от того, во что превратилась Windows 11

Есть такой бородатый анекдот про то, что Windows скоро превратится в загрузчик для браузера. В 2025 году это перестало быть шуткой. Брендан Айк, человек-легенда, создавший язык JavaScript и основавший Mozilla/Brave, публично раскритиковал Microsoft за тотальное засилье веб-технологий в десктопной ОС. По его словам, главная проблема Windows 11 - это банальная лень разработчиков, которые вместо нативного кода везде пихают жирный WebView2 и Electron. Айк знает, о чем говорит, т.к. он видел смерть FirefoxOS, которая тоже пыталась строить интерфейс на вебе.

Ситуация и правда патовая. Microsoft ($3.5 трлн капитализации) не может написать нативный календарь. Новая панель виджетов в Windows 11 это просто веб-страницы. Вы нажимаете на часы в трее, а система в фоне спавнит процессы Edge, отжирая 100+ МБ оперативки ради отображения даты. Зеленый мессенджер недавно деградировал с нативного WinUI обратно на WebView2, и теперь в простое отъедает гигабайт памяти. Teams туда же.

Но чемпионом по оптимизации 🏥 стал Discord. Разработчики официально признали, что их Electron-монстр течет как дырявое ведро, и не придумали ничего лучше, чем внедрить функцию автоматического перезапуска клиента, если он начинает жрать больше 4 ГБ оперативной памяти. Вдумайтесь... чат для геймеров потребляет больше ресурсов, чем игры десятилетней давности, и решение проблемы это выключить и включить 😂

Айк справедливо заметил, что Web UX можно сделать хорошо, но это требует времени и прямых рук. А у современного БигТеча нет ни того, ни другого. Им проще завернуть сайт в exe-шник, заставить пользователя купить 64 ГБ RAM и назвать это современным экспириенсом. Когда даже создатель технологии говорит "остановитесь, вы делаете дичь", это, пожалуй, приговор всей индустрии 😱

Типичный
🎄 Сисадмин
Please open Telegram to view this post
VIEW IN TELEGRAM
Минимальный P2P-чат через Netcat

Никакой магии, только Bash и TCP.
Wiki: Netcat

Клиентская сторона

Пишем элементарный Bash-скрипт.

Создаем файл talker.sh
#!/bin/bash

# Отображаемое имя
NICKNAME="$1"
REMOTE_HOST="$2"
REMOTE_PORT="$3"

# Читаем ввод и добавляем подпись
(
while read text; do
echo "[$NICKNAME] $text"
done
) | nc "$REMOTE_HOST" "$REMOTE_PORT"


Выдаём права:
chmod +x talker.sh


Сторона приема

На принимающем узле ничего городить не нужно.
Просто поднимаем прослушивание порта:

nc -lvp 5201

Порт может быть любым, главное чтобы он был открыт в фаерволе и использовался TCP.

Как это выглядит вживую
Терминал отправителя:
./talker.sh alpha 172.16.16.30 5201
Привет всем
Как связь?


Терминал принимающей стороны:
nc -lvp 5201
Listening on 0.0.0.0 5201
Connection received on 172.16.16.31 46656
[alpha] Привет всем
[alpha] Как связь?

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

#learn
Всех с НГ :)
А я продолжу смотреть в мониторинг, и надеяться на спокойную работу, и нормальный аптайм моих серверов.

#meme
🎉4
🏴‍☠️ KMSAuto с сюрпризом

В Южной Корее приняли предпринимателя из Литвы, который преподал индустрии мастер-класс по монетизации человеческой жадности. Он умудрился заразить 2.8 миллиона компьютеров, используя самый популярный софт в мире... активатор KMSAuto. Схема атаки как эталонная социальная инженерия, помноженная на техническую безграмотность пользователей. Жертва сама находит софт, сама скачивает его и, самое главное, сама отключает Defender или добавляет файл в исключения, потому что... ну это же кряк, он всегда детектится 🤔

Софт запускается от имени Админа (иначе службу KMS и драйвер не поставить), и в этот момент вместе с ключом активации в систему залетает Клиппер. Зловред тихо висит в процессах, хукает буфер обмена через WinAPI и ждет своего часа. Как только регулярное выражение (RegEx) детектит строку, похожую на адрес криптокошелька (BTC, ETH, TRC20 и тд), скрипт на лету подменяет её на кошелек злоумышленника 🤑

Заметить подмену глазами практически нереально. Большинство людей проверяют только первые и последние 4 символа адреса, а современные генераторы позволяют хакерам создавать тысячи кошельков с похожими хвостами специально для таких атак. В итоге пользователь копирует адрес, вставляет, жмет Отправить... и деньги улетают в никуда. Таким нехитрым способом автор кряка заработал $1.2 млн, не написав ни строчки сложного эксплойта.

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

☢️ @zeroday_log
Please open Telegram to view this post
VIEW IN TELEGRAM
Полезный Python-трюк для работы с сетями: ipaddress в стандартной библиотеке

Когда нужно быстро проверить IP-адреса, маски подсетей или принадлежность хоста сети, не обязательно тянуть внешние пакеты. Python уже содержит мощный модуль ipaddress.

Чем полезно

Проверка принадлежности адреса подсети
Удобный парсинг IPv4 и IPv6
Генерация диапазонов IP
Всё встроено в Python, сторонние зависимости не нужны

import ipaddress

# Создаем подсеть
net = ipaddress.ip_network("192.168.1.0/24")

# Проверяем, входит ли IP в подсеть
print(ipaddress.ip_address("192.168.1.42") in net) # True
print(ipaddress.ip_address("10.0.0.5") in net) # False

# Перебираем доступные адреса (без network и broadcast)
for ip in net.hosts():
print(ip)
break # выведет первый usable IP

# IPv6 работает точно так же
ipv6 = ipaddress.ip_network("2001:db8::/32")
print(ipaddress.ip_address("2001:db8::1") in ipv6) # True

Что важно понимать

ip_network создаёт объект сети, а не строку
ip_address создаёт числовое представление IP
Проверка через in идёт по диапазону адресов, а не по строковому совпадению
hosts() возвращает только usable адреса
IPv4 и IPv6 используют одинаковый API


Где применять на практике

Проверка trusted-сетей в firewall-скриптах
Фильтрация логов по подсетям
Валидация пользовательского ввода
Генерация ACL и access-листов
DevOps и CI проверки конфигов


#learn
Это лучшая заглушка на 500 ошибку, которую я только видел :)

#meme
🤡 Самый тупой взлом года. Элита даркнета не осилила chmod, админы BreachForums выложили users.sql в корень веб-сервера.

Случилось прекрасное. Главная цифровая помойка планеты, форум BreachForums, где обычно торгуют нашими с вами базами данных, сама оказалась в роли потерпевшей. В паблик выложили свежий дамп, содержащий данные 325 000 пользователей этой площадки. В утечке полный набор для деанонимизации... никнеймы, email-адреса, хеши паролей (тут хотя бы Argon2, а не MD5 😎) и, что самое неприятное (или для кого-то приятное) IP-адреса и личные сообщения. Теперь мамкины хакеры, которые вчера покупали логи с вашего взломанного RDP, сегодня ищут себя в базе Have I Been Pwned. Карма работает?

Особого внимания заслуживает причина провала. Текущий администратор форума (под ником N/A) выступил с объяснением, за которое в приличной компании увольняют одним днём. Оказывается, дамп утек еще в августе 2025 года во время миграции движка. Админы просто временно оставили таблицу пользователей в незащищенной папке на веб-сервере. 😗 Представьте уровень иронии... люди, которые называют себя элитой киберпреступности и продают доступы ко всяким Пентагонам, совершили ошибку эникея-стажера, который впервые выкладывает сайт на хостинг и забывает убрать лишнее из корня сайта.

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

Типичный 🥸 Сисадмин
Please open Telegram to view this post
VIEW IN TELEGRAM
😁4
Как выяснить, какие файлы недавно изменялись в системе?

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

Показать все файлы, которые были изменены или созданы за последние 10 минут:
find /data -xdev \( -path /kernel -o -path /hardware -o -path /runtime -o -path /devices \) -prune -o \
-type f -mmin -10 -print 2>/dev/null


Проверить, что трогали в каталоге конфигураций за последние сутки:
find /config -type f -mtime -1


Определить, какие исполняемые файлы обновлялись недавно:
find /apps -type f -perm /111 -mtime -1

Флаг /111 означает поиск файлов, у которых выставлен хотя бы один бит исполнения.

Посмотреть, какие конфигурационные файлы редактировались последними с точным временем:
find /config -type f -printf '%T@ %p\n' 2>/dev/null | sort -nr | head


Для локального разбора файловых логов:
ls -lt /logs | head

Метод применим только к файловым логам - журналы journald сюда не входят.

Для анализа системного журнала:
journalctl --since "10 min ago"


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

#learn
👍2