「設定 - SELinux」の版間の差分

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動
131行目: 131行目:


__FORCETOC__
__FORCETOC__
[[カテゴリ:CentOS]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]][[カテゴリ:PinePhone]]
[[カテゴリ:RHEL]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]][[カテゴリ:PinePhone]]

2023年4月13日 (木) 20:34時点における版

概要

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では、ドメインやタイプ等のことを、セキュリティコンテキストという形で表現する。

セキュリティコンテキストの例を、以下に示す。

  • system_u
    ユーザ識別子
  • object_r
    ロール識別子
  • lib_t
    タイプ(ドメイン)識別子
  • s0
    MLS (Multi Level Security) : 情報の機密性


SELinuxユーザ

Linuxユーザとは異なり、Linuxユーザごとに対応するSELinuxユーザが設定されている。

SELinuxユーザの例を、以下に示す。

  • unconfined_u
    アクセス制限のないユーザ (RHELでは全てのLinuxユーザがunconfined_uになる)


ロール

ロールの例を、以下に示す。

  • object_r
    一般的なファイルのロールのこと。
    ロールは、ファイルにとって意味は無い。
  • system_r
    プロセスのロールのこと。
    /procディレクトリ下のプロセス関連のファイル等にも使用される。


ドメイン

ドメインは、"制限のないドメイン"と"制限のあるドメイン"に大別できる。

プロセスに割り当てられるドメインの例を、以下に示す。

  • 制限のないドメイン
    SELinuxによるアクセス制限を受けない。
    つまり、システムが乗っ取られた場合、SELinuxによる防御は意味をなさない。
    通常のパーミッションによるアクセス制御は行われる。
    • unconfined_t
      ログインユーザが起動するプロセスのドメイン。
    • initrc_t
      initで開始されたシステムプロセスのドメイン。
    • kernel_t
      カーネルプロセスのドメイン。

  • 制限のあるドメイン
    一般的なソフトウェアに割り当てられる。
    これらのドメインは、SELinuxによるアクセス制御がなされる。
    • http_t
      httpd関連プロセスのドメインのことである。


タイプ

ファイルに割り当てられるタイプの例を、以下に示す。

  • file_t
    タイプが割り当てられていないことを示すタイプのこと。
    制限されたドメインからはアクセス不可である。
  • default_t
    割り当てるべきタイプが設定されていない場合に、デフォルトで割り当てられるタイプのこと。
    制限されたドメインからはアクセス不可である。


ポリシーの設定

SELinuxを有効にしている場合、サービスが起動しない問題は、SELinuxポリシーによる制限が原因となる場合がある。
SELinuxはセキュリティ上の観点から、プログラムが実行できるアクションを制限することがある。

ポリシーファイルを作成するため、必要なライブラリをインストールする。

sudo dnf install checkpolicy policycoreutils-python


SELinuxのログを確認する。
SELinuxがサービスをブロックしている場合、SELinuxのログにその旨のエラーメッセージが表示される。

まず、SELinuxログを確認する。

sudo tail -f /var/log/audit/audit.log


ポリシーモジュール(TEファイル : Type Enforcementファイル)とPPファイルを作成する。
TEファイルとは、特定のドメインに対する全てのタイプとルールを定義するものである。

sudo grep <サービス名> /var/log/audit/audit.log | audit2allow -M <任意のポリシーファイル名>


必要であれば、TEファイルをコンパイルして、ポリシーモジュールファイル(.mod拡張子)を生成する。

checkmodule -M -m -o <任意のポリシーモジュール名>.mod <任意のポリシーモジュール名>.te


または、TEファイルからポリシーパッケージファイル(.pp拡張子)を生成することもできる。

make -f /usr/share/selinux/devel/Makefile


もし、上記でTEファイルからポリシーモジュールファイル(.mod拡張子)を生成した場合、ポリシーパッケージ(.pp拡張子)を生成する。

semodule_package -o <任意のポリシーパッケージ名>.pp -m <任意のポリシーモジュール名>.mod


作成したポリシーモジュールをSELinuxにロードして、ポリシーを有効にする。

sudo semodule -i <任意のポリシーパッケージ名>.pp



ポリシーモジュールの有効化 / 無効化 / 削除

追加したポリシーは、有効化 / 無効化 / 削除することができる。

# ポリシーの有効化
sudo semodule -e <任意のポリシー名>

# ポリシーの無効化
sudo semodule -d <任意のポリシー名>

# ポリシーの削除
sudo semodule -r <任意のポリシー名>