Обычные логи не всегда отвечают на главный вопрос: кто изменил конфигурацию и какой процесс это сделал? Для таких задач в Linux есть
auditd. Он фиксирует обращения к файлам на уровне ядра и сохраняет пользователя, процесс, команду и время события.
apt install auditd audispd-plugins
systemctl enable --now auditd
Правила лучше хранить в отдельном файле:
nano /etc/audit/rules.d/critical-files.rules
-w /etc/passwd -p wa -k identity
-w /etc/group -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/gshadow -p wa -k identity
-w /etc/sudoers -p wa -k sudoers
-w /etc/sudoers.d/ -p wa -k sudoers
-w /etc/ssh/sshd_config -p wa -k ssh_config
-w /root/.ssh/ -p wa -k ssh_keys
-w /etc/systemd/system/ -p wa -k systemd_units
-w /etc/cron.d/ -p wa -k cron_changes
-w /etc/crontab -p wa -k cron_changes
-w /etc/audit/ -p wa -k audit_config
-w - файл или каталог для наблюдения -p w - запись в файл -p a - изменение атрибутов и прав -k - удобная метка для поиска
augenrules --load
auditctl -l
Ищем изменения, например, SSH-конфига:
ausearch -k ssh_config -i
Посмотреть события за сегодня:
ausearch -k sudoers -ts today -i
Краткий отчет по измененным файлам:
aureport -f -i
какой файл изменили
UID и реального пользователя
PID процесса
исполняемую команду
успешность операции
точное время
#linux #auditd
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤3🔥1
Bonding объединяет несколько сетевых интерфейсов в один логический
bond0. Обычно его используют для:• резервирования сетевого подключения
• распределения нагрузки
• защиты от отказа кабеля, порта или сетевой карты
• увеличения суммарной пропускной способности
Два самых популярных режима -
active-backup и 802.3ad.
[NetDev]
Name=bond0
Kind=bond
[Bond]
Mode=active-backup
MIIMonitorSec=100ms
Primary=eno1
Главный плюс - простота. Специальная настройка коммутатора обычно не требуется. Подходит, когда нужна прежде всего отказоустойчивость.
[Bond]
Mode=802.3ad
MIIMonitorSec=100ms
LACPTransmitRate=fast
TransmitHashPolicy=layer3+4
Но на коммутаторе порты должны быть объединены в один LAG с поддержкой LACP.
Важно понимать: одно TCP-соединение обычно не получит скорость двух интерфейсов. Трафик распределяется по хешу между разными потоками.
Проверить состояние bonding:
cat /proc/net/bonding/bond0
Там видно:
текущий активный интерфейс
состояние каждого slave
скорость и duplex
количество переключений
состояние LACP
Дополнительно:
ip -br link
ip -s link show bond0
ethtool eno1
• включили802.3ad, но не настроили LAG на коммутаторе
• порты подключены к разным независимым коммутаторам без MLAG/stack
• IP назначен одновременно наbond0и физические интерфейсы
• интерфейсы имеют разную скорость или MTU
• забыли удалить старые маршруты и конфигурации slave-интерфейсов
• считают, что LACP удвоит скорость одного соединения
• проверяют толькоlink up, хотя трафик через порт не проходит
#linux #bonding #network
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6
Когда нужно понять, какой процесс кого запустил, обычного списка
ps часто недостаточно. Намного удобнее посмотреть процессы в виде дерева: родительский процесс -> дочерние процессы -> подпроцессы. Есть несколько простых способов.t. Это переключит список в режим Tree View. Так удобно быстро посмотреть структуру процессов прямо в интерактивном интерфейсе: например, какие worker-процессы запустил nginx, systemd или приложение.Но если процессов много и вывод нужно спокойно изучить, интерактивный интерфейс бывает не самым удобным.
ps axf
Ключ
f показывает процессы в виде ASCII-дерева. Если вывод большой, его можно сохранить в файл:
ps axf > ~/process-tree.txt
После этого список удобно открыть в редакторе, искать по нему и прикладывать к разбору инцидента.
Более информативный вариант:
ps -eo user,pid,ppid,stat,lstart,cmd --forest
Здесь дополнительно видны пользователь, PID, PPID, статус, время запуска и полная команда.
pstree входит в пакет psmisc, который часто уже установлен в системе.Установка:
apt install psmisc
Базовый запуск:
pstree
Показать PID:
pstree -p
Показать аргументы команд:
pstree -a
Вывести дерево для конкретного процесса:
pstree -p 1234
Или для пользователя:
pstree -p username
Полезные параметры:
-p- показывает PID-a- показывает аргументы командной строки-n- сортирует процессы по PID-u- показывает смену пользователя-s- показывает родителей указанного процесса-c- не объединяет одинаковые ветки
Например:
pstree -p -a -u
#linux #terminal #processes
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5
Типичная ситуация: после установки обновлений, компонентов или серверных ролей отправляем Windows в перезагрузку и видим сообщение:
Выполняется подготовка Windows.
Не выключайте компьютер.
В большинстве случаев лучше действительно подождать. Установка обновлений может занимать от нескольких минут до нескольких часов, особенно на медленном диске или при большом накопительном обновлении. Но если экран не меняется очень долго, хочется сначала разобраться, что происходит, а не сразу выключать сервер по питанию.
Локально войти в систему на этом этапе нельзя, однако иногда удаленные службы уже доступны. Подключиться к консоли можно через PsExec:
PsExec.exe \\192.168.158.10 -u localadmin powershell.exe
Если нужно запустить процесс в интерактивной сессии:
PsExec.exe \\192.168.158.10 -i 1 -u localadmin powershell.exe
В открывшейся консоли первым делом стоит проверить свободное место:
Get-Volume
Посмотреть процессы с высокой нагрузкой:
Get-Process |
Sort-Object CPU -Descending |
Select-Object -First 15 Name, Id, CPU
И найти службы, зависшие в переходном состоянии:
Get-CimInstance Win32_Service |
Where-Object State -eq "Stop Pending" |
Select-Object Name, DisplayName, ProcessId, State
Часто во время обновлений в списке встречается служба установщика модулей Windows:
TrustedInstaller
Перед завершением процесса желательно проверить журналы и убедиться, что установка действительно не продвигается:
Get-Content C:\Windows\Logs\CBS\CBS.log -Tail 50
Принудительное завершение процесса - крайняя мера:
taskkill /PID <ProcessId> /F
После этого система может продолжить выключение или выполнить откат незавершенных изменений.
Когда Windows загрузится, стоит проверить хранилище компонентов и системные файлы:
DISM /Online /Cleanup-Image /RestoreHealth
sfc /scannow
Дополнительно проверьте результат установки обновлений:
Get-WinEvent -FilterHashtable @{
LogName = "System"
StartTime = (Get-Date).AddHours(-6)
} |
Where-Object Message -match "update|servicing|TrustedInstaller" |
Select-Object TimeCreated, Id, LevelDisplayName, Message
#windows #psexec
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15
Идея простая: разрешаем только то, что действительно нужно, все остальное блокируем. На бумаге это выглядит идеально. На практике одна неправильная команда - и SSH-сессия заканчивается вместе с доступом к серверу.
Поэтому default deny лучше внедрять не одной командой, а поэтапно.
nftables базовая политика может выглядеть так:
table inet filter {
chain input {
type filter hook input priority 0;
policy drop;
iif lo accept
ct state established,related accept
tcp dport 22 ip saddr 10.20.0.0/16 accept
tcp dport { 80, 443 } accept
}
}
Критически важные строки:
iif lo accept
ct state established,related accept
Первая не ломает localhost-взаимодействия сервисов.
Вторая разрешает пакеты уже установленных соединений.
policy drop сначала выпишите все, что сервер реально принимает:
ss -lntup
Проверьте текущие соединения:
ss -nt
И не забудьте про инфраструктурный трафик:
SSH / RDP
мониторинг
бэкап
DNS
NTP
балансировщики
кластеры
1. Создать явные allow-правила.
2. Проверить доступ из отдельной сессии.
3. Сохранить текущую SSH-сессию открытой.
4. Иметь доступ через console/IPMI/iDRAC/VM console.
5. Только после этого включать
drop.
nft -c -f /etc/nftables.conf
Ключ
-c проверит синтаксис, не применяя правила.
echo "nft flush ruleset" | at now + 5 minutes
Применили firewall, проверили доступ - отменили задание:
atq
atrm <job_id>
Если сами себя отрезали, через несколько минут правила сбросятся.
#firewall #nftables
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Иногда не нужен отдельный мониторинг, графики и дашборд. Нужно просто увидеть, как меняется состояние системы прямо сейчас. Для этого в линукс есть простая команда
watch. Она периодически запускает другую команду и обновляет вывод в терминале.Например, смотреть свободное место:
watch df -h
По умолчанию команда выполняется каждые 2 секунды.
watch -n 1 df -h
Теперь обновление идет раз в секунду.
watch -d free -h
watch выделит строки и значения, которые изменились между обновлениями.cмотреть рост файловой системы
watch -n 1 'du -sh /var/log'
следить за памятью
watch -n 1 free -h
наблюдать TCP-соединения
watch -n 1 'ss -s'
проверять очередь systemd-задач
watch -n 1 'systemctl --failed'
следить за конкретным процессом
watch -n 1 'ps -p 1234 -o pid,%cpu,%mem,etime,cmd'
смотреть состояние RAID
watch -n 1 cat /proc/mdstat
наблюдать число файлов в каталоге
watch -n 1 'find /data/incoming -type f | wc -l'
watch:
watch -t 'ss -s'
watch -n 1 'ps aux | sort -rk 3 | head'
#linux #watch
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Иногда сервер зависает настолько неприятно, что обычные команды:
reboot
shutdown -r now
systemctl reboot
либо не отрабатывают, либо висят вместе со всей системой. В таких случаях у Linux есть более низкоуровневый механизм - Magic SysRq.
echo b > /proc/sysrq-trigger
Она отправляет команду на перезагрузку напрямую ядру. По эффекту это примерно как нажать аппаратный Reset.
• не завершает процессы корректно;
• не размонтирует файловые системы;
• не делает sync;
• не ждет systemd;
• практически сразу перезапускает машину.
Именно поэтому она может помочь там, где обычный reboot уже не работает.
Если shell уже открыт, запись в
/proc/sysrq-trigger может сработать даже в довольно поврежденной системе.
cat /proc/sys/kernel/sysrq
0 - SysRq отключен
1 - разрешены все функции
>1 - разрешена только часть функций по битовой маске
echo h > /proc/sysrq-trigger
Подсказка обычно попадет в kernel log:
journalctl -k
или:
dmesg
echo s > /proc/sysrq-trigger
пытается синхронизировать файловые системы.
echo u > /proc/sysrq-trigger
пытается перемонтировать файловые системы в read-only.
И только потом:
echo b > /proc/sysrq-trigger
Есть даже известная последовательность: REISUB, где поэтапно пытаются вернуть управление клавиатурой, завершить процессы, синхронизировать диски, перемонтировать FS в read-only и только затем перезагрузиться.
#linux #reboot
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤4
При установке обновлений Windows рано или поздно встречаются ошибки вида:
0x80070422
По одному шестнадцатеричному коду не всегда понятно, что именно произошло. Но в Windows есть встроенная утилита, которая умеет переводить многие системные коды ошибок в нормальное текстовое описание -
certutil.exe. Например:
certutil -error 0x80070422
В ответ получим примерно следующее:
ERROR_SERVICE_DISABLED
The service cannot be started, either because it is disabled or because it has no enabled devices associated with it.
То есть вместо непонятного:
0x80070422
мы сразу получаем подсказку: служба отключена и не может быть запущена.
Дальше уже можно искать проблему предметно. Например, проверить службы Windows Update:
Get-Service wuauserv,bits,cryptsvc
И посмотреть их состояние:
Get-Service wuauserv | Select-Object Name,Status,StartType
certutil -error полезен не только для Windows Update. Команда помогает расшифровывать различные HRESULT, Win32 и системные коды ошибок, которые встречаются в:Event Viewer
PowerShell
установщиках
службах Windows
DISM
сетевых компонентах
сертификатах и криптографии
Например:
certutil -error 0x80070005
вернет:
E_ACCESSDENIED
Access is denied.
А это уже намного полезнее для диагностики, чем просто код.
#windows #troubleshooting
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
Иногда TCP-соединение выглядит живым, хотя в реальности удаленная сторона уже давно недоступна.
Например:
клиент выключился;
оборвался VPN;
пропал маршрут;
firewall удалил state;
NAT-сессия протухла;
сервер завис без корректного закрытия соединения.
Если по соединению нет трафика, приложение может еще долго считать его активным.
Для таких случаев в TCP есть механизм keepalive.
sysctl net.ipv4.tcp_keepalive_time
sysctl net.ipv4.tcp_keepalive_intvl
sysctl net.ipv4.tcp_keepalive_probes
Типичная логика такая:
tcp_keepalive_time - сколько ждать простоя до первой проверкиtcp_keepalive_intvl - интервал между проверкамиtcp_keepalive_probes - сколько неудачных попыток сделатьНапример:
sysctl -w net.ipv4.tcp_keepalive_time=300
sysctl -w net.ipv4.tcp_keepalive_intvl=30
sysctl -w net.ipv4.tcp_keepalive_probes=5
В этом случае после 5 минут простоя ядро начнет проверять соединение, а при отсутствии ответа будет делать повторные попытки.
cat > /etc/sysctl.d/99-tcp-keepalive.conf <<'EOF'
net.ipv4.tcp_keepalive_time=300
net.ipv4.tcp_keepalive_intvl=30
net.ipv4.tcp_keepalive_probes=5
EOF
sysctl --system
ss -nto
ss -ti
Но есть важный нюанс: системные значения работают только для сокетов, где приложение вообще включило
SO_KEEPALIVE. То есть одной настройки sysctl иногда недостаточно. Например, nginx, PostgreSQL, HAProxy, SSH и различные runtime могут иметь собственные keepalive-параметры.
ServerAliveInterval 30
ServerAliveCountMax 3
Это уже не TCP keepalive, но задача похожая - быстрее понять, что удаленная сторона больше не отвечает.
#tcp #keepalive
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Как быстро разобраться с дисками и маунтамиКогда на сервере несколько дисков, LVM, отдельные разделы и сетевые маунты, быстро понять "что куда примонтировано" бывает не так просто. Для базовой диагностики хватает трех команд:
lsblk
Покажет диски, разделы, LVM и точки монтирования.
Более полезный вариант:
lsblk -f
Здесь дополнительно видны:
файловая система;
UUID;
label;
mount point
Например:
sda
├─sda1 ext4 /boot
└─sda2 LVM2_member
├─vg-root ext4 /
└─vg-data xfs /data
Если нужно увидеть размеры и тип устройств:
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS
blkid
Полезно, когда нужно проверить запись в
/etc/fstab.Например:
/dev/sdb1: UUID="a1b2-c3d4" TYPE="ext4"
После этого можно использовать UUID вместо
/dev/sdb1:
UUID=a1b2-c3d4 /backup ext4 defaults 0 2
Это надежнее, потому что имя устройства после перезагрузки теоретически может измениться.
findmnt
Показывает дерево текущих маунтов.
Для конкретного каталога:
findmnt /data
Очень удобно, когда непонятно, на какой файловой системе лежит путь:
findmnt -T /var/lib/myapp/data/file.db
Команда покажет mount point, устройство и тип файловой системы, которые реально обслуживают этот файл.
Посмотреть только ext4:
findmnt -t ext4
Проверить
/etc/fstab:
findmnt --verify
У каждой команды своя задача:
lsblk - какие блочные устройства есть и как они связаны blkid - UUID, LABEL и тип файловой системы findmnt - что и куда реально примонтировано#storage #filesystem
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4