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コマンドでポリシー・パッケージ・ファイルを使用すると、エラーの再発生を停止できます。このプロシージャは通常、更新されたポリシーが使用可能になるまでパッケージ更新を機能させることを目的としています。これを不正に使用すると、システムに潜在的なセキュリティ・ホールが作成される可能性があります。