Поиск по сайту:

Как управлять системными журналами (настройка, ротация и импорт в базу данных) в RHEL 7 — часть 5


Чтобы обеспечить безопасность ваших систем RHEL 7, вам необходимо знать, как отслеживать все действия, происходящие в таких системах, путем изучения файлов журналов. Таким образом, вы сможете обнаружить любую необычную или потенциально вредоносную активность и выполнить устранение неполадок системы или предпринять другие соответствующие действия.

В RHEL 7 демон rsyslogd отвечает за ведение журнала системы и считывает свою конфигурацию из /etc/rsyslog.conf (этот файл определяет расположение по умолчанию для всех системных журналов) и из файлов внутри /etc/rsyslog.d, если таковые имеются.

Конфигурация Rsyslogd

Для начала будет полезно быстро проверить файл rsyslog.conf. Этот файл разделен на 3 основных раздела: Модули (поскольку rsyslog имеет модульную структуру), Глобальные директивы (используются для установки глобальных свойств демона rsyslogd) и Правила. Как вы, вероятно, догадались, в этом последнем разделе указано, что регистрируется или отображается (также известное как селектор) и где, и на этом мы будем сосредоточиваться на протяжении всей этой статьи.

Типичная строка в rsyslog.conf выглядит следующим образом:

На изображении выше мы видим, что селектор состоит из одной или нескольких пар Facility:Priority, разделенных точкой с запятой, где Facility описывает тип сообщения (см. раздел 4.1.1 в RFC 3164, чтобы узнать полный список средств, доступных для rsyslog), а «Приоритет» указывает на серьезность, которая может быть одним из следующих слов, говорящих само за себя:

  1. отлаживать
  2. Информация
  3. уведомление
  4. предупреждение
  5. ошибаться
  6. крит.
  7. тревога
  8. появление

Ключевое слово none, хотя и не является приоритетом само по себе, означает полное отсутствие приоритета для данного объекта.

Примечание. Установленный приоритет означает, что все сообщения с таким приоритетом и выше должны регистрироваться. Таким образом, строка в приведенном выше примере дает указание демону rsyslogd регистрировать все сообщения с информацией о приоритете или выше (независимо от средства), за исключением тех, которые принадлежат mail, authpriv и cron (сообщения, поступающие от этих средств, учитываться не будут) в /var/log/messages.

Вы также можете сгруппировать несколько объектов, используя знак двоеточия, чтобы применить ко всем им одинаковый приоритет. Таким образом, строка:

*.info;mail.none;authpriv.none;cron.none                /var/log/messages

Можно переписать как

*.info;mail,authpriv,cron.none                /var/log/messages

Другими словами, средства mail, authpriv и cron группируются, а ключевое слово none применяется к трое из них.

Создание пользовательского файла журнала

Чтобы регистрировать все сообщения демона в /var/log/tecmint.log, нам нужно добавить следующую строку либо в rsyslog.conf, либо в отдельный файл (проще управлять ) внутри /etc/rsyslog.d:

daemon.*    /var/log/tecmint.log

Перезапустим демон (обратите внимание, что имя службы не заканчивается на d):

systemctl restart rsyslog

И проверим содержимое нашего пользовательского журнала до и после перезапуска двух случайных демонов:

В качестве упражнения для самообучения я бы порекомендовал вам поиграться с возможностями и приоритетами и либо записать дополнительные сообщения в существующие файлы журналов, либо создать новые, как в предыдущем примере.

Ротация журналов с помощью Logrotate

Чтобы файлы журналов не росли бесконечно, утилита logrotate используется для ротации, сжатия, удаления и альтернативной отправки журналов по почте, что упрощает администрирование систем, генерирующих большое количество файлов журналов.

Рекомендуется к прочтению: Как настроить и управлять ротацией журналов с помощью Logrotate в Linux

Logrotate запускается ежедневно как задание cron (/etc/cron.daily/logrotate) и считывает свою конфигурацию из /etc/logrotate .conf и из файлов, расположенных в /etc/logrotate.d, если таковые имеются.

Как и в случае с rsyslog, даже если вы можете включить настройки для определенных служб в основной файл, создание отдельных файлов конфигурации для каждой из них поможет лучше организовать ваши настройки.

Давайте взглянем на типичный logrotate.conf:

В приведенном выше примере logrotate выполнит следующие действия для /var/loh/wtmp: попытается выполнить ротацию только один раз в месяц, но только если размер файла не менее 1 МБ, затем создайте новый файл журнала с разрешениями 0664 и правом собственности, переданным пользователю root и группе utmp. Далее сохраните только один архивированный журнал, как указано в директиве Rotate:

Давайте теперь рассмотрим другой пример, найденный в /etc/logrotate.d/httpd:

Вы можете прочитать больше о настройках logrotate на его страницах руководства (man logrotate и man logrotate.conf). Оба файла прилагаются к статье в формате PDF для удобства чтения.

Как системному инженеру, вы сами будете решать, как долго будут храниться журналы и в каком формате, в зависимости от того, есть ли у вас /var в отдельном разделе /< логический том. В противном случае вам действительно стоит рассмотреть возможность удаления старых журналов, чтобы сэкономить место для хранения. С другой стороны, вы можете быть вынуждены вести несколько журналов для будущего аудита безопасности в соответствии с внутренней политикой вашей компании или клиента.

Сохранение журналов в базу данных

Конечно, изучение журналов (даже с помощью таких инструментов, как grep и регулярные выражения) может оказаться довольно утомительной задачей. По этой причине rsyslog позволяет нам экспортировать их в базу данных (OTB, поддерживаемые СУБД, включают MySQL, MariaDB, PostgreSQL и Oracle.

В этом разделе руководства предполагается, что вы уже установили сервер и клиент MariaDB в том же компьютере RHEL 7, где ведется управление журналами:

yum update && yum install mariadb mariadb-server mariadb-client rsyslog-mysql
systemctl enable mariadb && systemctl start mariadb

Затем используйте утилиту mysql_secure_installation, чтобы установить пароль для пользователя root и другие соображения безопасности:

Примечание. Если вы не хотите использовать пользователя root MariaDB для вставки сообщений журнала в базу данных, вы можете настроить другую учетную запись пользователя. сделать это. Объяснение того, как это сделать, выходит за рамки данного руководства, но подробно объясняется в базе знаний MariaDB. В этом уроке для простоты мы будем использовать учетную запись root.

Затем загрузите скрипт createDB.sql с GitHub и импортируйте его на сервер базы данных:

mysql -u root -p < createDB.sql

Наконец, добавьте следующие строки в /etc/rsyslog.conf:

$ModLoad ommysql
$ActionOmmysqlServerPort 3306
*.* :ommysql:localhost,Syslog,root,YourPasswordHere

Перезапустите rsyslog и сервер базы данных:

systemctl restart rsyslog 
systemctl restart mariadb

Запрос журналов с использованием синтаксиса SQL

Теперь выполните некоторые задачи, которые изменят журналы (например, остановку и запуск служб), затем войдите на сервер БД и используйте стандартные команды SQL для отображения и поиска в журналах:

USE Syslog;
SELECT ReceivedAt, Message FROM SystemEvents;

Краткое содержание

В этой статье мы объяснили, как настроить системное ведение журнала, как выполнять ротацию журналов и как перенаправлять сообщения в базу данных для облегчения поиска. Мы надеемся, что эти навыки пригодятся вам при подготовке к экзамену RHCE, а также при выполнении ваших повседневных обязанностей.

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