6 アクセス拒否メッセージのトラブルシューティング
アクセスに関するSELinuxのディシジョンは、アクセス・ベクトル・キャッシュ(AVC)に格納されます。 監査サービス(auditd)が実行されていない場合、SELinuxはAVC拒否メッセージを/var/log/messagesに記録します。 それ以外の場合、メッセージは/var/log/audit/audit.logファイルに記録されます。 setroubleshootdデーモンが実行中の場合、拒否メッセージの読取り可能なバージョンも/var/log/messagesに書き込まれます。
setroubleshootおよびsetroubleshoot-serverパッケージをインストールした場合は、auditdおよびsetroubleshootサービスが実行されています。 Xウィンドウ・システムを使用している場合は、sealert -bコマンドを使用してSELinuxアラート・ブラウザを実行することもできます。このブラウザには、SELinux AVC拒否に関する情報が表示されます。 アラートの詳細を表示するには、「表示」を選択します。 推奨される解決策を表示するには、「トラブルシューティング」を選択します。
ausearchツールを使用して、/var/log/audit/audit.logファイルを検索し、SELinux拒否を示すavc (アクセス・ベクトル・キャッシュ)メッセージをフィルタリングします:
sudo ausearch -m avcausearchの出力は次のようになります:
type=AVC msg=audit(1688509311.123:345): avc: denied { read } for
pid=1234 comm="nginx" name="index.html" dev="sda1" ino=56789
scontext=system_u:system_r:httpd_t:s0
tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file必要に応じて、時間、ユーザーまたは実行可能ファイルでさらにフィルタできます。 たとえば、次のコマンドは、過去10分間のイベントを検索します:
sudo ausearch -m avc -ts recent次の例では、特定のプロセスに関連するイベントを検索します:
sudo ausearch -m avc -exe /usr/sbin/httpdアクセス拒否の問題の主要な原因は、次のとおりです。
-
アプリケーションまたはファイルのコンテキスト・ラベルが不適切です。
解決するには、ディレクトリ階層のデフォルトのファイル・タイプを変更します。 たとえば、デフォルトのファイル・タイプを
/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をオンにして、httpdがユーザーのホーム・ディレクトリにアクセスできるようにします:sudo setsebool -P httpd_enable_homedirs on -
サービスが、セキュリティ・ポリシーでアクセスが禁止されているポートにアクセスしています。
サービスによるそのポートの使用が有効な場合は、semanageを使用してポリシー構成にそのポートを追加します。 たとえば、Apache HTTPサーバーがポート8000でリスニングするように設定するには次のようにします。
sudo semanage port -a -t http_port_t -p tcp 8000 -
パッケージの更新によって、アプリケーションが既存のセキュリティ・ポリシーに違反するように動作しています。
audit2allowは、管理者が拒否されたアクションの監査ログ・エントリに基づいてカスタムのSELinuxポリシー・ルールを作成できるようにするために、SELinux環境で使用されるコマンドライン・ツールです。次のコマンドを使用して、アクセス拒否が発生した理由を表示できます:
SELinuxの拒否が表示されたら、すぐにsudo audit2allow -w -aaudit2allowを使用してローカル・ポリシー・モジュールを作成しないでください。 まず、ファイルのラベル付けの問題を確認します。 次に、SELinuxに対して更新されていないプロセス構成が変更されていないことを確認します。 ポリシーの変更を検討する前に、これらのチェックでトラブルシューティングを開始します。ファイル・ラベル付けまたはプロセス構成の問題が原因で拒否が適切でない場合は、
audit2allowツールを使用して、拒否されたアクションを有効にするSELinuxポリシー・ルールを生成できます。 次のコマンドを実行して、必要な.te(タイプ強制)および.pp(ポリシー・パッケージ)ファイルを作成します:sudo audit2allow -a -M moduleその後、次のコマンドを実行して、生成されたポリシー・パッケージ・ファイルを使用して、エラーの再発を停止できます:
sudo semodule -i module.pp注意:
このプロシージャは通常、更新されたポリシーが使用可能になるまでパッケージ更新を機能させることを目的としています。 正しく使用されない場合は、システムに潜在的なセキュリティ・ホールを作成できます。