Давайте разберем один из частых вопросов, который может быть задан на собеседовании и как на него отвечать.Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤3👎1😱1
Контроль устройств через USBGuard
Как запретить флешки и другие USB-девайсы на уровне ядра
В некоторых инфраструктурах флешки — это не просто риск, а реальный вектор атак.
Как это работает:
USBGuard создаёт политику разрешённых USB-устройств по их VID/PID и serial number. Всё, что не разрешено — автоматически блокируется.
Быстрый старт:
По умолчанию все текущие устройства будут разрешены. После запуска новые — блокируются.
Пример строки правила:
Чтобы запретить всё, кроме нужного:
1️⃣ Генерируй политику.
2️⃣ Удали строки allow with-interface или allow via.
3️⃣ Переведи USBGuard в режим enforce.
Интеграция с systemd:
Как запретить флешки и другие USB-девайсы на уровне ядра
В некоторых инфраструктурах флешки — это не просто риск, а реальный вектор атак.
Чтобы контролировать, какие USB-устройства разрешены, используем USBGuard — мощный инструмент, встроенный в ядро Linux.
Как это работает:
USBGuard создаёт политику разрешённых USB-устройств по их VID/PID и serial number. Всё, что не разрешено — автоматически блокируется.
Быстрый старт:
sudo apt install usbguard
sudo usbguard generate-policy > /etc/usbguard/rules.conf
sudo systemctl enable --now usbguard
По умолчанию все текущие устройства будут разрешены. После запуска новые — блокируются.
Пример строки правила:
allow id 0781:5567 serial "4C530001181223103294" name "Cruzer Blade"
Чтобы запретить всё, кроме нужного:
Интеграция с systemd:
sudo systemctl status usbguard
sudo journalctl -u usbguard
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍2👎1
Скрытая перезагрузка Linux
Как понять, что сервер перезапускался, даже если uptime большой
Такое бывает после kexec, resume из сна, контейнерной миграции или даже обмана через sysctl. Разберёмся, как проверить, не было ли на самом деле рестарта.
1️⃣ Проверяем journalctl:
Логи systemd разбиты на сессии. Увидим границу между ними:
Если есть несколько загрузок (boot ID), был перезапуск. Даже если uptime говорит обратное.
2️⃣ Логи входов last и btmp:
Покажет перезагрузки ядра. Если пусто — подозрительно.
Проверка на сброс логов, частая практика для сокрытия следов.
3️⃣ dmesg и таймштампы ядра:
Таймштамп в первых строках должен совпадать с uptime. Если нет — возможно, kexec или resume.
4️⃣ Проверка монтирования /tmp или /run:
Как понять, что сервер перезапускался, даже если uptime большой
Иногда uptime внушительный, но сервисы «как будто» перезапускались.
Такое бывает после kexec, resume из сна, контейнерной миграции или даже обмана через sysctl. Разберёмся, как проверить, не было ли на самом деле рестарта.
Логи systemd разбиты на сессии. Увидим границу между ними:
journalctl --list-boots
Если есть несколько загрузок (boot ID), был перезапуск. Даже если uptime говорит обратное.
last reboot
Покажет перезагрузки ядра. Если пусто — подозрительно.
last -f /var/log/btmp
Проверка на сброс логов, частая практика для сокрытия следов.
dmesg | head
Таймштамп в первых строках должен совпадать с uptime. Если нет — возможно, kexec или resume.
mount | grep tmpfs
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19❤7
Что произойдёт при вводе команды useradd newuser?
Anonymous Quiz
86%
Будет создан новый пользователь в системе
1%
Удалится текущий пользователь
13%
Запустится интерфейс настройки пользователей
0%
Произойдёт выход из системы
😁14🤷♂6❤2
Как не потерять доступ к серверу после правок сетевых настроек и systemd
Многие сисадмины хотя бы раз попадали в ситуацию: отредактировал netplan или systemd unit, перезагрузил сервер — и всё, SSH больше не отвечает.
Виртуалка висит где-то в облаке без сети, приходится лезть через консоль или IPMI. А ведь этого легко избежать.
Проверка systemd-юнитов
Systemd строго относится к синтаксису. Даже одна опечатка в .service может привести к тому, что нужный сервис не стартует.
Также полезна команда:
чтобы понять, что пошло не так при старте.
Применение сетевых настроек без перезагрузки
Редактируешь netplan? Не обязательно сразу делать netplan apply. Есть безопасный способ:
Система применит новые настройки, но через 120 секунд откатит, если ты не подтвердишь. Идеально, если боишься потерять подключение.
Если используешь systemd-networkd, можно без риска “переприменить” текущие настройки:
Это быстро и не трогает активные соединения. Работает с bridge, VLAN, bonding — как и Netplan.
Проверяем конфигурации до перезагрузки: systemd-analyze verify, netplan try, networkctl reconfigure
Многие сисадмины хотя бы раз попадали в ситуацию: отредактировал netplan или systemd unit, перезагрузил сервер — и всё, SSH больше не отвечает.
Виртуалка висит где-то в облаке без сети, приходится лезть через консоль или IPMI. А ведь этого легко избежать.
Проверка systemd-юнитов
Systemd строго относится к синтаксису. Даже одна опечатка в .service может привести к тому, что нужный сервис не стартует.
systemd-analyze verify /etc/systemd/system/your-service.service
Также полезна команда:
journalctl -xe -u your-service
чтобы понять, что пошло не так при старте.
Применение сетевых настроек без перезагрузки
Редактируешь netplan? Не обязательно сразу делать netplan apply. Есть безопасный способ:
sudo netplan try
Система применит новые настройки, но через 120 секунд откатит, если ты не подтвердишь. Идеально, если боишься потерять подключение.
Если используешь systemd-networkd, можно без риска “переприменить” текущие настройки:
sudo networkctl reconfigure
Это быстро и не трогает активные соединения. Работает с bridge, VLAN, bonding — как и Netplan.
❤13👍9
Давайте разберем один из частых вопросов, который может быть задан на собеседовании и как на него отвечать.Как с ним работать:
— Поведение можно контролировать с помощью параметра oom_score_adj. Чем выше значение (макс. 1000), тем выше вероятность, что процесс будет убит.
— Можно настроить cgroups и ограничить память для отдельных групп процессов, чтобы сбои не затрагивали всю систему.
— Желательно использовать swap-файл/раздел, чтобы отложить момент срабатывания OOM, но не полагаться на это как на основную защиту.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍4👏2
Чистим /var/lib/docker без потерь
Папка /var/lib/docker со временем разрастается до страшных размеров. Там лежат:
• Контейнеры и их слепки
• Образы (в том числе устаревшие)
• Volumes (в т.ч. неиспользуемые, но привязанные к данным)
• Кеши слоев и сетевые оверлеи
Автоматическая очистка
Добавь --volumes, если хочешь подчистить жёстко.
Volumes без контейнеров:
Альтернатива: Docker GC
Можно использовать docker-gc, crontab или встроенные политики очистки (в Kubernetes — через ttlSecondsAfterFinished в Jobs).
Папка /var/lib/docker со временем разрастается до страшных размеров. Там лежат:
• Контейнеры и их слепки
• Образы (в том числе устаревшие)
• Volumes (в т.ч. неиспользуемые, но привязанные к данным)
• Кеши слоев и сетевые оверлеи
Автоматическая очистка
docker system prune -a
Добавь --volumes, если хочешь подчистить жёстко.
Диагностика
Проверь, что ест диск:
sudo du -sh /var/lib/docker/*
Показать образы, не привязанные к контейнерам:
docker images -f dangling=true
Список остановленных контейнеров:
docker ps -a --filter status=exited
Volumes без контейнеров:
docker volume ls -f dangling=true
Альтернатива: Docker GC
Можно использовать docker-gc, crontab или встроенные политики очистки (в Kubernetes — через ttlSecondsAfterFinished в Jobs).
👍12❤2🤩1
Что делает команда ls -l?
Anonymous Quiz
0%
Удаляет все файлы в папке
4%
Сортирует список по дате
95%
Показывает список файлов с подробностями: права, владелец, размер
1%
Запускает GUI для работы с файлами
🤣25👀3🤔2
Отслеживаем внезапные изменения сетевой конфигурации в Linux
Иногда вы теряете доступ по SSH, DNS резко меняется, а ip route не узнаётся. Причин может быть много: DHCP, VPN, скрипты, NetworkManager или зловред.
Разберём, как это отследить, логировать и сразу получать уведомление — даже в Telegram.
1️⃣ Слежение за изменениями IP, DNS и маршрутов
Создаём скрипт check_net.sh, который сравнивает текущие настройки с эталоном:
2️⃣ Настраиваем таймер systemd (альтернатива cron)
Файл netwatch.timer:
Файл netwatch.service:
Активируем:
3️⃣ Дополнительно: auditd и лог изменений конфигов
Иногда вы теряете доступ по SSH, DNS резко меняется, а ip route не узнаётся. Причин может быть много: DHCP, VPN, скрипты, NetworkManager или зловред.
Разберём, как это отследить, логировать и сразу получать уведомление — даже в Telegram.
Создаём скрипт check_net.sh, который сравнивает текущие настройки с эталоном:
#!/bin/bash
DIR="/var/lib/netwatch"
mkdir -p "$DIR"
NOW="$DIR/now"
PREV="$DIR/prev"
ip addr > "$NOW".ip
ip route > "$NOW".route
cat /etc/resolv.conf > "$NOW".dns
# Если первая итерация — копируем как эталон
[ ! -f "$PREV.ip" ] && cp "$NOW".ip "$PREV.ip"
[ ! -f "$PREV.route" ] && cp "$NOW".route "$PREV.route"
[ ! -f "$PREV.dns" ] && cp "$NOW".dns "$PREV.dns"
# Проверяем различия
DIFF=$(diff -u "$PREV.ip" "$NOW.ip"; diff -u "$PREV.route" "$NOW.route"; diff -u "$PREV.dns" "$NOW.dns")
if [ -n "$DIFF" ]; then
echo "$DIFF" | tee "$DIR/alert.log"
# Отправка в Telegram
TOKEN="your_bot_token"
CHAT_ID="your_chat_id"
MSG="⚠️ Изменение сети на $(hostname):%0A$(echo "$DIFF" | tail -n 20 | sed 's/$/%0A/' | sed 's/+/%2B/g')"
curl -s "https://api.telegram.org/bot$TOKEN/sendMessage" --data-urlencode "chat_id=$CHAT_ID" --data-urlencode "text=$MSG"
# Обновляем эталон
cp "$NOW".ip "$PREV.ip"
cp "$NOW".route "$PREV.route"
cp "$NOW".dns "$PREV.dns"
fi
Файл netwatch.timer:
[Unit]
Description=Net config watcher timer
[Timer]
OnBootSec=2min
OnUnitActiveSec=5min
[Install]
WantedBy=timers.target
Файл netwatch.service:
[Unit]
Description=Net config watcher
[Service]
ExecStart=/usr/local/bin/check_net.sh
Активируем:
systemctl daemon-reexec
systemctl enable --now netwatch.timer
auditctl -w /etc/network/interfaces -p wa
auditctl -w /etc/netplan -p wa
auditctl -w /etc/resolv.conf -p wa
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥6❤3
«Ростелеком» снизил скорость интернета жителю Новосибирска за большой объём трафика
В компании объяснили это превышением лимита в 4 ТБ и сослались на пункт своих правил, позволяющий ограничивать скорость при аномально высоком потреблении для защиты сети и обеспечения равных условий для всех пользователей.
«Ростелеком» утверждает, что безлимитные тарифы для физических лиц не имеют жёстких ограничений по объёму трафика, однако при сильной нагрузке возможны временные замедления для проведения проверки.
Житель Новосибирска сообщил, что «Ростелеком» снизил ему скорость интернета с 500 Мбит/с до 20 Мбит/с после того, как за 13 дней он скачал около 6 ТБ данных.
В компании объяснили это превышением лимита в 4 ТБ и сослались на пункт своих правил, позволяющий ограничивать скорость при аномально высоком потреблении для защиты сети и обеспечения равных условий для всех пользователей.
«Ростелеком» утверждает, что безлимитные тарифы для физических лиц не имеют жёстких ограничений по объёму трафика, однако при сильной нагрузке возможны временные замедления для проведения проверки.
👎29💊16👏6🤔5❤3
GitOps для /etc: как сделать конфиги отслеживаемыми
Если хочется понимать, кто и когда правил /etc, есть проверенное решение:
etckeeper + Git = история изменений конфигов
etckeeper — утилита, которая автоматически сохраняет изменения в /etc в git-репозиторий.
Работает с apt, yum, dnf, pacman и другими пакетными менеджерами: каждый раз, когда вы устанавливаете или удаляете пакет, etckeeper делает git commit.
Установка:
После этого можно спокойно делать:
Защита от случайных изменений: pre-commit хуки
Добавь pre-commit хук, который будет проверять изменения перед коммитом: например, запрещать случайное удаление важных файлов (sshd_config, fstab, resolv.conf и т.п.) или напоминать о ручной проверке после merge.
Пример хука:
Какие плюсы?
➕ Всё /etc в git, можно откатиться к любой точке
➕ Автоматически коммитит после apt upgrade и dpkg-reconfigure
➕ Удобно проверять различия между серверами (git diff)
➕( Подходит для CI и GitOps-сценариев
Системные конфиги часто меняются вручную — и так же вручную теряются.
Если хочется понимать, кто и когда правил /etc, есть проверенное решение:
etckeeper + Git = история изменений конфигов
etckeeper — утилита, которая автоматически сохраняет изменения в /etc в git-репозиторий.
Работает с apt, yum, dnf, pacman и другими пакетными менеджерами: каждый раз, когда вы устанавливаете или удаляете пакет, etckeeper делает git commit.
Установка:
sudo apt install etckeeper # для Debian/Ubuntu
sudo etckeeper init
sudo etckeeper commit "Initial"
После этого можно спокойно делать:
cd /etc
git log # вся история изменений
git diff # сравнение версий
Защита от случайных изменений: pre-commit хуки
Добавь pre-commit хук, который будет проверять изменения перед коммитом: например, запрещать случайное удаление важных файлов (sshd_config, fstab, resolv.conf и т.п.) или напоминать о ручной проверке после merge.
Пример хука:
#!/bin/sh
if git diff --cached | grep -q "sshd_config"; then
echo "⚠️ Вы изменили sshd_config — проверьте доступность SSH!"
fi
Какие плюсы?
➕ Всё /etc в git, можно откатиться к любой точке
➕ Автоматически коммитит после apt upgrade и dpkg-reconfigure
➕ Удобно проверять различия между серверами (git diff)
➕( Подходит для CI и GitOps-сценариев
❤9👍5
Давайте разберем один из частых вопросов, который может быть задан на собеседовании и как на него отвечать.Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👎5🔥1
Часть 2. GitOps для /etc: отслеживаем конфигурации через etckeeper и pre-commit хуки
Чтобы избежать потери конфигов даже при сбое системы — добавим резервное копирование git-репозитория /etc в безопасное место.
1️⃣ Настроим удалённый репозиторий
Создаём bare-репозиторий на другом сервере или в GitLab/Gitea:
На основном сервере:
2️⃣ Добавим автоматический push после каждого commit
Можно прописать post-commit хук:
Теперь каждый раз, когда etckeeper фиксирует изменения, копия будет уходить на внешний сервер.
Проверка целостности и откат
Если кто-то случайно удалит или испортит конфиг — откат делается одной командой:
Также можно использовать:
Чтобы избежать потери конфигов даже при сбое системы — добавим резервное копирование git-репозитория /etc в безопасное место.
Создаём bare-репозиторий на другом сервере или в GitLab/Gitea:
git init --bare /srv/backup/etc.git
На основном сервере:
cd /etc
git remote add backup ssh://user@backup-host/srv/backup/etc.git
git push backup master
Можно прописать post-commit хук:
echo 'git push backup master' > /etc/.git/hooks/post-commit
chmod +x /etc/.git/hooks/post-commit
Теперь каждый раз, когда etckeeper фиксирует изменения, копия будет уходить на внешний сервер.
Проверка целостности и откат
Если кто-то случайно удалит или испортит конфиг — откат делается одной командой:
cd /etc
git checkout HEAD^ -- ssh/sshd_config
Также можно использовать:
git status # покажет, что поменялось
git log -p FILE # покажет кто и когда правил конкретный файл
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍5
Собственный mirror репозиториев APT или YUM в локальной сети
В изолированных средах, где серверы не имеют прямого выхода в интернет, или при массовом развёртывании машин, выгодно держать локальное зеркало репозиториев.
Это позволяет:
• ускорить установку пакетов и обновлений,
• исключить зависимость от внешних зеркал,
• обеспечить стабильность (все пакеты одной версии),
• работать в полностью оффлайн-среде.
Пример APT-репозитория (Ubuntu)
1️⃣ Установим apt-mirror:
2️⃣ Настроим зеркалирование:
Пример:
3️⃣ Синхронизируем:
4️⃣ Настроим доступ через apache2:
В изолированных средах, где серверы не имеют прямого выхода в интернет, или при массовом развёртывании машин, выгодно держать локальное зеркало репозиториев.
Это позволяет:
• ускорить установку пакетов и обновлений,
• исключить зависимость от внешних зеркал,
• обеспечить стабильность (все пакеты одной версии),
• работать в полностью оффлайн-среде.
Пример APT-репозитория (Ubuntu)
sudo apt install apt-mirror apache2
sudo nano /etc/apt/mirror.list
Пример:
set base_path /var/spool/apt-mirror
deb https://archive.ubuntu.com/ubuntu jammy main restricted universe multiverse
clean
sudo apt-mirror
sudo ln -s /var/spool/apt-mirror/mirror/archive.ubuntu.com/ubuntu
Please open Telegram to view this post
VIEW IN TELEGRAM
❤14👍6👎1
Что такое CNI в Kubernetes?
Anonymous Quiz
83%
Контейнерный сетевой интерфейс — плагин для организации сети внутри кластера
4%
Команда для обновления кластера
5%
Система хранения данных
8%
Тип контейнерного образа
🤣10❤1👍1
Собственный time-сервер (NTP) с хардварной синхронизацией
Когда в сети критично точное время (финансовые транзакции, логирование событий, биллинг, Kerberos) — не стоит полагаться только на внешние NTP-сервера.
Лучше настроить локальный time-сервер с аппаратным источником времени.
Как это сделать?
1️⃣ Аппаратный источник
• GPS-приёмник с поддержкой PPS (например, u-blox NEO, Garmin GPS 18x LVC)
• Или дешевле — USB RTC-модули с хардварными часами (DS3231 и аналоги)
2️⃣ Система: Linux + chronyd или ntpd
Chrony проще и точнее работает с нестабильными источниками (вроде GPS):
3️⃣ Пример конфигурации chrony.conf:
• SHM — данные от gpsd
• PPS — сигнал точной секунды
• local stratum — объявляем себя сервером
4️⃣ Проверка:
Должно появиться что-то вроде:
Когда в сети критично точное время (финансовые транзакции, логирование событий, биллинг, Kerberos) — не стоит полагаться только на внешние NTP-сервера.
Лучше настроить локальный time-сервер с аппаратным источником времени.
Как это сделать?
• GPS-приёмник с поддержкой PPS (например, u-blox NEO, Garmin GPS 18x LVC)
• Или дешевле — USB RTC-модули с хардварными часами (DS3231 и аналоги)
Chrony проще и точнее работает с нестабильными источниками (вроде GPS):
sudo apt install chrony gpsd gpsd-clients
refclock SHM 0 refid GPS precision 1e-1
refclock SOCK /var/run/chrony.ttyS0.sock refid PPS lock GPS
allow 192.168.0.0/16
local stratum 10
• SHM — данные от gpsd
• PPS — сигнал точной секунды
• local stratum — объявляем себя сервером
chronyc sources -v
Должно появиться что-то вроде:
#* GPS 0 10 377 123 +0.000123 +0.000001 0.000
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤6👎1
Давайте разберем один из частых вопросов, который может быть задан на собеседовании и как на него отвечать.Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👎3🔥2