Заметки о решаемых задачах АйТишников

Сделал - запиши. Нашёл - сохрани :)

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

Практическое руководство по auditd

Практическое руководство по auditd

 

 

 

Введение: почему мониторинг действий — это must-have
Сервер без должного аудита напоминает крепость с открытыми воротами: вы не узнаете, кто внутри и что происходит. Стандартные логи часто недостаточно детализированы, особенно когда нужно отследить каждое действие пользователя — от запуска команд до изменения критичных файлов. В этом материале разберем встроенный в Linux инструмент auditd, который обеспечивает глубинный контроль, и дополним его автоматизированной системой уведомлений на Python.

Что можно отслеживать с помощью auditd:

  • Любое использование sudo (кто, когда и какую команду выполнил)
  • Критичные операции: удаление файлов, изменение прав доступа, доступ к системным файлам
  • Историю исполненных команд в shell
  • Действия, предшествующие инцидентам (например, перед падением службы)

Установка и базовая настройка auditd
Перед началом работы убедитесь, что auditd установлен:

# Для Debian/Ubuntu:
sudo apt install auditd -y

# Для CentOS/RHEL:
sudo yum install audit

Активируем службу и добавляем в автозагрузку:

sudo systemctl enable --now auditd
sudo systemctl status auditd   # Проверяем, что служба работает

Основы управления правилами аудита
Правила можно добавлять временно (до перезагрузки) или постоянно. Для просмотра текущих правил используется:

sudo auditctl -l

Пример временного правила для мониторинга доступа к /etc/passwd:

sudo auditctl -w /etc/passwd -p rwa -k sensitive_access

Здесь:

  • -w — путь к файлу или директории
  • -p — типы операций: read, write, execute, attribute change
  • -k — метка для удобства фильтрации логов

Постоянные правила и их конфигурация
Постоянные правила прописываются в /etc/audit/rules.d/audit.rules. Пример конфигурации:

# Мониторинг изменений в /etc/passwd и /etc/shadow
-w /etc/passwd -p wa -k etc_change
-w /etc/shadow -p wa -k shadow_access

# Аудит всех команд, запущенных через sudo
-w /usr/bin/sudo -p x -k sudo_log

# Фиксация операций удаления файлов
-a always,exit -F arch=b64 -S unlink -S unlinkat -S rename -S renameat -k file_deletion

# Мониторинг запуска shell-интерпретаторов
-w /bin/bash -p x -k shell_cmd
-w /bin/zsh -p x -k shell_cmd

Применяем правила командой:

sudo auditctl -R /etc/audit/rules.d/audit.rules

Анализ логов: ключевые утилиты
Логи сохраняются в /var/log/audit/audit.log. Для работы с ними полезны:

  • ausearch — поиск по записям:

    sudo ausearch -k sudo_log    # Фильтр по метке
    sudo ausearch -m EXECVE      # Только исполнение команд
    
  • aureport — генерация отчетов:

    sudo aureport --summary      # Общая статистика событий
    sudo aureport -f -i          Детальный отчет по файловым операциям
    

Пример записи в логе и её структура:

type=SYSCALL msg=audit(1620000000.123:456): arch=c000003e syscall=59 success=yes exit=0 a0=123 a1=456 a2=789 a3=0 items=2 ppid=1234 pid=5678 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 comm="sudo" exe="/usr/bin/sudo" key="sudo_log"

Здесь uid=0 означает выполнение от root, а key="sudo_log" указывает на правило, которое сработало.

Автоматизация аудита: Python-скрипт для анализа и алертов
Предлагаем готовое решение для парсинга логов и отправки уведомлений. Создайте файл audit_monitor.py:

#!/usr/bin/env python3
import subprocess
import re
from datetime import datetime

ALERT_RULES = {
    "sudo_log": "Обнаружено использование sudo: {details}",
    "shadow_access": "Зафиксирован доступ к /etc/shadow: {details}",
    "file_deletion": "Выполнено удаление файла: {details}",
}

def analyze_audit_log():
    alerts = []
    for rule_key, alert_text in ALERT_RULES.items():
        log_data = subprocess.getoutput(f"ausearch -k {rule_key} --raw | aureport -i -f")
        for entry in log_data.split('\n'):
            if not entry.strip():
                continue
            time_match = re.search(r"msg=audit\((\d+\.\d+)", entry)
            user_match = re.search(r"auid=(\d+)", entry)
            if time_match and user_match:
                timestamp = datetime.fromtimestamp(float(time_match.group(1)))
                user_id = f"UID {user_match.group(1)}"
                alert_details = f"{timestamp} | {user_id} | {entry}"
                alerts.append(alert_text.format(details=alert_details))
    return alerts

if __name__ == "__main__":
    detected_events = analyze_audit_log()
    if detected_events:
        print("\n".join(detected_events))
        # Для отправки в Telegram раскомментируйте блок ниже
        # import requests
        # bot_token = "YOUR_BOT_TOKEN"
        # chat_id = "YOUR_CHAT_ID"
        # requests.post(f"https://api.telegram.org/bot{bot_token}/sendMessage", json={"chat_id": chat_id, "text": "\n".join(detected_events)})
    else:
        print("Подозрительных событий не найдено.")

Тестирование:

chmod +x audit_monitor.py
sudo cat /etc/shadow  # Тестовое событие
./audit_monitor.py

Интеграция с Telegram и автоматические проверки

  1. Создайте бота через @BotFather и получите токен.
  2. Узнайте ID чата (можно использовать @userinfobot).
  3. Раскомментируйте и настройте блок отправки в скрипте.
  4. Добавьте в cron для регулярного запуска:
echo "*/5 * * * * /path/to/audit_monitor.py >> /var/log/audit_monitor.log" | sudo tee -a /etc/crontab

Возможные улучшения системы

  • Добавьте фильтрацию по времени (действия ночью → повышенный приоритет)
  • Введите мониторинг сетевых конфигураций:
    -w /etc/ssh/sshd_config -p wa -k ssh_changes
    
  • Реализуйте Whitelist для легитимных операций, чтобы снизить шум.

Заключение
Предложенное решение позволяет не только детально аудитить систему, но и оперативно реагировать на инциденты. Это особенно актуально для выполнения compliance-требований и расследования инцидентов. Если у вас есть опыт использования auditd или идеи по доработке скрипта — делитесь в комментариях.


 

26 августа 2025, 12:11    Александр Linux 0    0 0

 

 

 

 



Комментарии ()

    Вы должны авторизоваться, чтобы оставлять комментарии.