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
Windows: "Автозагрузка", которую вы не видите. Скрипт-аудит Scheduled Tasks

Боль: Ваш EDR/антивирус "молчит", но с сервера идет странный трафик. Вы проверили Run, Startup, Services — всё чисто. Где "сидит" вредонос?

Ответ: В Планировщике Задач (Scheduled Tasks). Это любимый метод персистентности (Persistence) для 90% современных атак (Fileless, C2-маяки).

Реакция админа: "Открыть GUI и пролистать 200 задач".
Реакция архитектора: "Запустить PowerShell-аудит, который найдет паттерны атаки".

Этот PowerShell-скрипт — ваш "охотник". Он ищет "красные флаги" в задачах.

Код скрипта:
PowerShell

Write-Host "--- Начинаю аудит Scheduled Tasks на 'красные флаги' ---" -ForegroundColor Cyan

# Получаем ВСЕ задачи
$Tasks = Get-ScheduledTask

$Report = foreach ($Task in $Tasks) {
$TaskInfo = Get-ScheduledTaskInfo $Task
$TaskAction = $Task.Actions.Execute

# --- КРАСНЫЕ ФЛАГИ (добавьте свои) ---
$Suspicious = $false

# 1. Запуск от SYSTEM с высоким приоритетом
if ($TaskInfo.Principal -match "SYSTEM" -and $TaskInfo.Priority -lt 5) { $Suspicious = $true }

# 2. Запуск PowerShell с закодированной командой
if ($TaskAction -match "powershell.*-enc") { $Suspicious = $true }

# 3. Запуск из "странных" папок (Temp, AppData)
if ($TaskAction -match "AppData" -or $TaskAction -match "Temp") { $Suspicious = $true }

if ($Suspicious) {
[PSCustomObject]@{
Path = $Task.TaskPath
Name = $Task.TaskName
State = $TaskInfo.State
User = $TaskInfo.Principal
Action = $TaskAction
}
}
}

if ($Report) {
Write-Host "`n[!!!] ОБНАРУЖЕНЫ ПОДОЗРИТЕЛЬНЫЕ ЗАДАЧИ:" -ForegroundColor Red
$Report | Format-Table -Wrap -AutoSize
} else {
Write-Host "`n[OK] Подозрительных задач не найдено." -ForegroundColor Green
}

Взгляд архитектора: Это проактивный Threat Hunting. Вы не ждете срабатывания EDR. Вы сами ищете TTPs (тактики, техники, процедуры) атакующих, зная, как они работают.

#windows #powershell #security #threat_hunting #cybersecurity #скрипты #гайд
👍2
Linux: htop врёт. Куда на самом деле уходит память? Вскрываем pmap

Боль: Вы запускаете htop. Он показывает: VIRT: 25.0G, RES: 500M. Вопрос: Куда "делись" 24.5 ГБ? Почему VIRT (виртуальная) такой огромный, а RES (физическая) — маленький?

Реакция админа: "Наверное, это кэш. Перезагружу".
Реакция SRE: "Я посмотрю карту памяти процесса".

pmap (Process Memory Map) — это "рентген" для процесса. Он показывает каждый регион памяти, который процесс "попросил" у ядра.

Как это читать:
1. Найдите PID (например, pidof java -> 1234).
2. Запустите pmap с флагом -x (расширенный):
Bash

pmap -x 1234

Что вы увидите:
*Сотни строк с .so файлами (это shared libraries — общие библиотеки).
* [ anon ]: Это "анонимная" память — то, что malloc() выделил в "куче" (heap). Если эта цифра растет — у вас 100% утечка памяти (memory leak).
* [ stack ]: Стек процесса.

"Убийца"-команда (показать итог):
Bash

# Показать только ИТОГО (Total)
pmap -x 1234 | tail -n 1
# Вывод: total ---- 25165824K

Бинго! Вот ваши 25 ГБ. Это не "утечка", а 1000+ .so-библиотек, которые "раздули" виртуальное адресное пространство.

Взгляд архитектора: Вы перестаете "гадать" по htop. Вы видите корень проблемы. pmap — это ваш микроскоп для диагностики утечек памяти и "раздутых" приложений.

#linux #sre #performance #diagnostics #pmap #команды #гайд #architect
Windows (Security): "Крепость" внутри AD. Внедряем Authentication Silos

Боль: Ваш Domain Admin залогинился на ноутбук HelpDesk ( Tier 2 ), чтобы "быстро что-то поправить".
Хакер, сидящий на этом ноутбуке, ворует его Kerberos-билет и через 5 минут захватывает Контроллер Домена (атака Pass-the-Ticket ).

Реакция админа: "Я больше так не буду".
Реакция архитектора: "Я сделаю так, чтобы этот билет был бесполезен".

Authentication Silos (Хранилища Аутентификации) — это ваш "ядерный бункер" внутри AD.
Это контейнер, который привязывает высокопривилегированные учетки (как Domain Admins ) только к высокопривилегированным хостам (как Domain Controllers ).

Как это работает:
1. Вы создаете "Silo" (Хранилище) и "Policy" (Политику).
2. Вы помещаете в "Silo" своих Domain Admins и свои Domain Controllers.
3. Kerberos (KDC) теперь выдает непередаваемые (non-forwardable) билеты. TGT (билет), выданный для Domain Admin'а, не может быть использован для доступа ни к чему, кроме хостов из этого же "Silo" (то есть, к другим DC).

Взгляд архитектора: Это реальное, техническое принуждение для вашей Admin Tier Model. Вы не "надеетесь", что админ не залогинится на ПК. Вы гарантируете, что если он это сделает, его украденный билет будет просто бесполезным мусором для хакера.

#windows #security #activedirectory #kerberos #zerotrust #architect #гайд #musthave
👍5
🛡️ Windows (Архитектура): "NTFS-права" мертвы. Будущее — это Dynamic Access Control (DAC)

Боль: У вас 50 файловых шар. Вам приходит задача: "Дать доступ к папке Finance_Reports только менеджерам из отдела Sales , которые находятся в Казахстане".

Реакция админа: Создать еще одну AD-группу KZ_Sales_Managers_Finance_Access и вручную добавить в нее 10 человек. (Через год в AD будет 5000 групп).

Реакция архитектора: Использовать Dynamic Access Control (DAC).

DAC (динамический контроль доступа) — это "умные" NTFS-права. Вы даете доступ не "пользователю", а "по правилу".

Как это работает:
1. Классификация: Вы "маркируете" файлы (через FSRM): file.Confidentiality = High.
2.Атрибуты: Вы используете существующие атрибуты AD: user.Department = "Sales", user.Country = "KZ".
3. Политика (в GPO): Вы пишете одно правило для папки:
* Allow: Read
* IF: (user.Department == "Sales")
* AND: (user.Country == "KZ")
* AND: (file.Confidentiality == "High")

Взгляд архитектора: Вы переходите от "управления 1000 групп" к "управлению 10 политиками". Это Policy as Code для данных.

#windows #security #activedirectory #dac #zerotrust #architect #гайд
🔥3
🛡️ Windows: Забудь про telnet. Используем Test-NetConnection

Боль: Вам нужно проверить, открыт ли порт 443 на сервере SRV-SQL-01. Старый (плохой) способ: telnet SRV-SQL-01 443. Но telnet (клиент) не установлен по умолчанию в Windows Server 2019/2022.

Реакция админа: Искать, как установить telnet через "Компоненты Windows".
Реакция архитектора: Использовать встроенный PowerShell-командлет, который мощнее.

Test-NetConnection (TNC) — это ваш "швейцарский нож" для сети:

1. Проверить порт (замена telnet):
PowerShell

# -ComputerName: Цель
# -Port: Какой порт
Test-NetConnection SRV-SQL-01 -Port 443

Вывод TcpTestSucceeded : True — это всё, что вам нужно.

2. "Умный" Ping (замена ping + tracert):
PowerShell

# TNC без порта
Test-NetConnection habr.com

Он покажет не только PingSucceeded: True, но и InterfaceAlias (через какую сетевуху идете), SourceAddress, и результаты traceroute (TraceRoute hops).

Взгляд архитектора: Вы не "ищете" сторонние утилиты. Вы используете встроенный, мощный инструмент, который скриптуется. TNC можно "завернуть" в ForEach-Object -Parallel, чтобы опросить 100 серверов на порт 3389 (RDP) за 5 секунд.

#windows #powershell #networking #sysadmin #команды #гайд
☣️ Security (Full-Stack): "Я скачал файл. Он 'чистый'?"

Боль: Вам прислали driver_update.zip или вы скачали .iso с "зеркала". Как убедиться, что это оригинальный файл, а не malware, подсунутый хакером?

Реакция админа: "Проверю антивирусом". (Бесполезно, если это 0-day).
Реакция архитектора: "Я сверю хэш-сумму".

Хэш (SHA-256) — это "цифровой отпечаток" файла. Если хоть 1 бит в файле изменен, хэш будет совершенно другим.

Как проверить:

В Linux (или git-bash):
Bash

sha256sum driver_update.zip

В Windows (PowerShell):
PowerShell

Get-FileHash driver_update.zip -Algorithm SHA256

Результат (на обеих ОС): E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855

Сравните эту строку с той, что обязательно должна быть на сайте разработчика.

Взгляд архитектора: Это "Гигиена 0-го уровня" (Supply Chain Security 101). Вы никогда не доверяете бинарникам из интернета. Вы верифицируете их.

#security #windows #linux #powershell #bash #sysadmin #чеклисты
🚀 Linux: "Убить" все процессы. kill — это скальпель, pkill — это "ковровая бомбардировка"

Боль: У вас "зависло" Java-приложение, которое расплодило 50 дочерних процессов java.
Реакция админа: ps aux | grep java, скопировать 50 PID'ов, kill -9 ... (потерять 10 минут).
Реакция архитектора: pkill.

pkill (process kill) и pgrep (process grep) — это ваш пульт управления процессами. Они ищут не по PID, а по атрибутам.

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

1. Найти (pgrep):

# Найти все процессы, принадлежащие пользователю 'www-data'
pgrep -u www-data

# Найти все процессы, в команде которых есть 'nginx'
pgrep -f nginx

2. Убить (pkill): Это то же самое, но вместо "найти" — "убить".

# Мягко "попросить" все процессы 'java' завершиться
pkill java

# Жестко "убить" все, что принадлежит 'www-data'
pkill -9 -u www-data

# Убить все процессы, в команде которых есть "my_hung_script.py"
pkill -f "my_hung_script.py"

(Будьте очень осторожны с pkill -9 -u root)

Взгляд архитектора: Вы не управляете PID'ами (которые меняются). Вы управляете сущностями (пользователями, именами). Это быстрее, надежнее и идеально подходит для скриптов автоматизации (SRE).

#linux #cli #pkill #sysadmin #sre #команды #гайд
👍3
🚀 Windows (Архитектура): "Split-Brain" DNS мертв. Встречаем Политики DNS

Боль: У вас есть сервис app.local, который должен резолвиться в 10.0.0.1 для внутренних клиентов (IT) и в 192.168.0.1 для всех остальных (Users).

Реакция админа (старая): Поднять два DNS-сервера (Split-Brain DNS), управлять двумя зонами, мучиться с репликацией.

Реакция архитектора: Использовать DNS Resolution Policies (в Windows Server 2016+). Это "умный" DNS, который отдает разные A-записи в зависимости от того, кто спрашивает.

План внедрения (на пальцах):

# 1. Определяем "зону" клиентов (например, IT-подсеть)
Add-DnsServerClientSubnet -Name "IT_Subnet" -IPv4Subnet "10.0.10.0/24"

# 2. Создаем политику: "Если запрос из IT_Subnet..."
Add-DnsServerQueryResolutionPolicy -Name "IT_Policy" -ClientSubnet "eq,IT_Subnet"

# 3. Добавляем A-запись, которая видна ТОЛЬКО этой политике
Add-DnsServerResourceRecord -ZoneName "app.local" -Name "www" -A -IPv4Address "10.0.0.1" -Policy "IT_Policy"

# 4. Добавляем A-запись "по умолчанию" (для всех остальных)
Add-DnsServerResourceRecord -ZoneName "app.local" -Name "www" -A -IPv4Address "192.168.0.1"

Готово. Теперь ваш DNS-сервер сам "маршрутизирует" ответы.

Взгляд архитектора: Вы переходите от управления железом (два сервера) к управлению кодом (Policy as Code). Это централизация, упрощение и основа для Geo-DNS и балансировки нагрузки на уровне DNS.

#windows #powershell #dns #networking #architect #гайд #musthave
👍2🔥2
🔬 Linux (SRE): `htop` не видит диски. Находим "пожирателя" I/O с `iotop`

Боль: Сервер "тормозит". ssh "залипает". Вы открываете htop — CPU 5% , RAM 20% . Но iowait (wa) — 50% . Кто-то "убивает" дисковую систему.

Реакция админа: Перезагрузить сервер, надеясь, что "отпустит".
Реакция SRE: Запустить iotop.

iotop — это top для Disk I/O. Он в реальном времени показывает, какой ПРОЦЕСС и сколько читает (READ) и пишет (WRITE) на диск.

Как использовать (нужен root):

# 1. Установка
sudo apt install iotop
sudo yum install iotop

# 2. Запуск
sudo iotop

Ключевые флаги (чтобы видеть суть):

# -o: Показать ТОЛЬКО процессы, которые РЕАЛЬНО что-то пишут/читают
# -P: Показать Процессы, а не Потоки (намного чище вывод)
sudo iotop -oP

Результат: Вы мгновенно увидите, что PID 1234 (mysqld) пишет 200M/s (вероятно, "упал" индекс) или PID 5678 (jbd2/sda1-8) (журнал) сошел с ума.

Взгляд архитектора: Это SRE-диагностика. Вы не "гадаете", вы видите корень зла. Вы переходите от "наверное, диски" к "процесс mysqld (PID 1234) насыщает I/O, нужно смотреть его slow_query_log".

#linux #sre #performance #iotop #diagnostics #команды #гайд
⚡️ Full-Stack (DevOps): curl — это прошлое. Встречаем httpie (http)

Боль: Вам нужно отладить API. Вы пишете в curl (и мучаетесь): curl -X POST -H "Content-Type: application/json" -H "Auth: Bearer 123" -d '{"user":"admin"}' https://api.local

Реакция админа: Открыть Postman (тяжелый GUI) или "простыню" в curl.
Реакция архитектора: Использовать httpie (http).

httpie — это curl, созданный для человека. Он "умный", цветной и интуитивный.

Сравнение "До" и "После":
* curl (Боль): curl -X POST -H "Content-Type: application/json" https://api.local/users -d '{"id": 1, "name": "admin"}'

* httpie (Решение): http POST https://api.local/users id:=1 name=admin

Почему это круто:

* Авто-JSON: Он сам понимает, что вы шлете JSON.

* Подсветка: Ответ (JSON, HTML) подсвечен, как в IDE.

* Простота: Auth:Token становится http ... "Auth:Token".

Установка:

sudo apt install httpie / brew install httpie

Взгляд архитектора: DX/DevEx (Developer Experience) — это не роскошь. Это эффективность. httpie — это инструмент, который снижает "трение" (friction) и экономит часы на отладке API и микросервисов.

#devops #cli #httpie #api #tools #гайд #curl
👍2
🛡️ Windows: Скрипт-аудит "Кто удалил файл?" (NTFS Forensics)

Боль: Критический файл в \\Shares\Data исчез. Бизнес в панике. "Кто это сделал и когда?!"

Реакция админа: "Я восстановлю из бэкапа" (но не знает, почему это случилось).
Реакция архитектора: "Я настрою аудит и найду виновного за 30 секунд".

Это двухэтапный процесс: сначала "взводим ловушку", потом "ловим".

Шаг 1: "Взвести ловушку" (Включить аудит на папке): (Это нужно сделать до инцидента)

# 1. Получаем ACL папки
$Acl = Get-Acl "C:\Shares\Data"

# 2. Создаем правило аудита: "Следить за 'Delete' и 'DeleteSubtree' для 'Everyone'"
$AuditRule = New-Object System.Security.AccessControl.FileSystemAuditRule(
"Everyone",
"Delete, DeleteSubtreeAndFiles",
"None",
"None",
"Success, Failure"
)

# 3. Добавляем правило в ACL и применяем
$Acl.AddAuditRule($AuditRule)
Set-Acl -Path "C:\Shares\Data" -AclObject $Acl

(Также включите "Audit Object Access" в GPO)

Шаг 2: Скрипт-охотник (Когда инцидент произошел): Этот скрипт найдет в логах Security событие 4663 (Попытка доступа к объекту) с Accesses: ...Delete...


Write-Host "--- Ищу событие удаления файла в C:\Shares\Data ---"

Get-WinEvent -FilterHashtable @{
LogName = "Security";
ID = 4663
} | ForEach-Object {
# 'Object Name' - это 6-е свойство, 'Accesses' - 9-е
$ObjectName = $_.Properties[6].Value
$Accesses = $_.Properties[9].Value

# Проверяем, что это наша папка И это было удаление
if ($ObjectName -like "*C:\Shares\Data*" -and $Accesses -match "Delete") {
[PSCustomObject]@{
Time = $_.TimeCreated
User = $_.Properties[1].Value
Process = $_.Properties[13].Value
Object = $ObjectName
}
}
}

Взгляд архитектора: Вы переходите от "надежды" к "доказательствам". Это основа Форензики (Digital Forensics) и Incident Response (IR).

#windows #powershell #security #audit #ntfs #скрипты #гайд
🔬 Linux: Скрипт "Аудит открытых портов" (Сравнение с "Эталоном")

Боль: Вы думаете, что на вашем веб-сервере открыты только порты 22, 80, 443. Но разработчик "для теста" запустил python -m http.server 8000 на 0.0.0.0 и забыл.

Реакция админа: "Я проверю ss -tuln вручную, когда будет инцидент".
Реакция архитектора: "У меня есть cron-скрипт, который автоматически сверяет 'что есть' с 'что должно быть'".

Этот Bash-скрипт — ваш аудитор безопасности.

Код скрипта:


#!/bin/bash
# --- Скрипт аудита "лишних" TCP-портов ---

# 1. ЭТАЛОН: Порты, которые ДОЛЖНЫ быть открыты (на 0.0.0.0)
# (Используйте 'ssh' или номер '22')
ALLOWED_PORTS=(
"ssh"
"http"
"httpsA"
)

# 2. ФАКТ: Получаем все, что слушает на 0.0.0.0 (IPv4)
# `ss -tuln`: TCP, UDP, Listening, Numeric
# `awk ...`: Вытаскиваем только номер порта
CURRENT_PORTS=$(ss -tuln | grep 'LISTEN.*0.0.0.0:' | awk '{print $5}' | sed 's/.*://' | sort -u)

# 3. СРАВНЕНИЕ:
# `comm -13`: Показывает строки, которые есть только во втором файле (CURRENT_PORTS)
# (т.е. "лишние" порты)
UNAUTHORIZED_PORTS=$(comm -13 <(printf "%s\n" "${ALLOWED_PORTS[@]}" | sort -u) <(echo "$CURRENT_PORTS"))

if [ -n "$UNAUTHORIZED_PORTS" ]; then
echo "[!!!] ОБНАРУЖЕНЫ НЕСАНКЦИОНИРОВАННЫЕ ОТКРЫТЫЕ ПОРТЫ:"
echo "$UNAUTHORIZED_PORTS"
exit 1
else
echo "[OK] Все порты соответствуют эталону."
exit 0
fi

Взгляд архитектора: Это "Compliance as Code". Вы не "проверяете", вы валидируете вашу политику безопасности. Этот скрипт — основа для автоматического алерта в Zabbix или Prometheus (Alertmanager).

#linux #bash #security #networking #audit #скрипты #sre
🚀 DevOps: Скрипт "CI/CD-раннер за 60 секунд" (Docker)

Боль: Ваш docker build в общем CI/CD GitLab/GitHub "висит" в очереди 20 минут. Вы не можете работать, потому что все "раннеры" заняты.

Реакция админа: "Пойду попью кофе, подожду".
Реакция архитектора: "Я запущу свой runner на своей Home Lab (или VDS) за 60 секунд".

Эти "однострочники" — это не просто docker run, это мгновенное масштабирование вашего CI/CD.

Скрипт для GitLab Runner:


# 1. Получите ваш Registration Token из GitLab (Settings -> CI/CD -> Runners)
GITLAB_TOKEN="ВАШ_ТОКЕН"

# 2. Запускаем "вечный" раннер в Docker
docker run -d --name gitlab-runner --restart always \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:latest

# 3. Регистрируем раннер
docker exec -it gitlab-runner \
gitlab-runner register \
--non-interactive \
--url "https://gitlab.com/" \
--registration-token "$GITLAB_TOKEN" \
--executor "docker" \
--docker-image "docker:20.10" \
--description "My-Docker-Runner"

Скрипт для GitHub Actions Runner: (Процесс похож, но требует docker-compose для авто-регистрации)

Взгляд архитектора: Это "Infrastructure on-demand" (Инфраструктура по требованию). Вы не ждете ресурсы, вы создаете их. Вы строите распределенную CI/CD-систему, используя Docker как "строительный блок".

#devops #docker #cicd #gitlab #github #automation #скрипты #гайд
🔬 Linux: Скрипт "Аудит dmesg". Ищем аппаратные ошибки
Боль: Сервер "тормозит", но htop и iotop — "зеленые". Приложение "вылетает" с Segfault.


Причина:
Вы не видите аппаратных проблем. Отказ диска, "битая" RAM, проблемы с CPU — всё это логируется ядром в dmesg.

Реакция админа: "Проблемы с софтом, буду чинить приложение".
Реакция SRE: "Сначала проверю dmesg".

Этот Bash-скрипт — ваш "аппаратный аудитор". Он парсит dmesg и ищет "красные флаги".

Код скрипта:

#!/bin/bash
# --- Скрипт-аудитор 'dmesg' на ошибки ---

echo "--- Ищу 'красные флаги' в логах ядра (dmesg)... ---"

# -T: (Timestamps) Показать человеческое время
# --level=err,warn: Показать ТОЛЬКО ошибки и предупреждения
# (segfault, EDAC, I/O error, memory error...)
CRITICAL_ERRORS=$(dmesg -T --level=err,warn)

if [ -n "$CRITICAL_ERRORS" ]; then
echo "[!!!] ОБНАРУЖЕНЫ КРИТИЧЕСКИЕ СОБЫТИЯ ЯДРА:"
echo "$CRITICAL_ERRORS" | tail -n 20
echo "--- Рекомендация: Немедленно проверьте I/O, EDAC (RAM) и CPU. ---"
else
echo "[OK] Критических ошибок в dmesg не найдено."
fi

Взгляд архитектора: Это проактивный мониторинг "железа". Вы не ждете, пока smartd (диск) или EDAC (RAM) "покраснеют". Вы валидируете здоровье сервера на уровне ядра.

#linux #sre #diagnostics #bash #dmesg #скрипты #sysadmin
🔒 Проект на выходные: Vaultwarden — ваш личный Bitwarden

Боль: У вас 500 паролей (RDP, SSH, Web-морды, API-ключи). Они лежат в KeePass-файле в Dropbox, в Excel-файле на "шаре" или (о ужас) в .txt.

Решение: Развернуть свой менеджер паролей. Bitwarden — топ, но его "self-hosted" версия тяжеловата (требует MSSQL).

Vaultwarden — это альтернативная реализация Bitwarden-сервера, написанная на Rust. Она 100% совместима со всеми клиентами Bitwarden (Chrome, iOS, Android), но при этом:

Легковесная: Работает в Docker, ест < 100МБ RAM.

Простая: Не требует MS SQL. Использует SQLite "из коробки".

Запускаем в Docker за 60 секунд:

# 1. Создаем volume для данных (чтобы не потерять!)
docker volume create vaultwarden-data

# 2. Запускаем контейнер
docker run -d --name vaultwarden \
-v vaultwarden-data:/data \
-p 8080:80 \
--restart unless-stopped \
vaultwarden/server:latest

Откройте http://<ip>:8080 и создайте аккаунт. Теперь это ваш Bitwarden.

Взгляд архитектора: Это "суверенитет данных" (Data Sovereignty). Вы возвращаете полный контроль над вашими самыми критическими активами — паролями.

#security #docker #selfhosted #bitwarden #vaultwarden #weekendproject #гайд
AI-Промпт (Чек-лист): "Напиши мне systemd unit-файл"

Боль:
Вы написали крутой скрипт на Python (app.py), но запускаете его в screen или через nohup ... &. Он "падает" — и всё.

Решение: Превратить его в настоящую Linux-службу (systemd). Но писать unit-файлы вручную — это "боль" (забыть [Install], User= и т.д.).

AI — идеальный генератор "болванок".

Промпт (для ChatGPT/Gemini/Copilot):
Выступи в роли Senior Linux SRE.
Напиши "production-ready" systemd unit-файл (`my-app.service`) для моего Python-приложения.

Чек-лист требований для AI:
1. [ ] [Unit]: Добавить `Description=` и `After=network.target` (чтобы запускался *после* сети).
2. [ ] [Service]:
* `Type=simple`
* `ExecStart=/usr/bin/python3 /opt/my-app/app.py` (путь к приложению).
* `User=www-data` (Критично! Не запускать от root!).
* `Restart=on-failure` (Критично! Авто-перезапуск при сбое).
* `RestartSec=5`
* `WorkingDirectory=/opt/my-app`
3. [ ] [Install]:
* `WantedBy=multi-user.target` (чтобы включался через `systemctl enable`).
4. [ ] Объясни каждую секцию.

Взгляд архитектора: AI генерирует идемпотентный, безопасный (User=) и отказоустойчивый (Restart=) unit. Вы не тратите время на "бойлерплейт", а сразу получаете best-practice.

#ai4admin #linux #systemd #sre #automation #промпты #чеклисты
🔥2
🖥 Security (Home Lab): Pi-hole — "Адблок" для всей вашей домашней сети

Боль: Ваш телефон, ноутбук, планшет, телевизор и даже умная колонка показывают рекламу. Это не только раздражает, но и несет реальные риски: фишинг, малварь, отслеживание. Один неудачный клик — и вся сеть под угрозой.

Решение: Блокировка рекламы и трекеров на уровне DNS для всех устройств в сети.

Pi-hole — это DNS-сервер, который работает как "черная дыра" для нежелательного трафика. Он перехватывает запросы к рекламным и вредоносным доменам и просто не отвечает на них.

Что вы получаете:

Блокировка рекламы везде: На всех устройствах, включая те, где нельзя поставить "адблок" (Smart TV, IoT).

Защита от малвари/фишинга: Большинство вредоносных сайтов используют одни и те же домены — Pi-hole их блокирует.

Контроль и Observability: Удобный веб-интерфейс показывает, какое устройство куда стучится, и что Pi-hole заблокировал.

Никаких VPN: Работает "из коробки" на роутере.

Запуск (в Docker за 5 минут):

# Создаем папку для конфигурации
mkdir -p /opt/pihole

# Запускаем контейнер
docker run -d \
--name pihole \
-p 53:53/tcp -p 53:53/udp \
-p 80:80 \
-e PUID=1000 -e PGID=1000 \
-e TZ="Europe/Moscow" \
-v /opt/pihole:/etc/pihole \
--restart=unless-stopped \
pihole/pihole:latest

После запуска: Перенастройте DNS-сервер на вашем роутере на IP-адрес вашего Pi-hole.

Взгляд архитектора:
Вы не "блокируете рекламу". Вы перехватываете контроль над своим DNS-трафиком. Это первый шаг к построению "сегментированной" и "фильтрованной" домашней сети, как в Enterprise.

#security #homelab #pihole #dns #docker #гайд #musthave
👍2
🔒 Windows (Security): "Куда бежать?" Аудит открытых сетевых шар (Open Shares)

Боль: Вы "думаете", что все ваши файловые шары защищены и доступны только "изнутри". Но где-то тихо "живет" шара \\SERVER\Docs, которая открыта "Everyone: Full Control" и светит в интернет через проброс портов.

Реакция админа: "Пролистаю Computer Management на каждом сервере". (Это тысячи шар).
Реакция архитектора: Запустить автоматический скрипт-аудит.

Этот PowerShell-скрипт найдет все открытые шары на всех ваших серверах, которые разрешают доступ группе Everyone (или Authenticated Users).

Код скрипта:


Write-Host "--- Начинаю аудит открытых сетевых шар (Everyone/Auth. Users) ---" -ForegroundColor Cyan

# 1. Получаем список всех серверов в домене
$Servers = Get-ADComputer -Filter 'OperatingSystem -like "Windows Server*"' | Select-Object -ExpandProperty Name
$Report = @()

foreach ($Server in $Servers) {
Write-Host "Проверяю сервер: $Server..."
try {
# Получаем все шары на сервере
$Shares = Get-CimInstance -ClassName Win32_Share -ComputerName $Server -ErrorAction Stop

foreach ($Share in $Shares) {
# Пропускаем стандартные (ADMIN$, C$, IPC$)
if ($Share.Name -notmatch '\$') {
# Получаем ACL каждой шары
$Acl = Get-Acl "Microsoft.PowerShell.Core\FileSystem::\\$Server\$($Share.Name)" -ErrorAction SilentlyContinue

if ($Acl) {
# Ищем правила для Everyone или Authenticated Users
$OpenAcl = $Acl.Access | Where-Object {
($_.IdentityReference -eq "Everyone") -or ($_.IdentityReference -eq "Authenticated Users")
}
if ($OpenAcl) {
$Report += [PSCustomObject]@{
Server = $Server
ShareName = $Share.Name
Path = $Share.Path
Identity = $OpenAcl.IdentityReference
AccessRights = $OpenAcl.FileSystemRights
AccessType = $OpenAcl.AccessControlType
}
}
}
}
}
}
catch {
Write-Warning "Не удалось подключиться к $Server: $($_.Exception.Message)"
}
}

if ($Report) {
Write-Host "`n[!!!] ОБНАРУЖЕНЫ ОТКРЫТЫЕ СЕТЕВЫЕ ШАРЫ (EVERYONE / AUTHENTICATED USERS):" -ForegroundColor Red
$Report | Format-Table -Wrap -AutoSize
} else {
Write-Host "`n[OK] Открытых сетевых шар не найдено." -ForegroundColor Green
}

Взгляд архитектора: Это — непрерывный аудит периметра. Открытая шара — это золотой рудник для атакующего. Этот скрипт — ваш сканер безопасности, который должен запускаться регулярно.

#windows #powershell #security #audit #networking #скрипты #sysadmin
👍2
🛡️ Windows (Security): Аудит UAC. "Почему админ нажимает 'Да'?"

Боль: Вы настроили LAPS, убрали права. Но UAC (User Account Control) — это "внутренний файрвол" Windows, который останавливает 90% атак с повышением привилегий. И многие админы его отключают или ослабляют до "тихого" режима, потому что он "мешает".

Реакция админа: "Я просто нажму 'Да', я же админ".
Реакция архитектора: "Я принудительно включу безопасный UAC через GPO и буду аудировать тех, кто его отключает".

Этот PowerShell-скрипт — ваш аудитор. Он проверит критически важные ключи реестра UAC на списке машин.

Код скрипта:


[CmdletBinding()]
param (
[string[]]$ComputerNames = @("SERVER01", "WKS-01")
)

$UAC_Path = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System"
$Report = @()

foreach ($Server in $ComputerNames) {
Write-Host "Проверяю UAC на $Server..."
if (-not (Test-Connection -ComputerName $Server -Count 1 -Quiet)) {
$Report += [PSCustomObject]@{ ComputerName = $Server; Status = "НЕДОСТУПЕН" }
continue
}

try {
$RegKey = Get-ItemProperty -Path $UAC_Path -ComputerName $Server -ErrorAction Stop

$Report += [PSCustomObject]@{
ComputerName = $Server
Status = "OK"
# 1 = Включен (Хорошо)
EnableLUA = $RegKey.EnableLUA
# 2 = "Prompt for consent on the secure desktop" (Лучший)
# 5 = "Prompt for consent" (Нормально)
# 0 = "Elevate without prompting" (КРИТИЧЕСКАЯ УЯЗВИМОСТЬ)
ConsentPromptBehaviorAdmin = $RegKey.ConsentPromptBehaviorAdmin
}
}
catch {
$Report += [PSCustomObject]@{ ComputerName = $Server; Status = "ОШИБКА ДОСТУПА" }
}
}

Write-Host "`n--- РЕЗУЛЬТАТ АУДИТА UAC ---"
$Report | Format-Table
Write-Host "[!] 'EnableLUA = 0' или 'ConsentPromptBehaviorAdmin = 0' — это дыра в безопасности!" -ForegroundColor Red

Взгляд архитектора: Отключение UAC (EnableLUA = 0) — это не "удобство", это приглашение для mimikatz и шифровальщиков. Этот скрипт — ваш первый шаг к Security Baseline (базовому уровню безопасности).

#windows #powershell #security #uac #audit #скрипты #sysadmin
🚀 Linux (CLI): cd — это прошлое. Встречаем zoxide — "умный" cd

Боль: Ваш pwd — /srv/docker/containers/prod/nginx/config/sites-available/. Вам нужно "прыгнуть" в /var/log/nginx.

Реакция админа: cd /var/log/nginx (набирает 20+ символов).
Реакция архитектора: z log

zoxide — это "мозг" для вашей cd. Он запоминает каталоги, в которые вы чаще всего ходите, и "ранжирует" их.

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

1. Установка: sudo apt install zoxide / brew install zoxide

2. Добавление в .bashrc / .zshrc: eval "$(zoxide init bash)"

3. Использование:

* z nginx -> "прыгнет" в /var/log/nginx (если вы там часто бываете)

* z sites -> "прыгнет" в /srv/docker/containers/prod/nginx/config/sites-available/

* zoxide query -l -> покажет все "запомненные" пути и их "рейтинг".

Взгляд архитектора: Это оптимизация рабочего процесса. Архитектор убирает "трение" (friction) из своей ежедневной работы. zoxide (как fzf или bat) — это инструмент, который экономит вам тысячи нажатий клавиш в день.

#linux #cli #zoxide #automation #devops #sre #гайд