This page is a beginner-friendly guide to view and monitor CSP Report-Only logs (csp-received.log) safely: tail, follow mode, less, grep filtering, and quick troubleshooting for permissions and SELinux.
CSP を Report-Only で運用開始できたら、次にやることはとてもシンプルです。「ログを見る」です。
ここで言うログとは、CSP違反レポートを受け取って保存しているファイル(例:csp-received.log)です。Report-Only はブロックしない代わりに、ブラウザから「どんな違反が起きたか」が送られてきます。つまりログを見れば、将来 “強制CSP” に移行するための材料が手に入ります。
このページでは、「とにかく中身を閲覧する」ことにだけ集中します。解析やダッシュボード化は後回しです。個人情報になりやすいドメイン名やパスは example.com などに置き換えて説明します。
csp-received.log の安全な閲覧方法が分かる(巨大ログでも固まりにくい)最初は、この3つを “使い分け” できれば十分です。
sudo tail -n 50 /var/www/example.com/logs/csp-received.log
「今ちゃんとレポートが記録されているか」を最短で確認できます。
sudo tail -f /var/www/example.com/logs/csp-received.log
ブラウザでページ操作しながら、ログが増えるかをその場で見られます。終了は Ctrl + C。
sudo less /var/www/example.com/logs/csp-received.log
less は「スクロール」「検索」「行き来」ができるので、ログ閲覧に向いています。
「見方」を説明する前に、まずはログファイルがどこにあるかと、読める状態かを確認します。
よくある配置例です。あなたの環境ではパスが違うかもしれないので、設計書のパスに読み替えてください。
/var/www/example.com/
├ public/ (表示用)
├ csp/ (CSP受信口のPHPなど)
└ logs/
└ csp-received.log
sudo ls -la /var/www/example.com/logs/csp-received.log
sudo stat /var/www/example.com/logs/csp-received.log
stat の Modify(更新時刻)が最近になっていれば、少なくとも “ログが書かれている” 可能性が高いです。
ファイル権限が正しくても、SELinux が原因で「PHPが書けない」ことがあります。閲覧だけなら直接の原因にならないことも多いですが、ログが増えないときの切り分けで重要になります。
# logs ディレクトリの SELinux ラベルを見る
ls -ldZ /var/www/example.com/logs
tail は「末尾(最新行)」を見るコマンドです。ログは基本的に末尾に追記されるので、CSPログ閲覧と相性が良いです。
sudo tail -n 30 /var/www/example.com/logs/csp-received.log
sudo tail -n 100 /var/www/example.com/logs/csp-received.log
sudo tail -n 1 /var/www/example.com/logs/csp-received.log
「今、1件でもレポートが入った?」を見たい時に便利です。
tail -f は、ログファイルに追記された内容をそのまま流し続けて表示します。
sudo tail -f /var/www/example.com/logs/csp-received.log
tail -f を開始終了は Ctrl + C。
less は “ログ閲覧の定番” です。cat と違って、巨大ログでも比較的安全に扱えます。
sudo less /var/www/example.com/logs/csp-received.log
/ で検索例:blocked-uri を探す
/blocked-uri
sudo less +F /var/www/example.com/logs/csp-received.log
tail -f のように流れ続けます。Ctrl + C で止めると、スクロールや検索ができる状態になります。再開は F。
ログが増えてきたら、grep で “欲しい行だけ” 抜き出すのが楽です。
sudo grep -n "blocked-uri" /var/www/example.com/logs/csp-received.log | tail -n 50
-n を付けると行番号が出ます。あとで周辺を見たいときに便利です。
行番号が 1234 だった場合、前後をまとめて表示する例です。
sudo sed -n '1210,1260p' /var/www/example.com/logs/csp-received.log
ログの形式によっては行単位でフィルタできます(1行1レポート形式のときに向きます)。
sudo tail -f /var/www/example.com/logs/csp-received.log | grep --line-buffered "blocked-uri"
もしログが複数行にまたがる形式なら、この方法は向きません。その場合は less で検索するのがおすすめです。
cat /path/to/csp-received.log は、ファイルが小さいうちは動きます。しかし運用が進むとログは増えます。
巨大化したログを cat で表示すると、ターミナルが固まったり、操作不能になったりします。
tail -ntail -f / less +Flessgrepここは “つまずきポイント” なので、短いチェック手順を用意しておきます。
sudo ls -la /var/www/example.com/logs
sudo ls -la /var/www/example.com/logs/csp-received.log
sudo stat /var/www/example.com/logs/csp-received.log
環境によりパスは違いますが、典型例です。
# Nginx
sudo tail -n 50 /var/log/nginx/error.log
# PHP-FPM
sudo tail -n 50 /var/log/php-fpm/error.log
sudo grep -i denied /var/log/audit/audit.log | tail -n 30
avc: denied が並んでいる場合は、SELinux が “安全のために止めている” サインです。disableはせず、ログディレクトリだけに適切なラベルを付けるのが正攻法です。
sudo tail -n 50 /var/www/example.com/logs/csp-received.log
sudo tail -f /var/www/example.com/logs/csp-received.log
sudo less /var/www/example.com/logs/csp-received.log
A. まずは tail -n 50 です。ログが出ているかを最短で確認できます。
A. 次の順で切り分けるのが最短です:
avc: denied が出ていないかless と tail -f の違いは?A. tail -f は “流し続ける専用”。less は “読む・探す・行き来する”。大量になってきたら less が便利です。
cat で見たらダメですか?A. 小さいうちは動きますが、運用ログは増えます。巨大化すると固まりやすいので、基本は tail/less がおすすめです。