Linuxmaniaトップ活用ガイド > SELinux入門

Linuxmania:活用ガイド


■SELinux入門 その1(Fedora、CentOS)


セキュリティ強化のための仕組みである SELinux。
ここでは入門編としまして、その仕組みを簡単にご紹介します。



目次
 1. SELinux とはなにか?
    1.1. 従来のOSの欠点 
    1.2. セキュアOSの利点 
    1.3. SELinux の位置づけ 
 2. SELinux の仕組み? 
 3. SELinux の設定は? 
    3.1. SELinux セキュリティコンテキスト 
    3.2. SELinux ポリシーファイル 
    3.3. SELinux 設定ツール 
 4. まとめ 
 参考URL 


1. SELinux とはなにか?

 SELinux はセキュリティ強化のための仕組みで、セキュアOS(不正侵入されても被害を受けにくいOS)の実装の一つです。


 Linuxカーネルの機能、LSM(Linux Security Module) のモジュールとして実装されており、Fedora と CentOS ではデフォルトで有効になっています。


 1.1. 従来のOSの欠点

 従来のOSには、一度侵入されてしまうと被害が拡大しやすく、大きな被害を受けやすいという欠点がありました。

 これは、以下の理由によります。

(1) 管理者ユーザ(root)が強力な権限を持つ
一度管理者権限を奪われてしまうと、後は攻撃者の思うがままにされてしまいます。

(2) 一時的に管理者権限を得て動くプロセスがある
攻撃者にプロセスを利用され、管理者権限を奪われる危険があります。

(3) ファイルのアクセス制御の仕組み(ファイルパーミッション)がおおざっぱである
管理者権限を奪われなくても被害が拡大する可能性があります。

(4) 所有者が自由にリソース(ファイルやディレクトリなど)のアクセス権限を変更できる
セキュリティ管理者の知らない間に、ユーザの操作によってセキュリティの穴ができてしまう可能性が
あります。

 1.2. セキュアOSの利点

 セキュアOSでは、不正侵入を受けても被害が拡大しにくいよう改良されています。
 具体的には、「最小特権」と「MAC(強制アクセス制御)」の機能を持っています。


(1) 最小特権
従来のOSの欠点(1)(2)を防ぐための機能です。
プロセスは本当に必要な権限だけを与えられます。もしプロセスが乗っ取られても、権限の範囲外には
被害が及びません。

(2) MAC(強制アクセス制御)
従来のOSの欠点(3)(4)を防ぐための機能です。
リソースのアクセス制御を強化し、統一管理します。管理者ユーザに対しても強制力があります。

 これらの機能により、「不正侵入を受けても管理者権限を奪われにくい」「攻撃者が管理者権限を奪っても自由に行動できない」ようになり、 セキュアOSは従来のOSよりも格段に安全になります。


 1.3. SELinux の位置づけ

 SELinux 以外にも、セキュリティ強化の仕組みはいろいろあります。ファイアウォール、セキュリティパッチ、ウィルス対策ソフト…。
 SELinux があれば、これらは不要になるのでしょうか?


 答えは「いいえ」です。

 SELinux は従来のセキュリティの置き換えではなく、むしろ協調してセキュリティを向上します。


 それでは、従来のセキュリティと SELinux それぞれの機能を見てみましょう。


(1) ファイアウォール
許可する通信のみ通過させ、他の通信はブロックします。
攻撃前の事前調査、および内部への直接攻撃を防ぎます。

(2) IDS / IPS
攻撃を検知して管理者に知らせる / 検知した攻撃をブロックします。
攻撃発生時の迅速な対応を可能にします。

(3) アクセス制御
特定のユーザによるアクセスのみを許可し、他のアクセスは拒否します。
意図しないユーザによる利用を防ぎます。

(4) セキュリティパッチ
脆弱性の中には、攻撃者によるアクセス制御回避を可能にするものがあります。
セキュリティパッチはこの脆弱性を無効にします。

(5) ウィルス対策ソフト
ウィルスの検出、駆除(削除)、免疫(無力化)を行います。
システムのウィルス感染を防ぎます。

(6) SELinux
アクセス制御を集中管理し、ユーザやプロセスには必要最低限の権限しか与えない。
不正侵入後の被害拡大を防ぎます。

 このように、従来のセキュリティが不正侵入防止を目的にしているのに対し、SELinux は不正侵入後の被害拡大防止を目的にしています


 サッカーにたとえるなら、従来のセキュリティはディフェンダー、SELinux はゴールキーパーにあたるといえます。

従来のセキュリティは敵のゴール接近(不正侵入)を防ぎ、SELinux は敵のシュート(被害拡大)を防ぐというわけです。




2. SELinux の仕組み?

 SELinux の根底に流れる考えは、「権限を最小化すれば被害は拡大しにくい」です。


 SELinux には、権限を最小化するための仕組みとして、MAC、TE、ドメイン遷移、RBAC があります。


(1) MAC(強制アクセス制御)
アクセス制御を集中管理します。重要なシステムコールを全てフックし、許可/拒否の判定を
行います。
許可/拒否の設定は、セキュリティポリシーファイル(以下、ポリシーファイル)で定義されます。

(2) TE(Type Enforcement)
プロセスの権限を最小化します。プロセスごとにアクセス制御を行い、利用可能なリソースを
必要最小限に制限します。
プロセスにはドメイン(権限)、リソースにはタイプという属性情報が付与され、二つの組み合わせ
によりアクセスの可否が決まります。
プロセスは、自分の権限外のリソースにはアクセスできません。

(3) ドメイン遷移
通常、SELinux では子プロセスは親プロセスのドメインを引き継ぎますが、これは不都合な
場合があります。
そんな時に、子プロセスをより適切な権限で実行するための仕組みです。
(サーバをより小さな権限で動作させるなど)

(4) RBAC(ロールベースアクセス制御)
ユーザの権限を最小化します。従来は root ユーザが全ての特権を持っていましたが、これを
分割可能にします。
システム管理者には sysadm_r、Web管理者には webmaster_r のように、役割ごとにロールを
用意します。
各ロールには必要最低限のドメイン(権限)を与え、ユーザには必要なロール(役割)のみ割り当てます。

※Fedora では RBAC 向けポリシーファイルは配布されていません。RedHat Enterprise Linux
 または CentOS をご利用下さい。




3. SELinux の設定は?

 SELinux の設定は、次の3つを利用して行われます。

  1. SELinux セキュリティコンテキスト
  2. SELinux ポリシーファイル
  3. SELinux 設定ツール

 3.1. SELinux セキュリティコンテキスト

 SELinux では、プロセスとリソースに対して SELinux セキュリティコンテキスト という属性情報(ラベル) が付与されます。

 SELinux セキュリティコンテキスト は、ユーザ識別子、ロール識別子、タイプ識別子の3つで構成されます。
ユーザ識別子とロール識別子は、それぞれ RBAC のユーザとロールを表します。タイプ識別子は、TE のドメインとタイプを表します。

 SELinux セキュリティコンテキスト は、ファイルマネージャ または コマンドを利用して確認することができます。


[ファイルマネージャ]

(1) ファイルの SELinux セキュリティコンテキスト を見る
ファイルマネージャで ファイルを右クリック→[プロパティ]→[アクセス権] を実行します。
selinux-fileproperty.png

(2) ファイル一覧 に SELinux セキュリティコンテキスト の項目を追加する
ファイルマネージャで [表示]→[表示する項目]→[SELinux のコンテキスト] にチェックを追加します。
selinux-filemanager-setting.png

SELinux セキュリティコンテキスト がファイル一覧に表示されるようになります。

selinux-filelist.png

[コマンド]

(1) 自分の SELinux セキュリティコンテキスト を見る
  id コマンドの -Z オプションを利用します。
$ id -Z
  # 通常ログインしている状態 (staff_r ロール)
staff_u:staff_r:staff_t
  # SELinux セキュリティコンテキスト は、staff_u ユーザ、staff_r ロール、staff_t ドメイン です。

# id -Z
  # 管理者ロールになっている状態 (sysadm_r ロール)
staff_u:sysadm_r:sysadm_t
  # SELinux セキュリティコンテキスト は、staff_u ユーザ、sysadm_r ロール、sysadm_t ドメイン です。

(2) プロセスの SELinux セキュリティコンテキスト を見る
  ps コマンドの -Z オプションを利用します。
$ ps -Z
LABEL                            PID TTY          TIME CMD
staff_u:staff_r:staff_t          5657 pts/1    00:00:00 bash
staff_u:staff_r:staff_t         28892 pts/1    00:00:00 ps
  # bash プロセスの SELinux セキュリティコンテキスト は、staff_u ユーザ、staff_r ロール、staff_t ドメイン です。

(3) ファイルの SELinux セキュリティコンテキスト を見る
  ls コマンドの -Z オプションを利用します。
$ ls -Z
drwxr-xr-x  hoge hoge staff_u:object_r:staff_home_t    Desktop
  # このファイルの SELinux セキュリティコンテキスト は、staff_u ユーザ、object_r ロール、staff_home_t タイプ です。

   SELinuxセキュリティコンテキスト は、SELinuxポリシーファイルで定義されます。


 3.2. SELinux ポリシーファイル

  SELinux ポリシーファイル には、3種類あります。


(1) ポリシーモジュール(システム)
ディストリビューションの開発者によって作成されたポリシーです。バイナリで配布されています。
(バイナリのみで配布されており、内容の変更にはソースファイルのインストールが必要です)

※通常の運用では、このファイルの内容を変更する必要はほとんどありません。

(2) ポリシーモジュール(ローカル)
システム管理者によって作成されるポリシーです。ローカルでバイナリに加工します。(コンパイルとパッケージ化)。
システムに新たなソフトウェアをインストールしたり、SELinux警告を解消したりするために作成されます。
(管理者の手元にソースファイルがあり、内容を自由に変更することが可能です)

(3) メタファイル
ポリシーモジュールに手を加えずに変更可能な SELinux設定 を収めたファイルです。
ファイルの SELinuxセキュリティコンテキスト やユーザとロールの対応設定、よく使われる設定のショートカット(SELinux論理値)などが含まれます。
setseboolコマンド や semanageコマンド、SELinux Administrationツール によって設定を管理可能です。

※通常の運用では、まずこのレベルの設定変更で解決できないか検討することから始めます。

[解説] ポリシーモジュール(システム)とポリシーモジュール(ローカル)の違いは?
ポリシーは SELinux の動作を決める法律のようなもので、「○○なら許可」「××なら不許可」などのルールを定めたものです。

ポリシーモジュール(システム)が国の法律(全国共通)とすれば、ポリシーモジュール(ローカル)は県の条例のようなものです。
県(個々のシステム)の実状にあわせ、法律(ルール)を変更(カスタマイズ)することができるというわけです。

 3.3. SELinux 設定ツール

[GUI]

SELinux Administration
起動方法: [システム]→[管理]→[SELinux Management]
SELinuxの設定を行います。メタファイルを操作します。
selinux-manager.png

SELinux Policy Generation Tool
起動方法: [アプリケーション]→[システムツール]→[SELinux Policy Generation Tool]
ポリシーモジュール(ローカル)を生成します。
selinux-polgen.png

SELinux Troubleshooter
起動方法: [アプリケーション]→[システムツール]→[SELinux Troubleshooter]
SELinuxの警告を表示します。
selinux-troubleshoot.png

[CUI]

setsebool
SELinux論理値を変更します。SELinux論理値とは、SELinux でよく利用される設定をワンタッチで利用可能にしたものです。
たとえば、SELinux論理値 httpd_enable_cgi は、Apache で CGI を利用可能/不可に設定できます。(デフォルトで有効になっています)

semanage
SELinuxの設定を行います。以下の設定が可能です。
・ファイルの デフォルトSELinuxセキュリティコンテキスト
・SELinuxユーザ とロールの対応
・ユーザと SELinuxユーザの対応
・ネットワークポートの SELinuxセキュリティコンテキスト

semodule
ポリシーモジュール(ローカル)をインストール/アンインストールします。

audit2allow、checkmodule、semodule_package
ポリシーモジュール(ローカル)を作成します。

chcon
ファイルの SELinux セキュリティコンテキスト を変更します。

restorecon
ファイルの SELinux セキュリティコンテキスト を修復し、デフォルトに戻します。



4. まとめ
・SELinux はセキュリティ強化のための仕組みで、不正侵入された時の被害拡大を防ぐことを
 意図しています。
・SELinux は従来のセキュリティを置き換えるものではなく、協調してセキュリティを向上させるものです。
・SELinux の根底には、「権限を最小化すれば被害は拡大しにくい」という考え方があります。
・SELinux は、重要なシステムコールを全てフックし、アクセス制御の集中管理を行います。
・SELinuxは、ユーザとプロセスの権限を最小化し、被害の拡大を防ぎます。
・SELinuxの設定は、「セキュリティコンテキスト」「ポリシーファイル」「設定ツール」の3つを  利用して行われます。
・SELinuxセキュリティコンテキストは、プロセスとリソースの属性情報です。ユーザ/ロール/タイプの  3つの識別子を持ちます。
・SELinuxポリシーファイルは、「ポリシーモジュール(システム)」「ポリシーモジュール(ローカル)」  「メタファイル」の3つで構成されます。
・GUIのSELinux設定ツールには、SELinux Management、SELinux Policy Generationtool、  SELinux Troubleshooter があります。
・CUIのSELinux設定ツールには、semanage、setsebool、semodule、audit2allow、chcon、restorecon  などがあります。




参考URL
[作成日 2008/9/19]