MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
設定 - SELinuxのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
設定 - SELinux
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == SELinux (Security-Enhanced Linux) は、Linuxのセキュリティ拡張機能であり、強制アクセス制御 (MAC) の仕組みを提供する。 (Linux 2.6以降でサポート)<br> 外部に侵入されないための仕組みではなく、侵入された後にアクセスできる範囲を最小限に抑えるための仕組みである。<br> <br> SELinuxの特徴を以下に示す。<br> * 強制アクセス制御 (MAC) *: 従来の任意アクセス制御 (DAC) に加えて、より厳格なアクセス制御を実現する。 *: <br> * 最小権限の原則 *: プロセスやユーザに必要最小限の権限のみを与えることで、潜在的な被害を制限する。 *: <br> * ポリシーベースの制御 *: システム管理者が定義したセキュリティポリシーに基づいてアクセスを制御する。 *: <br> * コンテキストラベル *: ファイル、プロセス、ポート等のリソースにセキュリティコンテキストを割り当てる。 *: <br> * 動作モード *: Enforcing (強制)、Permissive (許容)、Disabled (無効) の3つのモードがある。 *: <br> * ログ機能 *: セキュリティ違反の試みを詳細にログに記録する。 <br> <center> {| class="wikitable" | style="background-color:#fefefe;" |- ! colspan="2" style="background-color:#44CC99;" | SELinuxの参考書 |- style="text-align: center;" | style="width: 50%" | <center><html><a href="https://www.amazon.co.jp/SELinux-System-Administration-applications-information/dp/1800201478?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=3D1YVPV0TTWO4&keywords=SELinux_System_Administration&qid=1686204000&s=english-books&sprefix=selinux_system_administration%2Cenglish-books%2C277&sr=1-1&linkCode=ll1&tag=presire220a-22&linkId=20d73b6c630514df5f58f7f3dae3ad76&language=ja_JP&ref_=as_li_ss_tl" target="_blank"><img style="width: 250px; height: auto;" src="https://m.media-amazon.com/images/I/81aU0AOWozL._SL1360_.jpg" ></a><br> <a target="_blank" href="https://www.amazon.co.jp/SELinux-System-Administration-applications-information/dp/1800201478?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=3D1YVPV0TTWO4&keywords=SELinux_System_Administration&qid=1686204000&s=english-books&sprefix=selinux_system_administration%2Cenglish-books%2C277&sr=1-1&linkCode=ll1&tag=presire220a-22&linkId=3bb3c7a83c2ae68a2d542cd0cb000b38&language=ja_JP&ref_=as_li_ss_tl">SELinux System Administration 3rd Edition<br>ソフトウェアやユーザ等を保護するための強制アクセス制御(MAC)の実装</a></html></center> | style="width: 50%" | <center><html><a href="https://www.amazon.co.jp/SELinux-Cookbook-English-Sven-Vermeulen-ebook/dp/B00NVDAWII?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=FNML2OKPIKKI&keywords=SELinux+Cookbook&qid=1705129233&s=english-books&sprefix=selinux+cookbook%2Cenglish-books%2C167&sr=1-1&linkCode=ll1&tag=presire220a-22&linkId=a8f1881d2772673e034bff83e9910fe5&language=ja_JP&ref_=as_li_ss_tl" target="_blank"><img style="width: 250px; height: auto;" src="https://m.media-amazon.com/images/I/8153xazSMPL._SL1500_.jpg" ></a><br> <a target="_blank" href="https://www.amazon.co.jp/SELinux-Cookbook-English-Sven-Vermeulen-ebook/dp/B00NVDAWII?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=FNML2OKPIKKI&keywords=SELinux+Cookbook&qid=1705129233&s=english-books&sprefix=selinux+cookbook%2Cenglish-books%2C167&sr=1-1&linkCode=ll1&tag=presire220a-22&linkId=a8f1881d2772673e034bff83e9910fe5&language=ja_JP&ref_=as_li_ss_tl">SELinux Cookbook</a></html></center> |} </center> <br><br> == SELinuxの役割 == SELinuxは、Linux上で動作するプロセスからファイル等のリソースに対するアクセスを制御するのが主な機能である。<br> 通常のLinuxシステムでは、ユーザやグループのファイルに対するアクセス権で制御されますが、スーパーユーザは特権ユーザとして全てのファイル等にアクセスすることができる。<br> <br> これに対して、SELinuxは"強制アクセス制御"(MAC: Mandatory Access Control)と呼ばれる方式を採用している。<br> MACは、スーパーユーザに対しても設定されたアクセス制御を超えた特権を与えることがない。<br> <br> 多くのセキュリティ攻撃がスーパーユーザ権限を奪取することを第一の目的とし、その後の攻撃に繋げていることを考えると、セキュリティ対策として必要な機能といえる。<br> <br><br> == SELinuxの機能 == ==== TE(Type Enforcement) ==== プロセスがアクセスできるリソースを制限する機能である。<br> <br> プロセスにドメインを、リソースにタイプを割り当て、その組み合わせごとにアクセス権を設定する。<br> このアクセス権の設定の集合を、アクセスベクタという。<br> <br> 子プロセス生成時には、基本的には親プロセスのドメインが引き継がれる。<br> 子プロセスのドメインを変更することを、ドメイン遷移と呼ぶ。<br> <br> ==== RBAC(Role Based Access Controle) ==== ユーザがアクセスできるリソースを制限する機能である。<br> <br> ユーザごとにアクセス可能なロールが決まっており、ロールごとにアクセス可能なドメインが決まっている。<br> TEにより、ドメインごとにアクセス可能なタイプが決まっているため、最終的には、ユーザがアクセス可能なオブジェクトを制御することができる。<br> <br> RHELでは、全てのLinuxユーザがunconfined_uに対応しており、unconfined_uにはアクセス制限が掛けられない。<br> したがって、RHELではRBACは意味をなさない。<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> == 各ソフトウェアのポリシー設定 == SELinuxを有効にしている場合、サービスが起動しない問題は、SELinuxポリシーによる制限が原因となる場合がある。<br> SELinuxはセキュリティ上の観点から、プログラムが実行できるアクションを制限することがある。<br> <br> まず、ポリシーファイルを作成するために必要なライブラリをインストールする。<br> # RHEL sudo dnf install checkpolicy policycoreutils-python # SUSE sudo zypper install checkpolicy python3-policycoreutils <br> SELinuxのログを確認する。<br> SELinuxがサービスをブロックしている場合、SELinuxのログにその旨のエラーメッセージが表示される。<br> <br> まず、SELinuxログを確認する。<br> sudo tail -f /var/log/audit/audit.log <br> 次に、ポリシーモジュール(TEファイル : Type Enforcement)とポリシーパッケージファイル (PPファイル : Policy Package) ファイルを作成する。<br> TEファイルとは、特定のドメインに対する全てのタイプとルールを定義するものである。<br> sudo grep <サービス名> /var/log/audit/audit.log | audit2allow -M <任意のポリシーファイル名> <br> 必要であれば、TEファイルをコンパイルして、ポリシーモジュールファイル(.mod拡張子)を生成する。<br> checkmodule -M -m -o <任意のポリシーモジュール名>.mod <任意のポリシーモジュール名>.te <br> または、TEファイルから直接ポリシーパッケージファイル(.pp拡張子)を生成することもできる。<br> make -f /usr/share/selinux/devel/Makefile <br> もし、上記でTEファイルからポリシーモジュールファイル(.mod拡張子)を生成した場合、ポリシーパッケージ(.pp拡張子)を生成する。<br> semodule_package -o <任意のポリシーパッケージ名>.pp -m <任意のポリシーモジュール名>.mod <br> 作成したポリシーモジュールをSELinuxにロードして、ポリシーを有効にする。<br> sudo semodule -i <任意のポリシーパッケージ名>.pp <br><br> == ポリシーモジュールの有効化 / 無効化 / 削除 == 追加したポリシーは、有効化 / 無効化 / 削除することができる。<br> # ポリシーの有効化 sudo semodule -e <任意のポリシー名> # ポリシーの無効化 sudo semodule -d <任意のポリシー名> # ポリシーの削除 sudo semodule -r <任意のポリシー名> <br><br> == ポリシーモジュールファイル (TEファイル) のシンタックス == ポリシーモジュールファイル (TEファイル) を作成することにより、特定のソフトウェアやサービスに対するカスタムポリシーを作成できる。<br> <br> 以下のセクションに示す要素を組み合わせて、特定のアプリケーションやサービスに対するSELinuxポリシーモジュールを作成することができる。<br> <br> ==== モジュール宣言 ==== policy_module(モジュール名, バージョン) 例: policy_module(myapp, 1.0) <br> ==== タイプ定義 ==== type タイプ名; 例: type myapp_t; type myapp_exec_t; type myapp_data_t; <br> ==== ドメイン遷移ルール ==== domain_auto_trans(ソースドメイン, 実行ファイルタイプ, ターゲットドメイン) 例: domain_auto_trans(unconfined_t, myapp_exec_t, myapp_t) <br> ==== allowルール ==== allow ソースタイプ ターゲットタイプ:クラス { パーミッション }; 例: allow myapp_t myapp_data_t:file { read write getattr }; <br> ==== インタフェース使用 ==== インタフェース名(タイプ1, タイプ2, ...) 例: files_read_etc_files(myapp_t) <br> ==== 属性の定義と割り当て ==== attribute 属性名; typeattribute タイプ名 属性名; 例: attribute myapp_domain; typeattribute myapp_t myapp_domain; <br> ==== ブール値の定義 ==== bool ブール名 default 初期値; 例: bool myapp_enable_feature default false; <br> ==== 条件付きポリシー ==== if (条件) { // ポリシールール } else { // 別のポリシールール } 例: if (myapp_enable_feature) { allow myapp_t user_home_t:file { read write }; } <br> ==== ロールの割り当て ==== role ロール名 types タイプ名; 例: role system_r types myapp_t; <br> ==== ファイルコンテキストの指定 ==== files_type(タイプ名) 例: files_type(myapp_data_t) <br><br> __FORCETOC__ [[カテゴリ:RHEL]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]][[カテゴリ:PinePhone]]
設定 - SELinux
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse