Rocky Linux / SELinuxを無効にする方法
Rocky LinuxでSELinux(Security-Enhanced Linux)を完全に無効にするよりも、まず問題を確認し、必要なポリシーを修正することが安全です。診断が必要な場合は、一時的にpermissiveモードを使用し、恒久的な無効化は互換性のないソフトウェアのため、他に手段がない場合のみ検討してください。
現在のSELinux状態の確認
getenforceは現在の動作モードを一行で表示し、sestatusは設定ファイルのモードやポリシーなど詳細情報を表示します。
getenforce
sestatus
| モード | 意味 |
|---|---|
Enforcing |
ポリシー違反を記録し、実際にブロックします。運用サーバーで推奨される状態です。 |
Permissive |
ポリシー違反を記録するがブロックしません。原因分析やポリシーのテストに適しています。 |
Disabled |
SELinuxが動作せず、ファイルセキュリティコンテキストの管理も停止します。 |
一時的にPermissiveモードを使用
現在の起動中だけ変更
次のsetenforce 0は、SELinuxが有効なシステムのモードをPermissiveへ変えます。現在の起動中の変更であり、Disabled状態から有効にする命令ではありません。システム全体のSELinuxによる拒否を止めるので、検証範囲と時間を限定し、確認後は次節のsetenforce 1で戻します。通常のファイル権限など他のアクセス制御は別に残ります。
sudo setenforce 0
getenforce
Enforcingモードに戻す
sudo setenforce 1
getenforce
Permissiveで問題が消えたという事実は、SELinuxに関連する可能性があることを示すだけで、SELinuxを無効にすべきという結論ではありません。監査ログを確認して、必要なファイルコンテキスト、ブール値、またはポートタイプを修正する必要があります。
ブロック原因の確認
最近のAVC拒否記録の確認
SELinuxのアクセス拒否は監査ログにAVC(Access Vector Cache)メッセージとして残ります。最近の記録は次のように確認できます。
sudo ausearch -m AVC,USER_AVC -ts recent
ausearchがない場合はauditパッケージとサービスの状態を確認します。ログのプロセス、対象パス、要求権限を見て、実際のサービス動作と一致するか判断してください。
ファイルのセキュリティコンテキストを復元
ファイルのラベルが用途と違う場合は、意図する配置を確認して永続的なfcontext規則を登録します。例は/srv/wwwを読み取り用のWebコンテンツにする場合です。既存規則を調べ、同一の規則があるなら追加を繰り返さず適切に修正します。適用前にsudo restorecon -nRv /srv/wwwで変更予定を確認してください。
sudo semanage fcontext -a -t httpd_sys_content_t '/srv/www(/.*)?' &&
sudo restorecon -Rv /srv/www
semanage コマンドは通常 policycoreutils-python-utils パッケージで提供されます。書き込み権限が必要なディレクトリは目的に応じた別のタイプを選択する必要があり、例示されたタイプを無条件に適用してはいけません。
ブール値と非標準ポートの調整
サービス機能をブール値で許可する
ブール値はポリシーが用意した動作の切り替えです。以下のhttpd_can_network_connectは対象ドメインの外向き通信を広く許可するため、一つのアプリだけへの限定許可とは限りません。必要性と現在値を記録してから変更し、不要になったら元の値へ戻します。
getsebool -a | grep httpd
sudo setsebool -P httpd_can_network_connect on
サービスのポートタイプ登録
サービスがデフォルトでないポートを使用する場合、ファイアウォールの許可とは別に SELinux ポートポリシーが必要になることがあります。既存のマッピングをまず確認してから追加します。 関連する条件と手順は、ファイアウォールの管理方法を参照できます。
sudo semanage port -l | grep http_port_t
sudo semanage port -a -t http_port_t -p tcp 8088
すでに登録されているポートのタイプを変更する場合、-a ではなく -m が必要になることがあります。他のサービスが使用しているポートかどうかをまず確認してください。
ブート後もPermissiveモードを維持する
再起動後もPermissiveを使って調査する場合は、既存の起動オプションにselinux=0などがないか確認し、/etc/selinux/configをバックアップして変更します。下の例はバックアップ先が既にあれば停止します。過去のバックアップを上書きせず、保存先を変えてから行ってください。
test ! -e /etc/selinux/config.backup &&
sudo cp -a /etc/selinux/config /etc/selinux/config.backup &&
sudo sed -i 's/^SELINUX=.*/SELINUX=permissive/' /etc/selinux/config
grep '^SELINUX=' /etc/selinux/config
設定ファイルの値は通常次回の起動時に適用されますが、カーネル引数の影響も受けます。現在のモードはsetenforce 0で別途変えるか、予定した再起動後に確認します。問題解決後は設定をSELINUX=enforcingへ戻し、現在と次回起動の両方を確認してください。
SELinuxを完全に無効化する必要がある場合
完全無効化が本当に必要な場合は、復旧用コンソールと現在の設定・起動オプションの記録を用意します。RHEL9・10系ではSELINUX=disabledという設定ファイルの変更だけを、完全無効化の汎用手順として使わないでください。rpm -q grubbyで道具を確認し、対応する通常のブート構成で次のようにカーネル引数へselinux=0を追加します。詳細はRHEL9の無効化手順を確認してください。
test ! -e /etc/selinux/config.before-disabled &&
sudo cp -a /etc/selinux/config /etc/selinux/config.before-disabled &&
sudo grubby --update-kernel ALL --args selinux=0
sudo grubby --info=ALLで予定の起動項目を確認し、作業を保存して停止時間を調整してからsudo rebootします。再起動後はgetenforceがDisabledか、cat /proc/cmdlineの引数も確認します。無効化中に作られたファイルはラベルを欠くため、復帰時には再ラベルが必要です。
再有効化は、selinux=0を起動オプションから取り除き、/etc/selinux/configをSELINUX=permissiveへ戻してから行います。grubbyを使う構成ではsudo grubby --update-kernel ALL --remove-args selinuxで今回追加した引数を除去し、再ラベル中の起動を保護するためsudo grubby --update-kernel ALL --args enforcing=0も実行します。まずPermissiveで起動して確認し、sudo fixfiles -F onbootで次回の再ラベルを準備して再起動します。ログとサービスを確認した後、enforcing=0も取り除いて設定をEnforcingへ戻し、sudo setenforce 1で現在の動作も戻します。getenforceで確認し、次回起動後もEnforcingになるか確かめます。ファイル数に応じて時間がかかるので、保守時間とコンソールを用意してください。詳細はRHEL10のモード変更と再ラベルを参照してください。
推奨される問題解決の順序
getenforceとsestatusで現在の状態を確認します。- サービス自体のログとファイル権限、ファイアウォールをまず点検します。
- 必要に応じて一時的にPermissiveモードに切り替えて症状を比較します。
ausearchで実際の拒否記録を確認します。- 正しいファイルコンテキスト、ブール値、またはポートタイプで最小範囲のみ修正します。
- Enforcingモードに戻し、機能とログを再度検証します。
参考文書
Rocky Linux SELinux学習ガイドはモード、セキュリティコンテキスト、ブール値、および問題解決の基本原則を説明します。




