SELinux†
- ドメイン単位でプロセスとユーザーに権限を割り当てる
SELinux の仕組み†
- Flask
- Flux Advanced Security Kernel
- セキュリティアーキテクチャ
- 柔軟な強制アクセス制御が可能
- 処理の流れ
- プロセスがリソースにアクセスする為にカーネルにアクセスを要求する
- カーネルは、ファイルの許可属性をチェックする
- SELinuxが、セキュリティポリシーファイルを参照してアクセスの可否を判断する
- プロセスがリソースにアクセスする
SELinux の機能†
MAC†
- Type Enforcemtnt
- プロセスごとにリソースへのアクセス制御を行う(最小限の権限を付与する)
- プロセス(サブジェクト)← ドメインというラベルを付与する
- リソース(オブジェクト)←タイプというラベルを付与する
- 許可属性(アクセスベクタ)←ドメインとタイプの関係をセキュリティポリシーファイルに設定する
- ラベル名の命名ルール:末尾"_t"
RBAC†
- Role Based Access Control
- 役割別のアクセス制御
- ログインユーザーの権限を分ける機能
- ログイン時にユーザーごとにロール(役割)と呼ばれるアクセス権を与える
MCS†
- Multi Category Security
- カテゴリーが一致するプロセス、リソース同士のみアクセスが可能とする
- プロセスやリソースにカテゴリーというラベルを付与する
- 簡単にプロセス、リソースを分離できるので、仮想化環境の分離に利用される
- コンテナ起動時にコンテナごとに一意となるカテゴリーラベルを自動で付与する
MLS†
- Multi-Level Security
- 軍事向けのアクセス制御機能
ドメイン遷移†
- プログラムを実行した際に、起動したプロセスのドメインとは別のドメインで動作するようにする
- 起動元プロセスのドメイン
- 実行ファイルのタイプ
- 起動されたプロセスが動作するドメイン
- ※補足:デフォルトでは、起動したプロセスのドメインは親プロセスのドメインを引き継ぐ
Userland AVC†
- アプリケーション独自のパーミッションルールをチェックする
監査ログ†
- プロセスのアクセス許可・拒否のログを記録する
/var/log/audit/audit.log
有効/無効とモード†
- Enforced
- 強制モード : セキュリティポリシーに違反するアクションをブロック(Yes)、ログに記録(Yes) ※本番運用向け
- Permissive
- 開発モード : セキュリティポリシーに違反するアクションをブロック(No)、ログに記録(Yes) ※開発・調査向け
- Disabled
- 無効 : セキュリティポリシーに違反するアクションをブロック(No)、ログに記録(No)
コマンド†
sestatus†
getenforce†
setenforce†
sesearch†
chcon†
semanage†
semanage fcontext -a -t httpd_sys_content_t "/var/www(/.*)?"
restorecon†
設定ファイル†
/etc/selinux/config†
/etc/selinux/targeted†
- ロール
sysadm_r | システム管理者 |
user_r | 一般ユーザー |
system_r | システムプロセス |
- ラベル
デーモン | ドメイン | タイプ |
httpd | httpd_t | httpd_content_t、httpd_sys_content_t、httpd_sys_script_exec_t |
- セキュリティコンテキスト
- ユーザー名、ロール、ラベル(ドメインまたはタイプ)、レベル、カテゴリー
- セミコロン区切り
- タイプ
- <ファイルのパス(正規表現可)> <ファイル種別> system_u:object_r:<タイプ>:s0
- allow <ドメイン> <タイプ>:<オブジェクトクラス> {<パーミッション>};
- オブジェクトクラス:file, dir, tcp_socket
- パーミッション;オブジェクトクラス毎に用意されている(fileの場合read, write など)
設定状況の確認†
ログの確認†
関連用語†