6 アクセス拒否メッセージのトラブルシューティング
この章では、アクセス拒否メッセージをトラブルシューティングする方法について説明します。
アクセスの許可および拒否に関するSELinuxの決定は、アクセス・ベクター・キャッシュ(AVC)に格納されます。監査サービス(auditd
)が実行されていない場合、SELinuxはAVC拒否メッセージを/var/log/messages
に記録します。それ以外の場合、メッセージは/var/log/audit/audit.log
ファイルに記録されます。setroubleshootd
デーモンが実行されている場合は、読みやすいバージョンの拒否メッセージも/var/log/messages
に書き込まれます。
setroubleshoot
およびsetroubleshoot-server
パッケージをインストールした場合は、auditd
およびsetroubleshoot
サービスが実行されています。X Windowシステムを使用している場合は、sealert -bコマンドを使用して、SELinux AVCの拒否に関する情報を表示するSELinuxアラート・ブラウザを実行することもできます。アラートの詳細を表示するには、表示をクリックします。推奨される解決を表示するには、トラブルシュートをクリックします。
次の例は、/var/log/audit/audit.log
ファイルで文字列denied
を含むメッセージを検索する方法を示しています。
grep denied /var/log/audit/audit.log
type=AVC msg=audit(1364486257.632:26178): avc: denied { read } for
pid=5177 comm="httpd" name="index.html" dev=dm-0 ino=396075
scontext=unconfined_u:system_r:httpd_t:s0
tcontext=unconfined_u:object_r:acct_data_t:s0 tclass=file
アクセス拒否の問題の主要な原因は、次のとおりです。
-
アプリケーションまたはファイルのコンテキスト・ラベルが不適切です。
解決するには、ディレクトリ階層のデフォルトのファイル・タイプを変更します。たとえば、デフォルトのファイル・タイプを
/var/webcontent
からhttpd_sys_content_t
に変更します。sudo /usr/sbin/semanage fcontext -a -t httpd_sys_content_t "/var/webcontent(/.*)?" sudo /sbin/restorecon -R -v /var/webcontent
-
サービスのセキュリティ・ポリシーを構成するブールが誤って設定されています。
解決するには、ブールの値を変更します。たとえば、
httpd_enable_homedirs
をオンにすると、ユーザーのホーム・ディレクトリを参照できます。sudo setsebool -P httpd_enable_homedirs on
-
サービスが、セキュリティ・ポリシーでアクセスが禁止されているポートにアクセスしています。
サービスによるそのポートの使用が有効な場合は、semanageを使用してポリシー構成にそのポートを追加します。たとえば、Apache HTTPサーバーがポート8000でリスニングするように設定するには次のようにします。
sudo semanage port -a -t http_port_t -p tcp 8000
-
パッケージの更新によって、アプリケーションが既存のセキュリティ・ポリシーに違反するように動作しています。
audit2allow -w -aコマンドを使用すると、アクセス拒否が発生した事由を表示できます。
audit2allow -a -M moduleコマンドを実行すると、型強制(
.te
)ファイルおよびポリシー・パッケージ(.pp
)ファイルが作成されます。semodule -i module.ppコマンドでポリシー・パッケージ・ファイルを使用すると、エラーの再発生を停止できます。このプロシージャは通常、更新されたポリシーが使用可能になるまでパッケージ更新を機能させることを目的としています。これを不正に使用すると、システムに潜在的なセキュリティ・ホールが作成される可能性があります。