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

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


== ポリシーの設定 ==
== 各ソフトウェアのポリシー設定 ==
SELinuxを有効にしている場合、サービスが起動しない問題は、SELinuxポリシーによる制限が原因となる場合がある。<br>
SELinuxを有効にしている場合、サービスが起動しない問題は、SELinuxポリシーによる制限が原因となる場合がある。<br>
SELinuxはセキュリティ上の観点から、プログラムが実行できるアクションを制限することがある。<br>
SELinuxはセキュリティ上の観点から、プログラムが実行できるアクションを制限することがある。<br>
<br>
<br>
ポリシーファイルを作成するため、必要なライブラリをインストールする。<br>
まず、ポリシーファイルを作成するために必要なライブラリをインストールする。<br>
# RHEL
  sudo dnf install checkpolicy policycoreutils-python
  sudo dnf install checkpolicy policycoreutils-python
# SUSE
sudo zypper install checkpolicy python3-policycoreutils
<br>
<br>
SELinuxのログを確認する。<br>
SELinuxのログを確認する。<br>
140行目: 144行目:
  sudo tail -f /var/log/audit/audit.log
  sudo tail -f /var/log/audit/audit.log
<br>
<br>
ポリシーモジュール(TEファイル : Type Enforcementファイル)とPPファイルを作成する。<br>
次に、ポリシーモジュール(TEファイル : Type Enforcement)とポリシーパッケージファイル (PPファイル : Policy Package) ファイルを作成する。<br>
TEファイルとは、特定のドメインに対する全てのタイプとルールを定義するものである。<br>
TEファイルとは、特定のドメインに対する全てのタイプとルールを定義するものである。<br>
  sudo grep <サービス名> /var/log/audit/audit.log | audit2allow -M <任意のポリシーファイル名>
  sudo grep <サービス名> /var/log/audit/audit.log | audit2allow -M <任意のポリシーファイル名>
147行目: 151行目:
  checkmodule -M -m -o <任意のポリシーモジュール名>.mod <任意のポリシーモジュール名>.te
  checkmodule -M -m -o <任意のポリシーモジュール名>.mod <任意のポリシーモジュール名>.te
<br>
<br>
または、TEファイルからポリシーパッケージファイル(.pp拡張子)を生成することもできる。<br>
または、TEファイルから直接ポリシーパッケージファイル(.pp拡張子)を生成することもできる。<br>
  make -f /usr/share/selinux/devel/Makefile
  make -f /usr/share/selinux/devel/Makefile
<br>
<br>

2024年8月14日 (水) 23:30時点における版

概要

SELinux (Security-Enhanced Linux) は、Linuxのセキュリティ拡張機能であり、強制アクセス制御 (MAC) の仕組みを提供する。 (Linux 2.6以降でサポート)
外部に侵入されないための仕組みではなく、侵入された後にアクセスできる範囲を最小限に抑えるための仕組みである。

SELinuxの特徴を以下に示す。

  • 強制アクセス制御 (MAC)
    従来の任意アクセス制御 (DAC) に加えて、より厳格なアクセス制御を実現する。

  • 最小権限の原則
    プロセスやユーザに必要最小限の権限のみを与えることで、潜在的な被害を制限する。

  • ポリシーベースの制御
    システム管理者が定義したセキュリティポリシーに基づいてアクセスを制御する。

  • コンテキストラベル
    ファイル、プロセス、ポート等のリソースにセキュリティコンテキストを割り当てる。

  • 動作モード
    Enforcing (強制)、Permissive (許容)、Disabled (無効) の3つのモードがある。

  • ログ機能
    セキュリティ違反の試みを詳細にログに記録する。


SELinuxの参考書
81aU0AOWozL._SL1360_.jpg
SELinux System Administration 3rd Edition
ソフトウェアやユーザ等を保護するための強制アクセス制御(MAC)の実装
8153xazSMPL._SL1500_.jpg
SELinux Cookbook



SELinuxの役割

SELinuxは、Linux上で動作するプロセスからファイル等のリソースに対するアクセスを制御するのが主な機能である。
通常のLinuxシステムでは、ユーザやグループのファイルに対するアクセス権で制御されますが、スーパーユーザは特権ユーザとして全てのファイル等にアクセスすることができる。

これに対して、SELinuxは"強制アクセス制御"(MAC: Mandatory Access Control)と呼ばれる方式を採用している。
MACは、スーパーユーザに対しても設定されたアクセス制御を超えた特権を与えることがない。

多くのセキュリティ攻撃がスーパーユーザ権限を奪取することを第一の目的とし、その後の攻撃に繋げていることを考えると、セキュリティ対策として必要な機能といえる。


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はセキュリティ上の観点から、プログラムが実行できるアクションを制限することがある。

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

# RHEL
sudo dnf install checkpolicy policycoreutils-python

# SUSE
sudo zypper install checkpolicy python3-policycoreutils


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

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

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


次に、ポリシーモジュール(TEファイル : Type Enforcement)とポリシーパッケージファイル (PPファイル : Policy Package) ファイルを作成する。
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 <任意のポリシー名>