RHEL 7でシステムログを管理する方法(構成、ローテーション、データベースへのインポート)-パート5


RHEL 7システムを安全に保つには、ログファイルを調べて、そのようなシステムで発生するすべてのアクティビティを監視する方法を知る必要があります。したがって、異常または潜在的に悪意のあるアクティビティを検出し、システムのトラブルシューティングを実行したり、別の適切なアクションを実行したりできます。

RHEL 7では、rsyslogdデーモンがシステムロギングを担当し、/ etc/rsyslog.conf(このファイルはすべてのシステムログのデフォルトの場所を指定します)および/etc/rsyslog.d内のファイル(存在する場合)からその構成を読み取ります。

Rsyslogd構成

rsyslog.confの簡単な検査は、開始するのに役立ちます。このファイルは、モジュール(rsyslogがモジュラー設計に従っているため)、グローバルディレクティブ(rsyslogdデーモンのグローバルプロパティを設定するために使用)、およびルールの3つの主要なセクションに分かれています。ご想像のとおり、この最後のセクションでは、ログに記録または表示される内容(セレクターとも呼ばれます)と場所を示し、この記事全体で焦点を当てます。

rsyslog.confの一般的な行は次のとおりです。

上の画像では、セレクターがセミコロンで区切られた1つ以上のペアFacility:Priorityで構成されていることがわかります。ここで、Facilityはメッセージのタイプを示します(RFC 3164のセクション4.1.1を参照して、 rsyslog)およびPriorityは、その重大度を示します。これは、次の自明の単語の1つである可能性があります。

  1. debug
  2. info
  3. notice
  4. warning
  5. err
  6. crit
  7. alert
  8. emerg

優先度自体ではありませんが、キーワードnoneは、指定されたすべての機能で優先度がないことを意味します。

注:特定の優先度は、そのような優先度以上のすべてのメッセージをログに記録する必要があることを示します。したがって、上記の例の行は、mail、authpriv、およびcronサービスに属するメッセージを除く(ファシリティに関係なく)優先度情報以上のすべてのメッセージをログに記録するようにrsyslogdデーモンに指示します(このファシリティからのメッセージは考慮されません) )/ 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が3つに適用されます。

すべてのデーモンメッセージを/var/log/tecmint.logに記録するには、rsyslog.confまたは/etc/rsyslog.d内の別のファイル(管理しやすい)に次の行を追加する必要があります。

daemon.*    /var/log/tecmint.log

デーモンを再起動しましょう(サービス名がdで終わっていないことに注意してください)。

# systemctl restart rsyslog

また、2つのランダムデーモンを再起動する前後に、カスタムログの内容を確認します。

自習の演習として、機能と優先順位を試して、既存のログファイルに追加のメッセージを記録するか、前の例のように新しいメッセージを作成することをお勧めします。

Logrotateを使用したログのローテーション

ログファイルが際限なく大きくなるのを防ぐために、logrotateユーティリティを使用してログをローテーション、圧縮、削除、またはメールで送信し、大量のログファイルを生成するシステムの管理を容易にします。

Logrotateは毎日cronジョブ(/etc/cron.daily/logrotate)として実行され、その構成を/etc/logrotate.confおよび/etc/logrotate.dにあるファイル(存在する場合)から読み取ります。

rsyslogの場合と同様に、メインファイルに特定のサービスの設定を含めることができる場合でも、それぞれに個別の構成ファイルを作成すると、設定をより適切に整理するのに役立ちます。

典型的なlogrotate.confを見てみましょう。

上記の例では、logrotateは/ var/loh/wtmpに対して次のアクションを実行します。月に1回だけローテーションを試みますが、ファイルのサイズが1 MB以上の場合に限り、権限が設定された新しいログファイルを作成します。 0664に、所有権はユーザーrootとグループutmpに与えられます。次に、rotateディレクティブで指定されているように、アーカイブされたログを1つだけ保持します。

/etc/logrotate.d/httpdにある別の例を考えてみましょう。

logrotateの設定の詳細については、そのmanページ(manlogrotateおよびmanlogrotate.conf)を参照してください。どちらのファイルも、読みやすくするために、この記事とともにPDF形式で提供されています。

システムエンジニアは、別のパーティション/論理ボリュームに/ varがあるかどうかに応じて、ログを保存する期間と形式を決定するのはほとんどあなた次第です。それ以外の場合は、ストレージスペースを節約するために古いログを削除することを検討する必要があります。一方、会社またはクライアントの内部ポリシーに従って、将来のセキュリティ監査のために複数のログを保持することを余儀なくされる場合があります。

もちろん、ログを調べることは(grepや正規表現などのツールを使用しても)かなり退屈な作業になる可能性があります。そのため、rsyslogを使用すると、それらをデータベースにエクスポートできます(OTBでサポートされているRDBMSには、MySQL、MariaDB、PostgreSQL、およびOracleが含まれます。

チュートリアルのこのセクションでは、ログが管理されているのと同じRHEL7ボックスにMariaDBサーバーとクライアントがすでにインストールされていることを前提としています。

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

次に、 mysql_secure_installation ユーティリティを使用して、rootユーザーのパスワードとその他のセキュリティ上の考慮事項を設定します。

注:MariaDB rootユーザーを使用してログメッセージをデータベースに挿入したくない場合は、別のユーザーアカウントを構成して挿入できます。その方法の説明はこのチュートリアルの範囲外ですが、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

次に、ログを変更するいくつかのタスク(サービスの停止や開始など)を実行してから、DBサーバーにログを記録し、標準のSQLコマンドを使用してログを表示および検索します。

USE Syslog;
SELECT ReceivedAt, Message FROM SystemEvents;

概要

この記事では、システムログを設定する方法、ログをローテーションする方法、および検索を容易にするためにメッセージをデータベースにリダイレクトする方法について説明しました。これらのスキルが、RHCE試験の準備や日常の責任においても役立つことを願っています。

いつものように、あなたのフィードバックは大歓迎です。以下のフォームを使用して、お気軽にご連絡ください。