Linuxサーバーのセキュリティを強化するために用いられる仕組みの一つに「SELinux(Security-Enhanced Linux)」があります。
しかし、SELinuxが有効になっているかどうかは、意外と意識されないことも多いのではないでしょうか?
システムの不具合の原因がSELinuxの設定だったというケースもよくあるため、まず状態を確認することは非常に重要です。
この記事では、SELinuxの現在の動作モードを簡単に確認できる「getenforce」コマンドについて、初心者にもわかりやすく解説します。
SELinuxとは何か?
SELinuxは、Linuxカーネルに組み込まれているセキュリティモジュールで、アクセス制御の仕組みを強化する目的で開発されました。
NSA(アメリカ国家安全保障局)により開発されたこの機能は、従来のUNIXパーミッションやACLに加えて、より細かいセキュリティポリシーを定義できます。
SELinuxは以下のようなメリットがあります。
- プロセスやユーザーに対するアクセスをきめ細かく制限できる
- 万が一侵入されても被害を最小限にとどめられる
- 政府機関や金融など高セキュリティが求められる環境で活用されている
ただし、設定や運用に慣れていないと、逆に想定通りの動作を妨げる原因となることもあります。
そのため、まずは現在の状態(モード)を確認するのが大切です。
getenforceコマンドとは?
getenforce
コマンドは、SELinuxの現在のモードを確認するためのシンプルなコマンドです。
SELinuxがどのように動作しているかを一目で把握できます。
書式
getenforce
出力されるモードは3種類
このコマンドを実行すると、以下の3つのいずれかの文字列が出力されます。
- Enforcing:SELinuxポリシーが強制的に適用されている(違反はブロックされる)
- Permissive:SELinuxは有効だが違反を許可(ログに記録されるだけ)
- Disabled:SELinuxが無効になっている(制限は一切ない)
使用例
$ getenforce
Enforcing
このように表示されていれば、SELinuxが現在「Enforcingモード」で動作しているという意味になります。
SELinuxの状態を確認する他の方法
getenforceの他にも、SELinuxの状態を確認するコマンドが存在します。
1. sestatus コマンド
sestatus
このコマンドでは、SELinuxの詳細な情報が表示されます。
例:
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
Current mode:
に注目すると、現在のモードが確認できます。
getenforceよりも詳細情報を確認したい場合はこちらを使用すると便利です。
2. /etc/selinux/configファイルを確認
永続的な設定を確認したい場合には、以下のファイルの中身を見てみましょう。
cat /etc/selinux/config
設定例:
SELINUX=enforcing
SELINUXTYPE=targeted
この値は、OS再起動後に適用される設定で、getenforceの出力とは異なることがあります。
SELinuxモードの一時的な変更
getenforceで状態を確認した後、「一時的にPermissiveに変更したい」と思う場面があるかもしれません。
このような場合には setenforce
コマンドを使います。
# setenforce 0 ← Permissiveモードに変更
# setenforce 1 ← Enforcingモードに変更
getenforceと組み合わせて以下のように使うことができます。
$ getenforce
Enforcing
$ sudo setenforce 0
$ getenforce
Permissive
この変更は一時的なもので、OS再起動後には元に戻ります。
恒久的に設定を変えたい場合は /etc/selinux/config
ファイルを編集する必要があります。
SELinuxが原因で起こるトラブルとgetenforceの活用例
トラブル例1:Apacheで403 Forbiddenが出る
Apacheの設定が正しいのに、なぜかページが表示されないときは、SELinuxの制限が原因の場合があります。
getenforceで「Enforcing」になっていれば、一時的に Permissive
にして原因を切り分けるのが有効です。
トラブル例2:ファイルのアクセス制御がうまくいかない
システムが意図した通りにファイルを読み書きできない場合も、getenforceで確認して、SELinuxが妨げていないかチェックできます。
getenforceを利用するタイミングと運用のポイント
getenforceコマンドは、次のようなタイミングで活用できます。
- サーバー初期構築時:SELinuxが有効かどうか確認
- アプリケーション導入時:動作に支障がないか事前確認
- トラブル発生時:SELinuxの影響を切り分けるために確認
運用のポイント
- SELinuxを無効化するのではなく、まずはgetenforceで状態確認
- 必要に応じて
setenforce
で一時的にモード変更し、原因を特定 - 長期的にはポリシーを正しく調整する方向で対処するのが望ましい
まとめ
SELinuxはLinuxにおける強力なセキュリティ機能ですが、時としてその存在が障害の原因となることもあります。
そのため、まず現在の状態を把握することが非常に重要です。
getenforce
コマンドはその第一歩となる非常に簡単で有効なツールです。
システム管理やトラブルシュートを行う際には、必ず確認する習慣をつけておきましょう。
今後SELinuxをより深く扱うためにも、まずはgetenforceで「現在の状態を知る」ことから始めてみてください。