Настройка безопасности хоста [110.2]

Рейтинг: 49% · 10 голосов
Полный курс LPIC-1 (экзамены 101-500 и 102-500): архитектура, загрузка, пакеты, команды и текст, ФС и права, шелл-скрипты, пользователи, сервисы, сеть, безопасность. Debian и RHEL.
Ответить
Аватара пользователя
Sergey_Sysadmin
Сообщения: 134
Зарегистрирован: 11 май 2026, 05:31

Настройка безопасности хоста [110.2]

Сообщение Sergey_Sysadmin »

Оглавление курса (41)
  1. Введение в LPIC-1 и как устроен путь администратора
  2. Железо, устройства и модули ядра [101.1]
  3. Загрузка системы: от BIOS до systemd [101.2]
  4. systemd, цели и уровни выполнения [101.3]
  5. План разметки диска и swap [102.1]
  6. Загрузчик GRUB 2 [102.2]
  7. Разделяемые библиотеки [102.3]
  8. Управление пакетами в Debian: dpkg и apt [102.4]
  9. Управление пакетами RPM, DNF и Zypper [102.5]
  10. Linux как гость виртуализации [102.6]
  11. Командная строка Bash [103.1]
  12. Обработка текста фильтрами [103.2]
  13. Базовое управление файлами [103.3]
  14. Потоки, конвейеры и перенаправление [103.4]
  15. Процессы: создание, мониторинг, сигналы [103.5]
  16. Приоритеты выполнения процессов [103.6]
  17. Регулярные выражения [103.7]
  18. Редактор vi и vim [103.8]
  19. Разделы и создание файловых систем [104.1]
  20. Целостность и обслуживание ФС [104.2]
  21. Монтирование файловых систем [104.3]
  22. Урок 21. Права доступа и владение: rwx, chmod, umask и специальные биты
  23. Жёсткие и символические ссылки
  24. FHS и поиск файлов в системе [104.7]
  25. Окружение и кастомизация оболочки [105.1]
  26. Урок 25. Написание простых bash-скриптов [105.2]
  27. Графика, рабочие столы и доступность
  28. Учётные записи пользователей и групп
  29. Автоматизация задач: cron, at, таймеры [107.2]
  30. Локализация и интернационализация [107.3]
  31. Системное время и синхронизация [108.1]
  32. Системное логирование [108.2]
  33. Основы почтового агента (MTA) [108.3]
  34. Печать и CUPS [108.4]
  35. Основы интернет-протоколов [109.1]
  36. Постоянная конфигурация сети [109.2]
  37. Диагностика сети [109.3]
  38. DNS на стороне клиента [109.4]
  39. Задачи администрирования безопасности [110.1]
  40. Настройка безопасности хоста [110.2] (вы здесь)
  41. Шифрование данных: SSH и GnuPG [110.3]
Урок 39. Настройка безопасности хоста [110.2]

Задача администратора - уменьшить площадь атаки на отдельно взятой машине. Это значит: пароли хранить так, чтобы их нельзя было прочитать обычным пользователем, выключить службы, которые никому не нужны, понимать, кто слушает сеть, и уметь быстро закрыть вход в систему. В этом уроке разберём теневые пароли, отключение и маскирование служб через systemd, сокет-активацию вместо старых inetd/xinetd, наследие TCP wrappers, файл блокировки входа и базовую механику PAM с faillock.

Изображение

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

Файл /etc/passwd читается всеми - там лежат имена, UID, оболочки. Если бы там же лежали и хэши паролей, любой пользователь мог бы скопировать их и спокойно перебирать офлайн. Поэтому хэши вынесли в /etc/shadow, доступный только root (права 640, владелец root:shadow). В passwd на месте пароля остаётся символ x - признак того, что реальный хэш в shadow. Утилита pwconv переносит пароли в shadow и проставляет этот x, pwunconv делает обратное. Современный хэш в shadow начинается с $y$ (yescrypt в Debian 13 и свежих Ubuntu) или $6$ (SHA-512), за алгоритмом идут соль и сам хэш.

Каждая запущенная служба - это потенциальная дыра. Принцип минимизации: всё, что не используется, должно быть выключено. В systemd disable убирает службу из автозапуска, но запустить её руками или по зависимости всё ещё можно. mask жёстче - он делает симлинк юнита на /dev/null, и служба не стартует никак, даже если её дёрнет другой юнит. Это разные уровни: disable - не при загрузке, mask - вообще никогда.

Раньше мелкие сетевые сервисы не держали постоянно в памяти, а запускали по требованию через супердемон inetd, позже xinetd. Пришёл пакет на порт - супердемон поднял нужную программу. В 2026 эту роль выполняет сама systemd через сокет-активацию: юнит .socket держит открытым порт, а связанный .service стартует только когда туда кто-то постучался. xinetd и inetd в современных дистрибутивах не ставятся по умолчанию, знать их надо для экзамена, на практике используется socket activation.

TCP wrappers (библиотека libwrap, файлы /etc/hosts.allow и /etc/hosts.deny) - механизм фильтрации по адресу на уровне приложения. Это легаси: в свежих сборках OpenSSH поддержку libwrap выпилили, фильтровать трафик нужно фаерволом (nftables, на смену iptables). Для экзамена знать синтаксис надо, в реальной защите хоста полагайтесь на nftables и firewalld.

PAM (Pluggable Authentication Modules) - это слой между приложением и проверкой пользователя. login, sshd, sudo не реализуют логику паролей сами, а зовут стек PAM-модулей из /etc/pam.d/. Модуль pam_faillock считает неудачные попытки и временно блокирует учётку после порога - так гасят перебор паролей.

Команды и примеры

Перенос паролей в shadow и проверка целостности файлов:

Код: Выделить всё

pwconv            # перенести хэши в /etc/shadow, проставить x в passwd
pwck              # проверить согласованность passwd и shadow
chage -l alice    # сроки действия пароля пользователя
Отключение и маскирование служб (синтаксис одинаков в обоих семействах):

Код: Выделить всё

systemctl disable --now cups.service   # выключить сейчас и убрать из автозапуска
systemctl mask avahi-daemon.service    # запретить запуск полностью
systemctl unmask avahi-daemon.service  # снять маску
systemctl list-unit-files --state=enabled   # что стартует при загрузке
Посмотреть, что слушает сеть:

Код: Выделить всё

ss -tulpn          # TCP/UDP сокеты в режиме LISTEN, с PID и именем процесса
ss -ltn            # только TCP, без резолва имён портов
systemctl list-sockets   # активные .socket-юниты systemd
Установка пакетов и поиск, какой пакет тянет лишнюю службу:

Код: Выделить всё

# Debian 13 / Ubuntu 24.04
apt list --installed | grep -i avahi
dpkg -S /usr/sbin/sshd

# RHEL 10 / Fedora 41+
dnf list --installed | grep -i avahi
rpm -qf /usr/sbin/sshd
Сокет-активация вместо xinetd - короткий разбор пары юнитов:

Код: Выделить всё

systemctl status sshd.socket   # если включён socket-режим
systemctl cat foo.socket       # показать [Socket] ListenStream=НОМЕР
Запрет входа всем, кроме root, на время работ:

Код: Выделить всё

echo "Идут работы, вход закрыт до 18:00" > /etc/nologin
# обычные логины через PAM (pam_nologin) отклоняются, root проходит
rm /etc/nologin                # снять запрет
Блокировки PAM через faillock:

Код: Выделить всё

faillock --user alice          # сколько неудач накопилось
faillock --user alice --reset  # сбросить счётчик и разблокировать
TCP wrappers (легаси, для экзамена). hosts.deny проверяется после hosts.allow:

Код: Выделить всё

# /etc/hosts.allow
sshd: 192.168.10.0/24
# /etc/hosts.deny
ALL: ALL
Частые грабли
  • disable не останавливает уже работающую службу - нужен disable --now или отдельный stop. И disable не мешает её запустить вручную, для этого нужен mask.
  • Маскированная служба тихо игнорируется зависимостями. Забыли про mask на нужном сервисе - он не стартует, а в статусе пишет masked, не failed. Легко проглядеть.
  • Правка /etc/shadow руками ломает формат. Меняйте пароли через passwd и chage, для проверки гоняйте pwck.
  • ss -tulpn без root не покажет PID чужих процессов - запускайте под sudo, иначе колонка с процессом будет пустой.
  • /etc/nologin блокирует и ваши собственные новые SSH-сессии. Если активная сессия отвалится, а файл на месте, обратно зайдёте только через консоль или как root.
  • Надежда на hosts.allow в 2026 - ошибка: многие демоны (включая современный sshd) уже не линкуются с libwrap, и правила просто игнорируются. Фильтруйте nftables.
  • faillock блокирует по умолчанию на время (unlock_time), а не навсегда - не паникуйте, но и не ждите, сбрасывайте через --reset.
Мини-лаба
  • Выполните pwck и убедитесь, что в /etc/passwd на месте паролей стоит x, а хэши лежат в /etc/shadow (посмотрите начало строки: $y$ или $6$).
  • Запустите ss -tulpn под sudo и выпишите все порты в LISTEN с именами процессов. Найдите хотя бы один сервис, который вам не нужен.
  • Отключите этот сервис командой systemctl disable --now, затем перепроверьте через ss, что порт исчез.
  • Замаскируйте сервис через systemctl mask и попробуйте systemctl start - убедитесь, что запуск отклонён.
  • Снимите маску через unmask. Найдите пакет, которому принадлежит файл демона: dpkg -S или rpm -qf.
  • Создайте /etc/nologin с текстом, откройте НОВУЮ SSH-сессию обычным пользователем (должна отклониться), затем удалите файл.
  • Намеренно три раза ошибитесь паролем при su на тестовую учётку, посмотрите faillock --user и сбросьте счётчик через --reset.
Контрольные вопросы
  • Чем отличается systemctl disable от systemctl mask и в каком случае служба всё равно может запуститься?
  • Что означает символ x в поле пароля /etc/passwd и какая утилита его проставляет?
  • Какой командой увидеть все слушающие TCP- и UDP-порты вместе с процессами, и почему её обычно запускают под root?
  • Чем сокет-активация systemd заменяет устаревший xinetd и какой юнит держит открытым порт?
  • Кого пускает в систему наличие файла /etc/nologin и через какой PAM-модуль это работает?
  • Почему в 2026 году нельзя полагаться на /etc/hosts.allow для защиты SSH и чем его заменить?
👍6 ❤️2 🔥1 😄 🤔1
Аватара пользователя
emacscoder
Сообщения: 1
Зарегистрирован: 18 май 2026, 07:16

Re: Настройка безопасности хоста [110.2]

Сообщение emacscoder »

А чем mask лучше disable на проде? У меня avahi после disable все равно поднимался по зависимости от cups, помог только mask - теперь понятно почему.
👍2 ❤️1 🔥 😄 🤔
Аватара пользователя
clickhousegeek
Сообщения: 1
Зарегистрирован: 23 май 2026, 10:21

Re: Настройка безопасности хоста [110.2]

Сообщение clickhousegeek »

Проверил свой sshd через ldd - libwrap там реально нет, так что hosts.allow у меня годами лежал мертвым грузом. Переписал правила на nftables.
👍2 ❤️ 🔥1 😄 🤔1
Ответить
← Предыдущая глава
Задачи администрирования безопасности [110.1]
Следующая глава →
Шифрование данных: SSH и GnuPG [110.3]

Все главы курса «LPIC-1: администратор Linux (101 + 102)»

Поделиться темой: ✈ Telegram VK

Вернуться в «LPIC-1: администратор Linux»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость