Как управлять системными журналами (настройка, ротация и импорт в базу данных) в 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), а «Приоритет» указывает на серьезность, которая может быть одним из следующих слов, говорящих само за себя:
- отлаживать
- Информация
- уведомление
- предупреждение
- ошибаться
- крит.
- тревога
- появление
Ключевое слово 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, а также при выполнении ваших повседневных обязанностей.
Как всегда, ваши отзывы более чем приветствуются. Не стесняйтесь использовать форму ниже, чтобы связаться с нами.