Аудит безопасности Linux-серверов: практический чек-лист 2026 | AdminWiki

Аудит безопасности Linux-серверов: практический чек-лист 2026

14 августа 2026 8 мин. чтения

Аудит безопасности Linux-сервера выявляет слабые места до того, как их найдет злоумышленник. Взлом сервера приводит к утечке данных, простою сервисов и финансовым потерям. Этот чек-лист покрывает пять критических зон: учетные записи и права доступа, обновления системы, конфигурацию SSH, межсетевой экран и системные журналы. Каждый шаг содержит готовые команды и рекомендации по устранению проблем. Материал рассчитан на системных администраторов и DevOps-инженеров, которым нужен быстрый и проверенный алгоритм проверки.

Чек-лист структурирован так, чтобы минимизировать временные затраты. Выполняйте шаги по порядку, фиксируйте результаты и сразу исправляйте найденные уязвимости. Для автоматизации рутинных проверок в конце статьи разобран запуск Lynis и создание собственного скрипта.

Подготовка к аудиту: что нужно знать перед началом

Перед началом аудита подготовьте среду. Выполняйте проверки на тестовой копии сервера или в непиковые часы, чтобы не нарушить работу продакшена. Некоторые команды, например поиск SUID-файлов, могут нагружать диск. Ведите журнал изменений: записывайте, что проверили, что исправили и когда.

Для работы потребуется доступ с правами root или sudo. Если сервер используется в продуктиве, предупредите команду о плановой проверке.

Необходимые инструменты и доступ

Стандартный набор утилит, которые используются в этом чек-листе:

  • ssh и sshd - проверка конфигурации SSH-сервера;
  • iptables, firewalld или ufw - управление межсетевым экраном;
  • journalctl - анализ системных журналов;
  • apt или yum/dnf - проверка обновлений;
  • passwd, chage, visudo - управление учетными записями и правами.

Опционально можно установить Lynis, AIDE и fail2ban. Эти инструменты автоматизируют аудит и мониторинг.

Шаг 1: Управление учетными записями и правами доступа

Первый шаг - проверка пользователей и их прав. Неиспользуемые учетные записи, слабые пароли и избыточные привилегии открывают путь для атаки. Начните с просмотра списка пользователей:

awk -F: '($3 >= 1000) {print $1}' /etc/passwd

Эта команда выводит обычных пользователей с UID от 1000. Проверьте, все ли они нужны. Учетные записи с пустым паролем находите так:

awk -F: '($2 == "") {print $1}' /etc/shadow

Если команда вернула имена, немедленно установите пароли или заблокируйте эти учетные записи. Далее проверьте, какие пользователи имеют shell-доступ:

grep -v nologin /etc/passwd

Сервисные учетные записи должны использовать /sbin/nologin или /bin/false. Если видите сервисного пользователя с shell, это повод для проверки.

Проверка паролей и политик учетных записей

Политика паролей задается в файле /etc/login.defs. Проверьте ключевые параметры:

grep -E 'PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_MIN_LEN|PASS_WARN_AGE' /etc/login.defs

Рекомендуемые значения: PASS_MAX_DAYS - 90, PASS_MIN_DAYS - 7, PASS_MIN_LEN - 12, PASS_WARN_AGE - 7. Для каждого пользователя проверьте срок действия пароля:

chage -l username

Обратите внимание на строки «Password expires» и «Account expires». Если пароль не истекает, настройте срок действия:

sudo chage -M 90 username

Проверьте блокировку после неудачных попыток входа:

faillock --user username

Настройте блокировку через PAM, если она не активна. В файле /etc/pam.d/common-auth добавьте строку:

auth required pam_tally2.so deny=5 unlock_time=600

Анализ прав sudo и root-доступа

Пользователи с sudo-правами могут выполнять команды от root. Проверьте конфигурацию sudoers на синтаксические ошибки:

visudo -c

Просмотрите активные правила:

grep -v '^#' /etc/sudoers

Обратите внимание на записи с NOPASSWD. Они позволяют выполнять команды без пароля. Если такая запись не нужна, удалите её. Проверьте членство в группе sudo или wheel:

getent group sudo

Каждый пользователь в этой группе должен быть обоснован. Поиск файлов с SUID/SGID-битами выявляет программы, которые выполняются с правами владельца:

find / -perm -4000 -type f 2>/dev/null

Просмотрите список. Неожиданные SUID-файлы могут быть признаком компрометации или уязвимости.

Шаг 2: Регулярность обновлений системы

Устаревшие пакеты содержат известные уязвимости, которые эксплуатируются автоматическими сканерами. Проверьте наличие обновлений:

sudo apt update && sudo apt list --upgradable

Для RHEL/CentOS:

sudo dnf check-update

Если список обновлений длинный, система долго не обновлялась. Установите обновления безопасности в первую очередь:

sudo apt upgrade

Проверьте, какие обновления безопасности уже установлены. Для Debian/Ubuntu:

grep -i security /etc/apt/sources.list

Репозиторий security должен быть подключен. Без него система не получает патчи безопасности.

Настройка автоматических обновлений

Автоматические обновления снижают риск пропуска критических патчей. Для Debian/Ubuntu установите пакет:

sudo apt install unattended-upgrades

Включите автоматические обновления безопасности:

sudo dpkg-reconfigure --priority=low unattended-upgrades

Проверьте конфигурацию в файле /etc/apt/apt.conf.d/50unattended-upgrades. Для RHEL/CentOS используйте dnf-automatic:

sudo dnf install dnf-automatic

В файле /etc/dnf/automatic.conf установите apply_updates = yes и download_updates = yes. Запустите сервис:

sudo systemctl enable --now dnf-automatic.timer

Проверьте статус таймера:

systemctl list-timers dnf-automatic.timer

Шаг 3: Безопасность конфигурации SSH

SSH - основная точка входа на сервер. Небезопасная конфигурация позволяет подбирать пароли перебором или входить с root-правами. Проверьте текущую конфигурацию:

sudo sshd -T | grep -E 'permitrootlogin|passwordauthentication|pubkeyauthentication'

Вывод покажет активные параметры. Если permitrootlogin установлен в yes, отключите root-логин. Если passwordauthentication равен yes, переходите на ключи.

Рекомендуемые параметры sshd_config

Откройте конфигурацию:

sudo nano /etc/ssh/sshd_config

Установите следующие параметры:

PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
AllowUsers username
Port 2222

Пояснения:

  • PermitRootLogin no - запрещает вход под root;
  • PasswordAuthentication no - отключает аутентификацию по паролю;
  • PubkeyAuthentication yes - разрешает вход по ключам;
  • MaxAuthTries 3 - ограничивает количество попыток аутентификации;
  • AllowUsers - разрешает доступ только указанным пользователям;
  • Port 2222 - меняет стандартный порт, снижая шум от автоматических сканеров.

После изменений проверьте синтаксис и перезапустите sshd:

sudo sshd -t && sudo systemctl restart sshd

Использование ключей SSH и отключение паролей

Сгенерируйте ключ на локальной машине:

ssh-keygen -t ed25519 -a 100

Скопируйте публичный ключ на сервер:

ssh-copy-id -p 2222 username@server_ip

Проверьте вход по ключу. Если всё работает, отключите парольную аутентификацию в sshd_config и перезапустите sshd. Теперь доступ возможен только по ключу.

Шаг 4: Настройка межсетевого экрана

Межсетевой экран фильтрует входящий трафик и закрывает неиспользуемые порты. Проверьте статус файрвола:

sudo ufw status

Для firewalld:

sudo firewall-cmd --state

Для iptables:

sudo iptables -L -n

Если файрвол не активен, включите его. Базовое правило: запретить все входящие, разрешить исходящие.

Работа с UFW (Ubuntu/Debian)

Установите правила по умолчанию:

sudo ufw default deny incoming
sudo ufw default allow outgoing

Разрешите только нужные порты. Для SSH на порту 2222:

sudo ufw allow 2222/tcp

Для веб-сервера:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Включите файрвол:

sudo ufw enable

Проверьте статус:

sudo ufw status verbose

Работа с firewalld (RHEL/CentOS)

Запустите firewalld:

sudo systemctl enable --now firewalld

Добавьте сервисы:

sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https

Перезагрузите правила:

sudo firewall-cmd --reload

Проверьте активные зоны и сервисы:

sudo firewall-cmd --list-all

Шаг 5: Анализ системных журналов

Журналы фиксируют попытки входа, ошибки и подозрительную активность. Регулярный анализ логов помогает обнаружить атаку на ранней стадии. Просмотрите журнал SSH:

sudo journalctl -u ssh

Найдите неудачные попытки входа:

sudo grep 'Failed password' /var/log/auth.log

Большое количество неудачных попыток с одного IP указывает на перебор паролей. Заблокируйте такой IP через файрвол:

sudo ufw deny from attacker_ip

Просмотрите системный журнал в реальном времени:

sudo tail -f /var/log/syslog

Обращайте внимание на сообщения о сбоях, перезапусках сервисов и необычных процессах.

Настройка оповещений о подозрительной активности

fail2ban автоматически блокирует IP после нескольких неудачных попыток входа. Установите его:

sudo apt install fail2ban

Создайте локальную конфигурацию:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

В файле jail.local настройте параметры: bantime, findtime, maxretry. Запустите сервис:

sudo systemctl enable --now fail2ban

Проверьте статус:

sudo fail2ban-client status

logwatch отправляет ежедневный отчет о логах на email. Установите и настройте его для регулярного мониторинга.

Дополнительные проверки и автоматизация

Ручной аудит занимает время. Автоматизация снижает риск пропуска проверок и ускоряет процесс. Используйте Lynis для комплексного аудита и собственные скрипты для регулярных проверок.

Использование Lynis для автоматического аудита

Установите Lynis:

sudo apt install lynis

Запустите аудит:

sudo lynis audit system

Lynis проверит сотни параметров и выведет отчет с предупреждениями и рекомендациями. Изучите секции Warnings и Suggestions. Приоритизируйте исправления по уровню риска. Lynis также можно интегрировать в cron для регулярных проверок.

Создание собственного скрипта проверки

Простой скрипт для регулярной проверки ключевых параметров:

#!/bin/bash
echo "=== Обновления ==="
sudo apt update > /dev/null 2>&1
sudo apt list --upgradable | grep -v Listing
echo "=== Пустые пароли ==="
awk -F: '($2 == "") {print $1}' /etc/shadow
echo "=== Sudoers ==="
grep -v '^#' /etc/sudoers | grep NOPASSWD
echo "=== Firewall ==="
sudo ufw status
echo "=== Неудачные входы ==="
sudo grep 'Failed password' /var/log/auth.log | tail -10

Сохраните скрипт в файл security_check.sh, сделайте исполняемым и добавьте в cron:

chmod +x security_check.sh
crontab -e

Добавьте строку для еженедельного запуска:

0 3 * * 1 /path/to/security_check.sh > /var/log/security_check.log 2>&1

Скрипт будет выполняться каждый понедельник в 3:00 и сохранять отчет в лог.

Заключение: поддержание безопасности в долгосрочной перспективе

Проводите аудит ежемесячно или после значительных изменений: обновление ОС, установка нового ПО, смена конфигурации. Безопасность - это процесс, а не разовое действие. Регулярный мониторинг журналов, своевременные обновления и контроль прав доступа снижают риск инцидентов.

Для углубленного изучения темы рекомендуем материалы по hardening Linux-серверов и комплексному аудиту IT-инфраструктуры. Если вы работаете с контейнерными средами, обратите внимание на практический hardening Linux-сервера и комплексный аудит IT-инфраструктуры. Для автоматизации проверок используйте готовые скрипты и инструменты.

Если вам нужен сервер для тестирования этих инструкций, рассмотрите облачную инфраструктуру Timeweb Cloud. Для работы с большим количеством API и автоматизации задач можно использовать агрегатор API AiTunnel.

Поделиться:
Сохранить гайд? В закладки браузера