Admin Future
239 subscribers
50 photos
1 video
4 files
87 links
Превращаем эникейщиков в System Architects.
🚀 Твой навигатор в мире IT-инфраструктуры:

▪️ Hard Skills: Linux, Windows, Network, Security
▪️ Tools: Лучший софт и скрытые фишки
▪️ Mindset: Как думать, чтобы платили много


Админ - @maksimshap
Download Telegram
🎅 Advent of Sysadmin 2025: Челлендж для тех, кто устал от LeetCode

Пока программисты решают Advent of Code, для нас запустили Advent of Sysadmin. Это серия ежедневных задач на живых серверах (в браузере), где нужно что-то починить или взломать.

Примеры задач этой недели:

Dec 05: "La Rinconada" — Вы зашли под юзером без sudo. Найдите способ поднять привилегии, используя криво настроенный скрипт бэкапа.

Dec 08: "Kortenberg" — Nginx выдает 403 Forbidden, права на файл 777, SELinux выключен. В чем причина? (Спойлер: лимиты файловых дескрипторов).

Идеально, чтобы размять мозги за утренним кофе или дать задачу джуну на собеседовании.
🔗 Ссылка
https://sadservers.com/advent

#learning #challenge #sysadmin #linux #fun
metrics: SLA, SLO, SLI — Хватит путать эти аббревиатуры

На собеседовании на позицию Lead/Architect этот вопрос валит 50% кандидатов. Все говорят: «Ну, это про аптайм». Давайте разберем раз и навсегда.

1. SLI (Indicator) — Что мы меряем? Это конкретная метрика в графике.
Пример: Количество 500-х ошибок HTTP или Latency (задержка) ответа.
Факт: «Сейчас 99.5% запросов успешны».

2. SLO (Objective) — Какая у нас цель? Это внутренняя планка качества, к которой стремится команда.
Пример: «Мы хотим, чтобы 99.9% запросов были успешны».
Зачем: Если мы нарушаем SLO, мы останавливаем релизы новых фич и чиним стабильность (Error Budget).

3. SLA (Agreement)
— За что нас накажут? Это внешний контракт с клиентом (юридический документ).
Пример: «Если аптайм упадет ниже 99.0%, мы вернем вам 30% оплаты».
Важно: SLA всегда ниже, чем SLO. У вас должен быть буфер безопасности.

Памятка архитектора: Не обещайте бизнесу 100% SLA. Это технически невозможно и бесконечно дорого. Обещайте «три девятки» (99.9%) и спите спокойно.

#sre #devops #metrics #sla #architecture #learning
🎅 PowerShell: Спасаем пользователей от блокировки в Новый год

Декабрь. Пользователи уходят в отпуск на 2-3 недели. Сценарий фильма ужасов: у сотрудника истекает пароль 3 января. Он пытается подключиться к VPN/почте из дома, получает ошибку «Password Expired» и звонит вам в праздники.

Давайте найдем всех, у кого пароль протухнет в ближайшие 30 дней, и предупредим их.

Скрипт:

$DaysToWarn = 30
$Users = Get-ADUser -Filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} -Properties msDS-UserPasswordExpiryTimeComputed, EmailAddress

foreach ($User in $Users) {
$ExpiryDate = [datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")
$DaysLeft = ($ExpiryDate - (Get-Date)).Days

if ($DaysLeft -ge 0 -and $DaysLeft -lt $DaysToWarn) {
Write-Host "⚠️ $($User.Name): Пароль истекает через $DaysLeft дн. ($ExpiryDate)" -ForegroundColor Yellow

# Тут можно раскомментировать отправку письма
# Send-MailMessage -To $User.EmailAddress -Subject "Смените пароль!" ...
}
}

Запустите сегодня. Это спасет ваши новогодние каникулы.

#powershell #activedirectory #scripting #automation #newyear
🛡 Fail2Ban устарел. Встречайте CrowdSec

Мы годами ставили fail2ban, чтобы банить ботов, брутфорсящих SSH. Он хороший, но он — одиночка. Он знает только то, что происходит на вашем сервере.

В 2025 году тренд — CrowdSec. Это "Waze для кибербезопасности".

В чем киллер-фича: Если IP-адрес атакует моего соседа (тоже пользователя CrowdSec), этот IP попадает в черный список. Через 5 минут мой сервер уже знает об этом IP и блокирует его превентивно.

Почему стоит перейти:

Коллективный разум: База репутации IP обновляется в реальном времени.

Универсальность: Парсит логи не только SSH, но и Nginx, Docker, Kubernetes, AWS CloudTrail.

Bouncers: Умеет банить не только через iptables, но и на уровне Cloudflare, Nginx или даже отправлять Captcha.

Установка:

curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | sudo bash
sudo apt install crowdsec

Один в поле не воин. Объединяйте сервера в защиту.

#security #linux #opensource #crowdsec #fail2ban #tools
👍2
🕵️‍♂️ MTR: Трассировка на стероидах

Когда интернет «лагает», мы привыкли запускать ping или traceroute. Но первый не показывает, на какой ноде теряются пакеты, а второй — это разовый снимок, который часто врет из-за ICMP-фильтров.

Настоящий профи использует MTR (My Traceroute).

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

На что смотреть (Столбцы):
1. Loss%: Показывает потерю пакетов. Если Loss на 3-м прыжке, но на 4-м его нет — это просто провайдер игнорирует ICMP. Если Loss растет от прыжка к прыжку — это реальная проблема.
2. WRST (Worst): Худший отклик. Помогает поймать кратковременные всплески задержки (Jitter).

Команда дня (режим отчета для тикета провайдеру):

mtr -rw google.com

(-r — report, -w — wide. Выдает красивый текст, который можно смело слать в техподдержку)

#linux #network #mtr #troubleshooting #cli
🧹 PowerShell: Чистим старые профили пользователей

Знакомая ситуация: на терминальном сервере или ПК общего пользования за год накопилось 50 профилей уволенных или случайных людей. Диск C: кричит о помощи.

Не удаляйте папки вручную в C:\Users! Это сломает реестр. Делаем через WMI.

Скрипт (удалить профили старше 60 дней):

$Limit = (Get-Date).AddDays(-60)

# Получаем профили, которые не использовались более 60 дней
$Profiles = Get-CimInstance Win32_UserProfile |
Where-Object { $_.LastUseTime -lt $Limit -and $_.Special -eq $false }

foreach ($Profile in $Profiles) {
Write-Host "🗑 Удаляю профиль: $($Profile.LocalPath)" -ForegroundColor Yellow
$Profile | Remove-CimInstance
}

⚠️ Важно: Скрипт не тронет системные профили (Special). Но перед запуском убедитесь, что в списке нет вашего босса, который просто давно не заходил на этот сервер.

#windows #powershell #cleanup #sysadmin #automation
🌈 Linux: Хватит смотреть в серый tail -f

Логи в консоли — это поток боли для глаз. Давайте добавим красок, чтобы ошибки сами бросались в глаза. Используйте lnav (The Log File Navigator).

Почему это круто:
1. Авто-раскраска: Сама подсвечивает IP-адреса, даты, ошибки (красным) и предупреждения (желтым).
2. Слияние: Можно открыть 5 лог-файлов одновременно, и lnav перемешает их по времени в один поток. Идеально для отладки связки Nginx + PHP-FPM.
3. SQL-запросы: Можно писать SELECT * FROM log прямо в консоли.

Установка:

sudo apt install lnav

Просто введите lnav /var/log/nginx/access.log и почувствуйте себя в будущем.

#linux #logs #lnav #cli #productivity
🔥3
🐘 PostgreSQL: Почему база растет, если я удаляю данные?

Классика: вы удалили миллион строк из таблицы, а место на диске не освободилось. Добро пожаловать в мир MVCC (Multi-Version Concurrency Control).

В Postgres при удалении (DELETE) строка не стирается физически. Она помечается как «мертвая» (dead tuple). Но место всё ещё занято.

Ошибка джуна: Запустить VACUUM FULL. Это освободит место, НО заблокирует таблицу намертво (Access Exclusive Lock). Ваш прод встанет.

Путь Архитектора:

Настройте Autovacuum. Он должен работать агрессивнее, чтобы «мертвецы» не накапливались.

Используйте pg_repack (или pg_squeeze). Это расширение позволяет пересобрать таблицу и вернуть место ОС без блокировок чтения/записи.

Шпаргалка по проверке "вздутия" (Bloat): Вам не нужны сложные скрипты, поставьте pg-bloat-check или используйте запрос:

SELECT schemaname, relname, n_dead_tup, n_live_tup,
(n_dead_tup::float / n_live_tup::float) as bloat_ratio
FROM pg_stat_user_tables
WHERE n_dead_tup > 0;

Если bloat_ratio > 0.2 (20%) — пора звать автовакуум.

#postgresql #database #dba #performance #sql
🚀 Windows: Хватит гуглить инсталляторы. Используй Winget

В 2025 году открывать браузер, чтобы скачать Chrome, 7-Zip или VS Code — это моветон. В Windows уже встроен нативный пакетный менеджер, как apt или brew.

Встречайте Winget.

1. Установка софта одной командой:

winget install --id Microsoft.PowerToys
winget install --id 7zip.7zip

2. Обновление ВСЕГО софта разом: Это киллер-фича. Она обновляет даже то, что вы ставили вручную 5 лет назад.

winget upgrade --all

3. Экспорт софта для нового ПК: Готовите ноутбук новому сотруднику?
Слейте список со старого:

winget export -o packages.json

И накатите на новом:

winget import -i packages.json

Это превращает настройку Windows из "кликомании" в нормальный DevOps-процесс.

#windows #winget #cli #automation #productivity
👍3
🏎 Linux: iperf3 — когда "сеть тормозит"

Пользователь жалуется: "Файлы копируются медленно!". Сетевик говорит: "Линк гигабитный, порт зеленый, отстань".

Кто прав? Рассудит iperf3. Он меряет реальную пропускную способность TCP/UDP, а не физическую скорость порта.

Сценарий: Запускаем тест между сервером (где лежат файлы) и клиентом.
На сервере (режим Server):

iperf3 -s

На клиенте (режим Client):

# -c : ip сервера
# -P 4 : в 4 потока (чтобы нагрузить канал полностью)
# -R : Reverse mode (тест скачивания С сервера, а не заливки НА него)
iperf3 -c 192.168.1.10 -P 4 -R

Результат: Если порт 1 Gbit/s, а iperf показывает 940 Mbits/sec — сеть идеальна, проблема в дисках или протоколе SMB. Если показывает 100 Mbits/sec — ищите битый патч-корд, который свалился в 100Mb Half-Duplex.

#network #linux #troubleshooting #iperf #cli
🛡 Правило 3-2-1 устарело. Встречайте 3-2-1-1-0

Нас всех учили правилу бэкапов 3-2-1:
* 3 копии данных.
* 2 разных носителя.
* 1 копия офлайн (вне офиса).

В 2025 году, в эру программ-вымогателей (Ransomware), этого мало. Шифровальщики научились находить сетевые бэкапы и шифровать их тоже.

Новый стандарт — 3-2-1-1-0:
* 3 копии данных.
* 2 разных типа носителей.
* 1 копия вне офиса (Cloud/Remote).
* 1 копия Immutable (Неизменяемая) или Air-Gapped (Физически отключенная).

Immutable: Это флаг в S3 (AWS/MinIO) или Veeam Hardened Repository. Даже если хакер получит root-права, он не сможет удалить или зашифровать этот бэкап в течение заданного времени (например, 30 дней).

* 0 ошибок при проверке восстановления (SureBackup). Бэкап, который вы не тестово не развернули — это не бэкап, а надежда.

Проверьте свои репозитории. Если у вас нет Immutable-копии — вы беззащитны перед шифровальщиком.

#backup #security #ransomware #veeam #architecture #bestpractice
🔥2
🛑 Active Directory: Защита от «Упс, я удалил OU»

Знакомая история: админ хотел удалить компьютер, промахнулся мышкой и удалил целое подразделение (Organizational Unit) вместе с юзерами и группами. Восстановление из корзины (AD Recycle Bin) — это стресс. Лучше предотвратить.

Включаем Protect object from accidental deletion массово.

PowerShell-скрипт для всех OU:

# Импортируем модуль
Import-Module ActiveDirectory

# Ищем все OU, где защита ВЫКЛЮЧЕНА, и включаем её
Get-ADOrganizationalUnit -Filter * -Properties ProtectedFromAccidentalDeletion |
Where-Object { $_.ProtectedFromAccidentalDeletion -eq $false } |
Set-ADOrganizationalUnit -ProtectedFromAccidentalDeletion $true -PassThru |
Select-Object Name, DistinguishedName

Задача: Запустите это сегодня. Это тот самый «ремень безопасности», который однажды спасет вам карьеру. P.S. Чтобы реально удалить OU потом, галочку придется снять вручную.

#activedirectory #windows #powershell #security #failsafe
📄 Linux: gron — делаем JSON читаемым

Все знают утилиту jq. Она мощная, но синтаксис запросов там — это отдельный язык программирования, который вечно забываешь. Когда нужно просто "грепнуть" JSON, используйте gron.

Он превращает иерархический JSON в плоский список (greppable output).

Было (JSON):

{
"users": [
{ "name": "admin", "id": 1 },
{ "name": "guest", "id": 2 }
]
}

Стало (gron):

json.users[0].name = "admin";
json.users[0].id = 1;
json.users[1].name = "guest";
json.users[1].id = 2;

Кейс: Найти ID пользователя "guest".

gron users.json | grep "guest"
# Вывод: json.users[1].name = "guest";
# Ага, это индекс [1]!

Установка: sudo apt install gron или скачать бинарник с GitHub.

#linux #tools #json #cli #productivity #gron
👮‍♂️ Linux: Настраиваем sudo как Архитектор

Давать пользователю ALL=(ALL) ALL — это лень, граничащая с преступлением. Если разработчику нужно только перезапускать Nginx, дайте ему право только на это.

Редактируем файл (ТОЛЬКО через visudo!):

1. Создаем алиас команды (чтобы не писать пути):

Cmnd_Alias RESTART_NGINX = /usr/bin/systemctl restart nginx, /usr/bin/systemctl reload nginx

2. Даем права конкретной группе:

%web_team ALL=(root) NOPASSWD: RESTART_NGINX

Что мы сделали:
* %web_team — группа пользователей.
* (root) — от чьего имени запускаем.
* NOPASSWD — не спрашивать пароль (удобно для скриптов).
* RESTART_NGINX — разрешили только эти команды.

Теперь, если дев попытается сделать sudo rm -rf /, система вежливо его пошлет.

#linux #security #sudo #accesscontrol #bestpractice
👍2
🤔 Проблема X-Y: Почему пользователи врут (не специально)

Один из главных навыков Сеньора — умение распознать X-Y Problem. Это сэкономит вам часы отладки.

Ситуация: Пользователь (или Джун) приходит и спрашивает:

«Как мне получить последние 3 символа строки в Bash?» (Это проблема Y)

Вы тратите время, пишете sed или awk команду. А потом выясняется, что он хотел узнать расширение файла (Проблема X), и ваше решение ломается на файлах типа .tar.gz.

Суть: Пользователь столкнулся с проблемой X. Он придумал кривое решение Y, но не знает, как его реализовать. И спрашивает вас про Y, скрывая реальную задачу.

Решение: Всегда задавайте вопрос: «А какую конечную задачу ты пытаешься решить?». В 90% случаев окажется, что нужно не «парсить строку», а просто взять готовую утилиту или API.

Не чините костыли. Ищите причину.

#softskills #problemsovling #psychology #adminlife #management
🕵️‍♂️ Linux: Кто трогал этот файл? (auditd)

Иногда ls -l и last недостаточно. Вам нужно знать: кто, когда и какой процесс изменил критический конфиг /etc/passwd или удалил файл базы данных.

Включаем подсистему аудита ядра — auditd.

1. Ставим слежку за файлом:

# -w : watch (следить за файлом)
# -p wa : permission write/attribute (запись или смена прав)
# -k passwd_change : ключ поиска (тег для логов)
auditctl -w /etc/passwd -p wa -k passwd_change

2. Смотрим отчет: Кто трогал файл?

ausearch -k passwd_change

Вы увидите всё: PID процесса, UID пользователя и даже команду, которой это было сделано. Незаменимо при разборе инцидентов.

#linux #security #audit #forensics #securityhardening
🏎 TCP BBR: Ускоряем интернет одной строкой

Вы знали, что Linux по умолчанию использует алгоритм контроля перегрузки сети CUBIC, разработанный в 2000-х? Он считает, что если пакет потерялся — канал забит, и резко снижает скорость. Но в 2025 году потеря пакетов не всегда означает перегрузку (привет, Wi-Fi и LTE).

Google придумал BBR (Bottleneck Bandwidth and RTT). Он не смотрит на потери пакетов. Он строит модель пропускной способности канала.

Результат: На серверах с высоким пингом или нестабильным каналом (VPN, трансграничный трафик) скорость скачивания вырастает в разы.

Как включить (Ядро 4.9+):

Проверяем доступность:

modprobe tcp_bbr

Включаем:

echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p

Проверяем:

sysctl net.ipv4.tcp_congestion_control
# Должно быть: bbr

Попробуйте включить это на своем VPN-сервере или прокси. Разница вас шокирует.

#linux #network #performance #bbr #kernel #optimization
🆘 REISUB: Как перезагрузить намертво зависший Linux?

Ситуация: Сервер завис. SSH не отвечает. Консоль не реагирует. Эникейщик тянется к кнопке Reset (Hard Reset). Это риск убить файловую систему.

Архитектор использует Magic SysRq Key. Это прямые команды ядру, которые работают, даже если система лежит.

Заклинание: R E I S U B (Запоминалка: Reboot Even If System Utterly Broken)

Если у вас есть доступ к физической клавиатуре (или KVM): Зажимаем Alt + SysRq (PrintScreen) и медленно вводим по очереди:

R (Raw) — перехват клавиатуры у X-сервера.

E (Term) —
посылает SIGTERM всем процессам (попытка мягко завершить).

I (Kill) — посылает SIGKILL всем, кто не умер (жесткое убийство).

S (Sync) — самое важное! Сбрасывает кэш на диск (спасает данные).

U (Unmount) — перемонтирует диски в Read-Only.

B (Reboot) — перезагрузка.

Как проверить, включено ли: cat /proc/sys/kernel/sysrq (должно быть 1 или маска 176).

Сохрани. Однажды это спасет твою базу данных от коррупции.

#linux #kernel #troubleshooting #sysrq #recovery #hacks
👍3
📦 Windows Sandbox: Изолятор для подозрительного софта

Ситуация: Нужно запустить странный .exe или скрипт, который прислал юзер. Плохо: Запускать на своей машине («авось пронесет»). Долго: Разворачивать виртуалку в Hyper-V/VMware. Архитектор: Запускает Windows Sandbox.

Это встроенная в Pro/Enterprise версию легковесная виртуалка. Она грузится за 5 секунд, использует ваше текущее ядро Windows, но полностью изолирована. Главная фишка: Как только вы закрываете окно — всё содержимое уничтожается. Никаких следов.

Как включить (PowerShell):


Enable-WindowsOptionalFeature -FeatureName "Containers-DisposableClientVM" -All -Online
(Потребуется перезагрузка)

Pro Tip: Можно создать конфиг .wsb, чтобы пробрасывать внутрь папки с хоста (Read-Only) или запускать скрипты при старте.

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

#windows #security #sandbox #testing #bestpractice