SELinuxはサーバーのセキュリティを強化する重要な機能ですが、設定が複雑なため、開発環境や検証環境では一時的に無効化したい場面もあります。
また「今のモードが何か」「恒久的な設定と一時的な設定の違い」を把握していないと、再起動後に思わぬ状態に戻ってしまうことも。
この記事では、SELinuxの3つの動作モード(Enforcing・Permissive・Disabled)の違いと確認方法、getenforceとsestatusの使い分け、一時的・恒久的な切替手順を実サーバーの出力例つきで解説します。
CentOS7/RHEL 9/Rocky Linux 9 で動作確認済みです。
この記事のポイント
・getenforce でモードを確認、sestatus で詳細状態を確認する
・一時的な切替は setenforce(再起動で元に戻る)
・恒久的な無効化は /etc/selinux/config を SELINUX=disabled に変更して再起動
・本番サーバーでは Permissive で動作確認してから判断するのが鉄則
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
SELinuxの3つの動作モード
SELinuxには3つの動作モードがあります。それぞれの違いを正しく理解することが、適切な設定の前提です。| モード | 動作 | 主な用途 |
|---|---|---|
| Enforcing | ポリシーを強制適用。ポリシー違反のアクセスを拒否し、ログに記録する | 本番環境の通常運用 |
| Permissive | ポリシー違反を許可するが、ログには記録する(実際の制限はかけない) | トラブルシュート・動作確認 |
| Disabled | SELinuxを完全に無効化。ポリシーチェックもログ記録も行わない | 開発環境・検証環境での一時的な無効化 |
setenforceで変更した設定は再起動すると消えます。恒久的に変更したいなら設定ファイルの変更が必要です。
現在のSELinuxの状態を確認する
1. getenforceで動作モードを確認する
最もシンプルに現在のモードを確認するコマンドです。# getenforce Enforcing
・Enforcing:有効状態。SELinuxのポリシーが強制適用されている
・Permissive:ポリシー違反を許可するが、監査ログに記録する
・Disabled:完全に無効化された状態
2. sestatusで詳細な状態を確認する
より詳細な情報を確認するには sestatus コマンドを使います。# sestatus SELinux status: enabled SELinuxfs mount: /sys/fs/selinux SELinux root directory: /etc/selinux Loaded policy name: targeted Current mode: enforcing Mode from config file: enforcing Policy MLS status: enabled Policy deny_unknown status: allowed Max kernel policy version: 33
・Current mode:現在の動作モード(setenforceで変更した値が反映される)
・Mode from config file:/etc/selinux/configに記載されている設定値(再起動後に適用される)
この2つが異なる場合は、一時的に変更されている状態です。たとえば Current mode が permissive で、Mode from config file が enforcing なら、再起動後に Enforcing に戻ります。
getenforceとsestatusの使い分け
・getenforce:シンプルに現在のモードだけ知りたいとき(スクリプトでの条件分岐にも使いやすい)・sestatus:恒久設定との差異を確認したいとき、ポリシー名やバージョンも確認したいとき
SELinuxを一時的に切り替える(setenforce)
setenforce コマンドを使うと、再起動するまでの間だけSELinuxの動作モードを変更できます。設定ファイル(/etc/selinux/config)は変更されないため、再起動後は元の設定に戻ります。
1. EnforcingからPermissiveに変更する
SELinuxを「ログ記録のみ・制限なし」の状態にします。サービスが動かない原因がSELinuxかどうかを切り分けるときに使います。
# setenforce 0 # getenforce Permissive
2. PermissiveからEnforcingに戻す
# setenforce 1 # getenforce Enforcing
また、すでに Disabled 状態のサーバーで setenforce を実行すると「SELinux is disabled」エラーになります。
SELinuxを恒久的に無効化する(/etc/selinux/config)
再起動後も無効化を維持するには、設定ファイル /etc/selinux/config を編集します。1. /etc/selinux/configを編集する
# vi /etc/selinux/config
# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=enforcing # SELINUXTYPE= can take one of these three values: # targeted - Targeted processes are protected, # minimum - Modification of targeted policy. # mls - Multi Level Security protection. SELINUXTYPE=targeted
# 変更前 SELINUX=enforcing # 変更後 SELINUX=disabled
2. システムを再起動する
# shutdown -r now
3. 再起動後に状態を確認する
# getenforce Disabled # sestatus SELinux status: disabled
恒久的にPermissiveに設定する方法
本番サーバーで「完全無効化はしたくないが、常にPermissiveにしたい」という場合は、/etc/selinux/config で `SELINUX=permissive` に設定します。# /etc/selinux/config の設定 SELINUX=permissive # 再起動後に確認 # sestatus SELinux status: enabled Current mode: permissive Mode from config file: permissive
Permissiveモードで動作確認してから無効化する(推奨手順)
本番サーバーでSELinuxを無効化する前に、まずPermissiveモードで動作確認を行うことを強くお勧めします。Permissiveモードでは、SELinuxのポリシー違反をログに記録しながらもアクセスは許可します。これにより「どのポリシーが引っかかっているか」を調べてから対処できます。
1. Permissiveモードに変更してサービスを動かす
# setenforce 0 # systemctl start httpd
2. auditログでSELinuxの拒否を確認する
# grep "denied" /var/log/audit/audit.log | tail -20 type=AVC msg=audit(1711234567.890:1234): avc: denied { read } for pid=12345 comm="httpd" name="index.php" dev="sda1" ino=78901 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file permissive=1
「なぜ拒否しようとしたか」を人間が読める形で表示するには `audit2why` コマンドが便利です。
# grep "denied" /var/log/audit/audit.log | audit2why type=AVC msg=audit(1711234567.890:1234): avc: denied { read } for pid=12345 comm="httpd" Was caused by: Missing type enforcement (TE) allow rule. You can use audit2allow to generate a loadable module to allow this access.
3. audit2allowでポリシーを確認する(参考)
拒否されている操作に対して、どんなポリシーを追加すれば解決できるかを確認できます。# grep "denied" /var/log/audit/audit.log | audit2allow
トラブルシュート
「setenforce: SELinux is disabled」と表示される
すでに /etc/selinux/config で `SELINUX=disabled` が設定されており、カーネル起動時からSELinuxが無効化されています。setenforce コマンドは無効化済みの状態では使えません。設定変更後に再起動したら起動が遅くなった(autorelabel)
Disabledから Enforcing/Permissive に戻した場合、システムはファイルシステム全体へのSELinuxラベル付け(autorelabel)を行うため、起動に時間がかかることがあります。`/.autorelabel` ファイルが存在している場合は処理中です。大容量のファイルシステムでは数十分かかる場合があります。
# autorelabelが実行中かどうか確認する # ls -la /.autorelabel -rw-r--r-- 1 root root 0 Apr 1 10:00 /.autorelabel # ファイルが存在すれば処理中(再起動後に消える)
無効化後にApacheやNginxが起動しない
SELinuxが原因でなく、別の設定ミスや依存サービスの問題の可能性があります。journalctl -u httpd や systemctl status httpd でエラー内容を確認してください。selinux/configの編集ミスで起動しない
/etc/selinux/config のSELINUX値に誤字がある場合、起動時にエラーが出ることがあります。救済策として、起動時のGRUBメニューでkernel起動パラメータに `enforcing=0` を追加することで、Permissiveモードで起動できます。本記事のまとめ
| やりたいこと | コマンド・手順 |
|---|---|
| 現在のモードを確認する | getenforce |
| 詳細な状態を確認する(設定ファイルとの差異も) | sestatus |
| 一時的にPermissiveにする(再起動で戻る) | setenforce 0 |
| 一時的にEnforcingに戻す(再起動で戻る) | setenforce 1 |
| 恒久的に無効化する | /etc/selinux/config で SELINUX=disabled に変更し再起動 |
| 恒久的にPermissiveにする | /etc/selinux/config で SELINUX=permissive に変更し再起動 |
| SELinuxの拒否ログを確認する | grep "denied" /var/log/audit/audit.log |
| 拒否理由を分かりやすく表示する | grep "denied" /var/log/audit/audit.log | audit2why |
AlmaLinux 10での初期設定もあわせて確認
SELinuxの基本仕様(Enforcing/Permissive/Disabledの3モード、getenforce/sestatus、/etc/selinux/config)はAlmaLinux 10でも同じ流れで踏襲されています。ただしAlmaLinux 10ではカーネル6.12・DNF 5・FIPS 140-3対応など周辺環境が変わっており、サーバー初期構築時にはSELinuxだけでなくfirewalld・SSH鍵認証・dnf更新を同じ順序で押さえておくのが安全です。
AlmaLinux 10のサーバー初期設定を10項目に整理した手順は、「AlmaLinux 10 サーバー初期設定10項目|SELinux・firewalld・dnf・SSH鍵認証」でまとめています。CentOS 7からAlmaLinux系に移行する方は、本記事のSELinux設定とあわせて参照してください。
SELinuxの設定で詰まったことはありませんか?
SELinuxに限らず、Linuxサーバー構築では「設定した通りに動かない」「エラーの意味がわからない」といった壁に何度もぶつかります。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:RedHatアカウント作成とRHELのダウンロード
- 前のページへ:yumにリポジトリを追加・変更する方法|EPELの設定とyum.repos.dの書き方
- この記事の属するカテゴリ:Linuxサーバー構築へ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます