「設定 - SELinux」の版間の差分
(ページの作成:「== 概要 == SELinuxは、Linuxのセキュリティ拡張機能である。 (Linux 2.6以降でサポート)<br> Linuxに強制アクセス制御の仕組みを提供する。<br> <br> 外部に侵入されないための仕組みではなく、侵入された後にアクセスできる範囲を最小限に抑えるための仕組みである。<br> <br><br> == SELinuxの機能 == ==== TE(Type Enforcement) ==== プロセスがアクセスできるリソース…」) |
|||
25行目: | 25行目: | ||
したがって、RHELではRBACは意味をなさない。<br> | したがって、RHELではRBACは意味をなさない。<br> | ||
<br><br> | <br><br> | ||
== SELinuxの機能 == | |||
==== セキュリティコンテキスト ==== | |||
SELinuxでは、ドメインやタイプ等のことを、セキュリティコンテキストという形で表現する。<br> | |||
<br> | |||
セキュリティコンテキストの例を、以下に示す。<br> | |||
* system_u | |||
*: ユーザ識別子 | |||
* object_r | |||
*: ロール識別子 | |||
* lib_t | |||
*: タイプ(ドメイン)識別子 | |||
* s0 | |||
*: MLS (Multi Level Security) : 情報の機密性 | |||
<br> | |||
==== SELinuxユーザ ==== | |||
Linuxユーザとは異なり、Linuxユーザごとに対応するSELinuxユーザが設定されている。<br> | |||
<br> | |||
SELinuxユーザの例を、以下に示す。<br> | |||
* unconfined_u | |||
*: アクセス制限のないユーザ (RHELでは全てのLinuxユーザがunconfined_uになる) | |||
<br> | |||
==== ロール ==== | |||
ロールの例を、以下に示す。<br> | |||
* object_r | |||
*: 一般的なファイルのロールのこと。 | |||
*: ロールは、ファイルにとって意味は無い。 | |||
* system_r | |||
*: プロセスのロールのこと。 | |||
*: /procディレクトリ下のプロセス関連のファイル等にも使用される。 | |||
<br> | |||
==== ドメイン ==== | |||
ドメインは、"制限のないドメイン"と"制限のあるドメイン"に大別できる。<br> | |||
<br> | |||
プロセスに割り当てられるドメインの例を、以下に示す。<br> | |||
* 制限のないドメイン | |||
*: SELinuxによるアクセス制限を受けない。 | |||
*: つまり、システムが乗っ取られた場合、SELinuxによる防御は意味をなさない。 | |||
*: 通常のパーミッションによるアクセス制御は行われる。 | |||
** unconfined_t | |||
**: ログインユーザが起動するプロセスのドメイン。 | |||
** initrc_t | |||
**: initで開始されたシステムプロセスのドメイン。 | |||
** kernel_t | |||
**: カーネルプロセスのドメイン。 | |||
*: <br> | |||
* 制限のあるドメイン | |||
*: 一般的なソフトウェアに割り当てられる。 | |||
*: これらのドメインは、SELinuxによるアクセス制御がなされる。 | |||
** http_t | |||
**: httpd関連プロセスのドメインのことである。 | |||
<br> | |||
==== タイプ ==== | |||
ファイルに割り当てられるタイプの例を、以下に示す。<br> | |||
<br> | |||
* file_t | |||
*: タイプが割り当てられていないことを示すタイプのこと。 | |||
*: 制限されたドメインからはアクセス不可である。 | |||
* default_t | |||
*: 割り当てるべきタイプが設定されていない場合に、デフォルトで割り当てられるタイプのこと。 | |||
*: 制限されたドメインからはアクセス不可である。 | |||
<br> | |||
== ポリシーの設定 == | == ポリシーの設定 == |
2023年3月30日 (木) 04:58時点における版
概要
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ファイル)を作成する。
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 <任意のポリシー名>