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 _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0
Oct 21 10:22:42 localhost.localdomain polkitd[647]: Started polkitd version 0.112
Oct 21 10:22:44 localhost.localdomain polkitd[647]: Loading rules from directory /etc/polkit-1/rules.d
Oct 21 10:22:44 localhost.localdomain polkitd[647]: Loading rules from directory /usr/share/polkit-1/rules.d
Oct 21 10:22:44 localhost.localdomain polkitd[647]: Finished loading, compiling and executing 5 rules
Oct 21 10:22:44 localhost.localdomain polkitd[647]: Acquired the name org.freedesktop.PolicyKit1 on the system bus Oct 21 10:23:10 localhost polkitd[647]: Registered Authentication Agent for unix-session:c1 (system bus name :1.49, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale en_US.UTF-8) (disconnected from bus)
Oct 21 10:23:35 localhost polkitd[647]: Unregistered Authentication Agent for unix-session:c1 (system bus name :1.80 [/usr/bin/gnome-shell --mode=classic], object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale en_US.utf8)
journalctl
の詳細は、journalctl(1) man ページを参照してください。