SELinuxの導入: ステータス確認、有効化、基本コマンド
1. SELinuxとは何か?それがなぜ重要なのか?
SELinux (Security-Enhanced Linux) っていうのはセキュリティモジュールで、伝統的なアクセス権管理モデルを強化するために強制アクセス制御の概念を追加したんだよ。これで、ユーザーやプロセスに厳しい制限を加えることができて、潜在的な攻撃の被害を最小限に抑えるようにできるんだ。
そのユニークな特徴って?
システムを家に例えてみて。従来のアクセス権(ユーザー、グループ、その他のrwX権限)は、鍵付きドアみたいなものだよ。だけど、誰かがドアをこじ開けたらどうする?SELinuxは「行動ルール」を駆使して防御の第2ラインを提供するみたいなもので、「おいおい、内部に入れてもバスルームには入らせないぞ!」みたいなことをするんだ。
SELinuxの主な役割:
- プロセスとファイルへの不正アクセス保護。
- プロセスがハッキングされても、攻撃の影響を軽減。
- "デフォルト保護" の原則(許可されていないものは全て禁止)。
SELinuxの動作モード
SELinuxには3つのモードがあるよ:
- Enforcing — 有効で、セキュリティポリシーを適用して違反プロセスをブロックする。
- Permissive — 違反内容をログに記録するだけで、動作をブロックしない。
- Disabled — 完全に無効化。
EnforcingモードのSELinuxは、システムの厳しいお兄さんみたいだね。Permissiveは、文句だけ言うけど何もしない弟みたいな感じ。
2. SELinuxのステータス確認
まず、SELinuxが有効かどうか、そしてどのモードで動作しているか確認しよう。そのためにいくつか便利なコマンドがあるよ。
コマンド getenforce
このコマンドを使えば、現在使用されているモードがわかる: Enforcing, Permissive, または Disabled。
$ getenforce
Enforcing
もし出力が Disabled なら、SELinuxは無効になっているってこと。この場合、有効にするために少し作業が必要だけど、それは後で説明するね。
コマンド sestatus
SELinuxのステータスに関するより詳細な情報を得るには、このコマンドを使おう。現在の状態、アクティブなモード、使用されているポリシーが表示されるよ。
$ sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
ここで確認できるのは:
- enabled/disabled — SELinuxが有効かどうか。
- current mode — アクティブなモード (enforcing, permissive)。
- loaded policy name — 使用中のポリシー。例えば "targeted" はSELinuxが主要なプロセスだけをコントロールしていることを示す。
3. SELinuxのモード切り替え
SELinuxの現在のモードを変更するには、setenforce
コマンドを使用するよ。
permissiveモードへの切り替え
もしSELinuxを一時的に「緩めたい」と思ったら、permissiveモードを有効にできるよ。
$ sudo setenforce 0
これで、SELinuxは違反を記録するだけで、ブロックはしないよ。新しい設定を確認するには、getenforce
コマンドを使ってね:
$ getenforce
Permissive
enforcingモードへの切り替え
再び厳格な制御を有効にしたい場合は、次のコマンドを実行するよ:
$ sudo setenforce 1
もちろん、結果を確認するのも忘れずに:
$ getenforce
Enforcing
この変更は即座に反映されるけれど、次回の再起動までしか有効じゃないから注意してね。
4. SELinuxの有効化
SELinuxが無効化されている場合、設定ファイルに変更を加える必要があるよ。SELinuxは/etc/selinux/config
ファイルを通じて管理されているんだ。
現在の設定ファイルの確認
設定がどうなっているか見てみよう。任意のテキストエディタを使ってね、例えばnano
:
$ sudo nano /etc/selinux/config
以下のような内容が表示されるはずだよ:
# This file controls the state of SELinux on the system.
SELINUX=disabled
SELINUXTYPE=targeted
SELinuxを有効な状態に切り替える
SELinuxを有効化するためには、SELINUX=disabled
という行をSELINUX=enforcing
またはSELINUX=permissive
に変更すればOK。
変更後のファイルの例は以下の通り:
# This file controls the state of SELinux on the system.
SELINUX=enforcing
SELINUXTYPE=targeted
編集を保存したら、システムを再起動しよう:
$ sudo reboot
再起動後、sestatus
コマンドを使って、SELinuxが有効になっていることを確認できるよ。
5. SELinuxコンテキストの分析
コンテキストって何?
コンテキストは、SELinuxがアクセス制御を管理するために使用するラベルだよ。ファイル、プロセス、ユーザーごとに特定のコンテキストが設定されてるんだ。
ファイルのコンテキストを確認するには、ls -Z
コマンドを使ってみて。例えばこんな感じ:
$ ls -Z /var/www/html
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html
これってどういう意味?
- unconfinedu — SELinuxユーザー。
- objectr — オブジェクトのタイプ。
- httpdsyscontent_t — アクセスタイプ(この場合ウェブサーバーに関連)。
- s0 — セキュリティレベル。
コンテキストの変更
もしSELinuxがアプリケーションの動作を妨げているなら、ファイルのコンテキストを変更する必要があるかも。chcon
コマンドを使ってみて:
$ sudo chcon -t httpd_sys_content_t /var/www/html/index.html
このコマンドはファイルのコンテキストタイプを一時的に変更するよ。でも、再起動後に変更が消える可能性があるから、永久的な設定にはSELinuxポリシーを変更するのがベター(これについては後で説明するね)。
6. SELinuxの使い方の例
例を見てみよう。サーバー管理者として、ウェブサーバーを展開したいけど、SELinuxが/var/www/html
ディレクトリ内のファイルへのアクセスをブロックしている状況です。
手順:
SELinuxのステータスを確認する:
$ sestatus
SELinuxが有効で、enforcingモードで動作していることを確認します。
ファイルのコンテキストを確認する:
$ ls -Z /var/www/html
コンテキストが正しくない場合、変更する:
$ sudo chcon -t httpd_sys_content_t /var/www/html/*
ウェブサーバーが動作しているか確認する。
7. よくある間違いと問題
SELinuxが無効になっていることに気づいていない。 常に
sestatus
コマンドでステータスを確認。多くの管理者は、システムをインストールした後にSELinuxを有効化するのを忘れがち。「なぜ私のサービスが動かないの?」 SELinuxがアクセスをブロックしている。
audit.log
を使って分析するべき:$ sudo cat /var/log/audit/audit.log | grep denied
コンテキストの変更が保存されない。
chcon
ではなく、semanage
のような永続的な変更を行うコマンドを使用すること。
SELinuxを学ぶのはマラソンの準備に似ている:最初は難しいかもしれないけど、時間が経つにつれて、このツールがシステムのセキュリティを大幅に向上させる方法を理解できる。これらの知識を使って、最も高度なハッカーにも負けない管理者を目指そう。
GO TO FULL VERSION