MENU

Linuxのlogrotate設定入門|ログファイルの権限管理・改ざん防止・保存期間設定でセキュリティ証跡を守る実践ガイド

ログファイルは不正アクセス調査の生命線です。しかし、logrotateの設定が不適切だと権限が緩すぎてログが誰でも読めたり、保存期間が短すぎてインシデント発生前のログが消えたりします。

インシデント発生から発見まで数週間かかるケースも珍しくなく、そのときに「ログが残っていない」では調査ができません。

この記事では、Linuxのlogrotateの設定を見直す手順を、権限管理・圧縮・保存期間・rsyslog連携・改ざん防止の観点から解説します。情シス1人体制でも今日から実践できる内容です。

Linuxのlogrotate設定入門|ログファイルの権限管理・改ざん防止・保存期間設定でセキュリティ証跡を守る実践ガイド - 解説

目次

logrotateとは?セキュリティ視点での重要性

logrotateはLinuxに標準搭載されたログ管理ツールで、cronを通じて定期的に実行されます。増え続けるログファイルを自動でローテーション(切り替え)し、古いファイルを圧縮・削除してディスクの枯渇を防ぎます。

一般的には「ディスク管理のツール」と思われがちですが、セキュリティの観点では次の3点が特に重要です。

・証跡の保全期間: 監査基準(PCI DSSなど)では90日以上のログ保存が求められます。rotate設定が不足すると証拠が消えます
・ローテーション後の権限: 新しいログファイルの権限が誤って644(誰でも読める)になると、認証失敗記録などがシステム利用者全員に見えてしまいます
・改ざんリスク: 攻撃者はローカルのログを消去して侵入痕跡を隠します。ローカルログに頼りすぎる設計には脆弱性があります

Linuxのファイル権限の基礎については、姉妹サイトLinuxMaster.JPでも詳しく解説しています。

logrotateの設定ファイルの構成

logrotateの設定は以下のファイル・ディレクトリで管理されています。

・/etc/logrotate.conf: デフォルトのグローバル設定。ここに書いた設定が全ログに適用されます
・/etc/logrotate.d/: パッケージ・アプリごとの個別設定。このディレクトリ内のファイルが自動読み込まれます
・/var/lib/logrotate/status: 各ファイルの最終ローテーション日時の記録(ディストリビューションによってパスが異なります)

基本的な設定ブロックの構造は次のとおりです。

# /etc/logrotate.d/webapp の例 /var/log/webapp/*.log { daily # 毎日ローテーション rotate 90 # 90世代(= 90日分)保持 compress # gzip で圧縮 delaycompress # 直前世代は圧縮しない(サービスが掴んでいる可能性) missingok # ログファイルが存在しなくてもエラーにしない notifempty # ファイルが空の場合はスキップ create 640 www-data adm # 新ファイルを 640 権限で作成 dateext # ファイル名に日付を付加(.log.2026-10-16 等) sharedscripts # 複数ファイルを対象にする場合、postrotate を1回だけ実行 }

具体的な防御設定の手順

1. create ディレクティブで権限を絞る

create はローテーション後に作成される新しいログファイルの権限・所有者を指定します。

多くのシステムでは初期設定が create 0644 root root のような緩い設定になっています。認証ログや監査ログには最低でも 640(グループ読み取り可)を設定し、特にセンシティブなものは 600(rootのみ)にすべきです。

# 認証ログの推奨設定 /var/log/auth.log { daily rotate 90 compress delaycompress missingok notifempty create 640 root adm # adm グループのみ読み取り可 sharedscripts postrotate systemctl kill -s HUP rsyslog endscript } # 現在のパーミッションを確認する ls -la /var/log/auth.log /var/log/secure 2>/dev/null

2. su ディレクティブでセキュアな操作を保証する

アプリケーションが root 以外のユーザーでログを書き込んでいる場合、su ディレクティブでローテーション操作のユーザーを明示します。これを省略すると、logrotateが root として操作することで所有者不一致のエラーが起きることがあります。

# nginx ログの例(nginx ユーザーとして書き込まれる) /var/log/nginx/access.log /var/log/nginx/error.log { daily rotate 90 compress delaycompress missingok notifempty create 640 nginx adm su nginx adm # logrotate 操作を nginx:adm で実行 sharedscripts postrotate nginx -s reopen endscript }

3. compress と delaycompress を組み合わせる

compress のみを設定すると、rsyslog や対象サービスがまだファイルをオープンしている状態で圧縮が走り、データが壊れるケースがあります。delaycompress は必ずセットで指定するのが基本です。

# 推奨: compress と delaycompress をセットで指定 compress delaycompress # 圧縮形式を xz に変更する例(より高圧縮・CPU負荷増) compresscmd /usr/bin/xz compressext .xz uncompresscmd /usr/bin/unxz

4. rotate で保存期間を確保する

一般的なセキュリティ基準では90日以上のログ保存が推奨されます。ディスクコストを考慮して圧縮と組み合わせ、最低でも30日以上の保存を確保しましょう。

# daily ローテーション + 90日保存 daily rotate 90 # weekly ローテーション + 52週(1年)保存 weekly rotate 52 # maxage で日数を直接指定(rotate より優先度が低い) maxage 365

postrotatescriptでrsyslogやauditdと連携する

ローテーション後のファイルに引き続きサービスが書き込めるよう、postrotate スクリプトでシグナルを送ります。

# rsyslog との連携(システムログ全般) /var/log/syslog /var/log/messages { daily rotate 90 compress delaycompress missingok notifempty create 640 root adm sharedscripts postrotate # rsyslog に SIGHUP を送って新ファイルを開かせる systemctl kill -s HUP rsyslog.service endscript } # auditd との連携(監査ログ) /var/log/audit/audit.log { daily rotate 90 compress delaycompress missingok notifempty create 600 root root # root のみ読み書き sharedscripts postrotate # auditd にログ再オープンを指示 /sbin/service auditd rotate endscript }

rsyslogのリモートログ転送と組み合わせると、ローカルでのログ改ざんリスクを大幅に低減できます。詳細はLinuxのrsyslogリモートログ転送設定|集中ログ管理でサーバー侵害後の証跡消去を防ぐ実践ガイドをご参照ください。

改ざん防止策

1. chattr でアーカイブログを不変に設定する

攻撃者はシステムに侵入した後、ログを消去して痕跡を消す行動を取ります。chattr +i(不変フラグ)を設定したファイルはroot権限でも削除・上書きができなくなります。

# postrotate スクリプト内で圧縮済みアーカイブに不変フラグを設定する例 /var/log/webapp/*.log { daily rotate 90 compress delaycompress missingok notifempty create 640 www-data adm sharedscripts postrotate # 直近1日以内に作成された圧縮済みアーカイブに不変フラグを付与 find /var/log/webapp/ -name "*.gz" -mtime -1 -exec chattr +i {} \; endscript } # 不変フラグの確認 lsattr /var/log/webapp/

chattr の詳細な活用方法については、Linuxのchattr・lsattrで重要ファイルを保護する実践ガイドをご参照ください。

2. auditd でlogrotate設定ファイルの変更を監視する

logrotateの設定ファイル自体が改ざんされた場合も検知できるよう、auditdで監視ルールを追加します。

# /etc/audit/rules.d/logrotate.rules に追加 # logrotate 設定ファイルの変更を監視 -w /etc/logrotate.conf -p wa -k logrotate-config -w /etc/logrotate.d/ -p wa -k logrotate-config # ルールを即時有効化 augenrules --load # ルール確認 auditctl -l | grep logrotate

auditdの詳細な設定と解析については、auditdログから侵入痕跡を見抜く実践ガイドをご参照ください。

設定の確認・テスト方法

変更後は必ず事前テストを行い、設定ミスを本番適用前に検出しましょう。

# 設定ファイルの構文チェック(実際のローテーションは行わない) sudo logrotate -d /etc/logrotate.conf # 特定の設定ファイルのみチェック sudo logrotate -d /etc/logrotate.d/nginx # 詳細な実行ログ付きで確認(実際にローテーションは行わない) sudo logrotate -d -v /etc/logrotate.conf 2>&1 | head -50 # 最終ローテーション日時を確認 cat /var/lib/logrotate/status | head -20 # 手動で強制ローテーション(テスト目的・本番では慎重に) sudo logrotate -f /etc/logrotate.d/nginx

中小企業でも今日からできること

大規模な変更は不要です。まず現状を確認するところから始めましょう。

・Step 1 – 設定確認: sudo logrotate -d /etc/logrotate.conf 2>&1 | grep -E "rotate|error" でローテーション設定を一覧する
・Step 2 – 保存期間チェック: grep -r "rotate" /etc/logrotate.d/ で各サービスの保存世代数を確認し、30未満なら増やす
・Step 3 – 権限チェック: ls -la /var/log/auth.log /var/log/secure 2>/dev/null で認証ログの権限が644なら640に変更する
・Step 4 – delaycompress追加: compressが設定されているがdelaycompressがない場合、追加する
・Step 5 – 月次確認: /var/lib/logrotate/status を定期確認し、ローテーションが正常動作していることを確認する

よくある誤解と注意点

【注意1】copytruncate はログの欠落リスクがある

copytruncate はサービスを再起動せずにローテーションできる便利な設定ですが、「コピー」と「トランケート(切り詰め)」の間にわずかな時間差があり、その間に書き込まれたログが失われます。セキュリティ証跡が重要なログには使用を避け、postrotate でサービスに再オープンを指示する方法を選びましょう。

【注意2】rotate 3は危険なほど短い

一般的なつまずきとして、ディスク節約のために rotate 3(3世代のみ)と設定するケースがあります。daily + rotate 3では3日分しかログが残りません。不正アクセスの発見は数週間後になることも多く、3日分では調査できません。圧縮を活用しながら最低30世代以上を確保しましょう。

【注意3】systemdのjournaldとlogrotateの役割分担

systemdを採用するディストリビューションでは、journald が systemd 管理サービスのログを担います。logrotateは /var/log/ 配下のファイルベースのログを対象にするため、journaldのログ(journalctl で確認するもの)には直接適用されません。journaldの保存期間は /etc/systemd/journald.conf の MaxRetentionSec や SystemMaxUse で設定します。

Linuxのlogrotate設定入門|ログファイルの権限管理・改ざん防止・保存期間設定でセキュリティ証跡を守る実践ガイド - まとめ

本記事のまとめ

logrotateはシンプルに見えますが、設定の細部がセキュリティ証跡の質を大きく左右します。

設定項目 推奨値 セキュリティ上の意味
create 640 root adm 一般ユーザーによるログの読み取りを防ぐ
rotate(daily) 90以上 インシデント発生から遡れる期間を確保する
compress + delaycompress 両方有効 ディスク節約とデータ完全性を両立する
postrotate rsyslog/auditdへのシグナル ローテーション後もサービスが新ファイルに書き込める
chattr +i(アーカイブ) 圧縮後に設定 rootでも削除・改ざんできなくする
リモートログ転送 rsyslogと連携 サーバー侵害後のログ消去に備える

Linuxのログ管理の全体像については、Linuxログ監視入門|syslog・journald・auditdで証跡を残すもあわせてご参照ください。

PR

Linuxサーバーセキュリティ徹底入門(中島能和)

Linuxサーバーのセキュリティ設定を体系的に学べる一冊。ファイル権限管理からログ監視・ファイアウォール・SELinuxまで、本記事で扱うlogrotateの周辺知識を深めたい方に最適です。

関連記事をもっと読む

同じテーマの記事をまとめています。あわせて読みたい記事はこちらからご覧いただけます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次