RHEL 7 でシステム ログを管理する方法 (構成、ローテーション、データベースへのインポート) - パート 5
RHEL 7 システムを安全に保つには、ログ ファイルを調べて、そのようなシステムで行われるすべてのアクティビティを監視する方法を知る必要があります。したがって、異常なアクティビティや潜在的に悪意のあるアクティビティを検出し、システムのトラブルシューティングを実行したり、別の適切なアクションを実行したりすることができます。
RHEL 7 では、rsyslogd デーモンがシステム ログを担当し、/etc/rsyslog.conf から設定を読み取ります (このファイルはすべてのシステム ログのデフォルトの場所を指定します)。 /etc/rsyslog.d 内のファイル (存在する場合)。
Rsyslogd の構成
rsyslog.conf を簡単に調べると、始めるのに役立ちます。このファイルは 3 つの主要セクションに分かれています:モジュール (rsyslog はモジュール設計に従っているため)、グローバル ディレクティブ (rsyslogd デーモンのグローバル プロパティの設定に使用されます)、 > ルールです。おそらくご想像のとおり、この最後のセクションは、何がログに記録または表示されるか (セレクターとも呼ばれます) と場所を示しており、この記事全体を通じて焦点を当てます。
rsyslog.conf の一般的な行は次のとおりです。
上の画像では、セレクターがセミコロンで区切られた 1 つ以上のファシリティ: 優先度のペアで構成されていることがわかります。ファシリティはメッセージのタイプを表します (詳細については、RFC 3164 のセクション 4.1.1 を参照してください)。 rsyslog で使用できる機能の完全なリスト)、優先度はその重大度を示します。これは、次の説明のない単語のいずれかになります。
- デバッグ
- 情報
- 知らせ
- 警告
- エラー
- クリティカル
- 警告
- 現れる
それ自体は優先順位ではありませんが、 キーワードなしは、指定された施設のすべてで優先順位がないことを意味します。
注: 特定の優先度は、その優先度以上のすべてのメッセージをログに記録する必要があることを示します。したがって、上記の例の行は、メール、に属するメッセージを除く、優先度情報以上のすべてのメッセージ (機能に関係なく) をログに記録するように rsyslogd デーモンに指示します。 authpriv および cron サービス (この機能からのメッセージは考慮されません) を /var/log/messages にコピーします。
コロン記号を使用して複数の施設をグループ化し、すべての施設に同じ優先順位を適用することもできます。したがって、次の行は次のようになります。
*.info;mail.none;authpriv.none;cron.none /var/log/messages
次のように書き換えることができます
*.info;mail,authpriv,cron.none /var/log/messages
つまり、メール、authpriv、およびcronの機能がグループ化され、キーワードなしが適用されます。そのうちの3つ。
カスタムログファイルの作成
すべてのデーモン メッセージを /var/log/tecmint.log に記録するには、rsyslog.conf または別のファイル (管理が容易) に次の行を追加する必要があります。 ) /etc/rsyslog.d 内:
daemon.* /var/log/tecmint.log
デーモンを再起動しましょう (サービス名が d で終わっていないことに注意してください)。
systemctl restart rsyslog
そして、2 つのランダムなデーモンを再起動する前と後にカスタム ログの内容を確認します。
自習演習として、機能と優先順位を試してみて、追加のメッセージを既存のログ ファイルに記録するか、前の例のように新しいログ ファイルを作成することをお勧めします。
Logrotate を使用したログのローテーション
ログ ファイルが際限なく増大するのを防ぐために、logrotate ユーティリティを使用してログをローテーション、圧縮、削除し、メール送信することで、大量のログ ファイルを生成するシステムの管理が容易になります。
推奨読書: Linux で 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 ページ (man logrotate および man logrotate.conf) を参照してください。読みやすいように、どちらのファイルもこの記事とともに PDF 形式で提供されます。
システム エンジニアとして、/var を別のパーティション /< に置くかどうかに応じて、ログをどのくらいの期間、どの形式で保存するかを決定するのはほぼあなた次第です。 論理ボリューム。それ以外の場合は、ストレージ領域を節約するために古いログを削除することを検討してください。一方、会社またはクライアントの内部ポリシーに従って、将来のセキュリティ監査のために複数のログを保存しなければならない場合があります。
データベースへのログの保存
もちろん、ログを調べることは (grep や正規表現などのツールを使用したとしても) かなり面倒な作業になる可能性があります。そのため、rsyslog を使用すると、データベース (OTB でサポートされる RDBMS には MySQL、MariaDB、PostgreSQL、Oracle など) にエクスポートできます。
チュートリアルのこのセクションでは、ログが管理されている同じ RHEL 7 ボックスに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 アカウントを使用します。
次に、GitHub から createDB.sql スクリプトをダウンロードし、データベース サーバーにインポートします。
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 構文を使用したログのクエリ
次に、ログを変更するいくつかのタスク (サービスの停止と開始など) を実行し、DB サーバーにログを記録し、標準 SQL コマンドを使用してログを表示および検索します。
USE Syslog;
SELECT ReceivedAt, Message FROM SystemEvents;
まとめ
この記事では、システム ログの設定方法、ログのローテーション方法、検索を容易にするためにメッセージをデータベースにリダイレクトする方法について説明しました。これらのスキルが、RHCE 試験の準備や日常の業務においても役立つことを願っています。
いつものように、フィードバックは大歓迎です。お気軽に以下のフォームをご利用ください。