10.2. SELinux と journald
systemd では、journald デーモン (systemd-journal とも呼ばれます) は、ログデータを収集して保存するシステムサービスである syslog ユーティリティーの代替手段です。これは、カーネル、libc syslog() 関数を使用するユーザープロセス、システムサービスの標準出力およびエラー出力、またはネイティブの API を使用して受信したログ情報に基づいて、構造化されたジャーナルおよびインデックス化されたジャーナルを作成し、維持します。暗黙的に、各ログメッセージのメタデータフィールドを安全な方法で収集します。
systemd-journal サービスは、セキュリティーを向上させるために、SELinux で使用できます。SELinux は、設計された機能を実行することのみを許可することで、プロセスを制御します。ポリシー作成者のセキュリティー目標によっては、これよりも低くなることもあります。たとえば、SELinux は、侵害された ntpd プロセスが Network Time を処理する以外の操作を行わないようにします。ただし、ntpd プロセスは、syslog メッセージを送信するため、SELinux は、侵害されたプロセスが引き続きメッセージを送信できるようにします。侵害されたntpdは、syslog メッセージを他のデーモンに合わせてフォーマットし、管理者を誤認させる可能性があります。さらに悪い場合は、syslog ファイルを読み込んでシステム全体を危険にさらすユーティリティーです。
systemd-journal デーモンは、すべてのログメッセージを検証し、とりわけ SELinux ラベルを追加します。その後、ログメッセージで不整合を検出し、発生前にこのタイプの攻撃を防ぐことができます。journalctl ユーティリティーを使用すると、systemd ジャーナルのログをクエリーできます。コマンドライン引数が指定されていない場合は、このユーティリティーを実行すると、最も古いエントリーから始まり、ジャーナルの全コンテンツがリスト表示されます。システムコンポーネントのログを含む、システムで生成されたすべてのログを表示するには、root で journalctl を実行します。root 以外のユーザーで実行した場合は、現在ログインしているユーザーに関連するログのみが出力されます。
例10.2 journalctl でログのリスト表示
journalctl を使用すると、特定の SELinux ラベルに関連するログをすべてリスト表示できます。たとえば、次のコマンドは、system_u:system_r:policykit_t:s0 ラベルに記録されているログをすべてリスト表示します。
journalctl の詳細は、journalctl(1) man ページを参照してください。