/var/log/dmesg

30代文系出身SE(男)が日常生活のブログ。脳みそのバッファメモリを退避して、毎日やすらかに眠りたい。という思いで更新しています。

【LPIC303】【まとめ】SELinux

LPIC303受験に向けて情報整理

SELinux(Security-Enhanced-Linux)について

参考書とWebでの情報収集した結果を投下
参考書はこれ。(というか2014/5時点ではこれしかない)

情報源はこのサイトたち。ありがとうございました 
http://itpro.nikkeibp.co.jp/article/COLUMN/20070827/280414/ http://www.itmedia.co.jp/enterprise/articles/0503/25/news080.html http://ishikawa84g.hatenadiary.jp/entry/20100420/1271690200 http://www.itmedia.co.jp/enterprise/articles/0502/17/news033.html

Topic

SELinuxの概要

SELinuxとはLinuxのセキュリティ拡張機能rootユーザーに集中していた権限を 複数のユーザーやプロセスに細かく分けてそれぞれにセキュリティポリシーを設定する。 このような仕組みからユーザーやプロセスが乗っ取られてもシステムへの影響は最小限に抑えることができる。

主概念

  • MAC(Mondatory Access Control)

    従来のファイルのパーミッション毎に、ファイルやソケットなどに対して行うことのできる操作を明示的に行いそれ以外の操作を行えなくすることができる。

  • TE(Type Enforcement)

    プロセスがアクセスできるリソースを制限する仕組みプロセスに対してドメインと呼ばれるラベルを付与する。 ファイルやディレクトリ、ソケットになどのリソースに対してタイプと呼ばれるラベルを付与するこの「ドメイン」と「タイプ」の間で、 「ドメイン(プロセス)がタイプ(リソース)に対して、どのような操作を実行できるのか」といった「アクセスベクタ」と呼ばれる操作の種類(アクセス権)を設定する。 また、ファイルやソケットなどのリソースは 約30種におよぶオブジェクトクラスとして定義され、オブジェクトクラスごとに細かくアクセスベクタを設定することで、詳細なアクセス制御を行うことができる。

  • RBAC(Role Based Access control)

    Role(役割)に対しての権限付与により権限管理を行う方法。 各ユーザーに対してそれぞれ権限を設定する方法は、管理の煩雑さが伴うため、 (ユーザー情報の変更、例えば部署移動とか) 役割単位でできることを分割し管理するイメージ。

  • ドメイン遷移

    フォーク(親プロセスから子プロセスを生成)するとき、親プロセスの権限(ドメインというラベル)を そのまま継承すると、子プロセスには不要な権限が付与されてしまう。 「最少特権」がキモなので、別ドメインで起動するように制御すること。

コマンド・設定ファイル

SELinuxの動作状況の確認、有効化無効化

setenforce(getenforce)

一時的な制御はコマンドから実行
setenforce 0 (permissive)
setenforce 1 (enforcing)
永続的な制御はConfigファイルで定義
/etc/selinux/config内の「SELINUX=」に以下を記述
[permissive][enforcing][disabled]

SELinuxのモード

mode Value Mean
enforcing 1 SELinux機能、アクセス制御が有効
permissive 0 SElinuxは警告を出力するが、アクセス制御は無効
disabled - SElinux機能、アクセス制御が無効

selinuxenabled
SELinuxの有効/無効をシェルスクリプトの判定等に利用
# selinuxenabled
# echo $?
1
SELinuxは「enforcing 」で動いている。

sestatus
SELinux現在の状態、起動時の状態、バージョン、セキュリティポリシーを表示するコマンド。 vオプションで詳細情報を表示できる 表示内容は「/etc/sestatus.conf」 に設定できる。

ロール関連

newrole
# newrole -r sysadm_r
ロール変更コマンド。SELinuxロールは3つ
・ 「sysadm_r」 システム管理のためのロール
・ 「staff_r」 一般ユーザーの権限を付与するロール
・ 「user_r」 権限を限定したロール

getcon/id
# getcon(id)
自分のロールを確認できる

タイプ関連

fixfiles/setfiles
# fixfiles relabel
SElinuxを無効から有効へ変更した場合、root権限でシステムに存在する。 すべてのファイルに対し、デフォルトのポリシーファイル(アクセス制御の設定)に 基づいたタイプ付けを行う必要がある。
# setfiles
一部のファイルにタイプ付けを行う
# chcon
1つのファイルにタイプ付けを行う

semanage
タイプを管理するためのもので,ファイルに付与されるタイプのほか、 ポート番号に付与されるタイプも変更可能。 chconコマンドでもタイプを変更することは可能だが、初期化する場合もある。 semanageはfile_contextsファイルを確実に変更可能。

ls -Z
-Zオプションでファイルのタイプ(セキュリティコンテキスト)が確認できる

ドメイン関連

ps -eZ | more
-Zオプションでプロセスのドメイン(セキュリティコンテキスト)が確認できる

ポリシー関連

/etc/selinux/以下にstrictとtargetedディレクトリが存在し、 それぞれポリシーファイルが格納されている。 ポリシー設定で重要なディレクトリは下記のディレクトリ(ファイル)。 ※targetedも同様

/etc/selinux/strict/src/policy/domains
TE、ドメイン遷移の設定ファイル(「.te」という拡張子のファイル)が格納されているディレクトリ。 admin.te、user.teファイルに、各ユーザーのロールに付与される。ドメインの設定が記述されている。 programディレクトリ以下には、アプリケーションごとに設定ファイルが用意されている。

/etc/selinux/strict/src/policy/file_contexts
リソースに対するタイプ付けの設定ファイル(「.fc」という拡張子のファイル)が格納されているディレクトリ。 types.fcファイルには、システムファイル関連のタイプ付けの設定が記述されている。 programディレクトリ以下には、アプリケーションごとにファイルのタイプ付けが記述された設定ファイルが用意されている。

domainsディレクトリおよびfile_contextsディレクトリ以下のアプリケーションに関するポリシーファイルは依存関係がある。
仮にdomains/program/以下に「.te」ファイルを追加した場合、file_contexts/program/以下にも 同一ファイル名で「.fc」ファイルを作成する必要がある。 片方のファイルが存在しない場合、設定反映時にエラーとなるので注意が必要。

/etc/selinux/strict/policy/policy.18
「.te」ファイルの内容がバイナリ形式に変換されたファイル。 TE、ドメイン遷移、RBACの設定が記述されている。 SELinuxモジュールのアクセス制御は、policy.18ファイルと後述する file_contextsファイルを参照して行われる。
※この18は何だろう?手元の環境は24だし。

補足と所感

FedoraRedHat系のディストリビューションではSELinuxが標準採用されているが、構造・設定が複雑。 SUSEDebian系のディストリビューションで採用されている。 AppArmorはそれほど複雑ではなく、様々な制約をかけることができる。 SELinuxは構築時に全ての設定を終える必要があるが。 AppArmorは制限するプログラムを順次増やしていくことができる。 けれども、逐次セキュリティを強化していきますよという考えはセキュリティ面ではよしとはできない。 とはいえど、セキュリティだけでシステム動いてないしね。 ようは、ケースバイケースと書いているけど、どのディストリビューション使ってるかによって、ほぼ決まるのでは・・
あとどうでもいいけど、前回くらいからMarkDownを本格的導入。便利だ、これ。