設定 - SELinux
概要
SELinuxは、Linuxのセキュリティ拡張機能である。 (Linux 2.6以降でサポート)
Linuxに強制アクセス制御の仕組みを提供する。
外部に侵入されないための仕組みではなく、侵入された後にアクセスできる範囲を最小限に抑えるための仕組みである。
SELinuxの機能
TE(Type Enforcement)
プロセスがアクセスできるリソースを制限する機能である。
プロセスにドメインを、リソースにタイプを割り当て、その組み合わせごとにアクセス権を設定する。
このアクセス権の設定の集合を、アクセスベクタという。
子プロセス生成時には、基本的には親プロセスのドメインが引き継がれる。
子プロセスのドメインを変更することを、ドメイン遷移と呼ぶ。
RBAC(Role Based Access Controle)
ユーザがアクセスできるリソースを制限する機能である。
ユーザごとにアクセス可能なロールが決まっており、ロールごとにアクセス可能なドメインが決まっている。
TEにより、ドメインごとにアクセス可能なタイプが決まっているため、最終的には、ユーザがアクセス可能なオブジェクトを制御することができる。
RHELでは、全てのLinuxユーザがunconfined_uに対応しており、unconfined_uにはアクセス制限が掛けられない。
したがって、RHELではRBACは意味をなさない。
ポリシーの設定
SELinuxを有効にしている場合、サービスが起動しない問題は、SELinuxポリシーによる制限が原因となる場合がある。
SELinuxはセキュリティ上の観点から、プログラムが実行できるアクションを制限することがある。
ポリシーファイルを作成するため、必要なライブラリをインストールする。
sudo dnf install checkpolicy policycoreutils-python
SELinuxのログを確認する。
SELinuxがサービスをブロックしている場合、SELinuxのログにその旨のエラーメッセージが表示される。
まず、SELinuxログを確認する。
sudo tail -f /var/log/audit/audit.log
ポリシーモジュール(TEファイル : Type Enforcementファイル)を作成する。
TEファイルとは、特定のドメインに対するすべてのタイプとルールを定義するものである。
sudo grep <サービス名> /var/log/audit/audit.log | audit2allow -M <任意のポリシーファイル名>
ポリシーモジュールをコンパイルする。
checkmodule -M -m -o <任意のポリシーモジュール名>.mod <任意のポリシーモジュール名>.te
ポリシーパッケージを作成する。
semodule_package -o <任意のポリシーモジュール名>.pp -m <任意のポリシーモジュール名>.mod
作成したポリシーモジュールをSELinuxにロードして、ポリシーを有効にする。
sudo semodule -i <任意のポリシーモジュール名>
ポリシーモジュールの有効化 / 無効化 / 削除
追加したポリシーは、有効化 / 無効化 / 削除することができる。
# ポリシーの有効化 sudo semodule -e <任意のポリシー名> # ポリシーの無効化 sudo semodule -d <任意のポリシー名> # ポリシーの削除 sudo semodule -r <任意のポリシー名>