Аудит безопасности 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.