Next: 6 次に何をすればいいの?
Up: SELinux Policy Editor(seedit)管理ガイド(マニュアル) 2.0
Previous: 4 GUIの概要
Contents
Subsections
seeditをインストールすることで、システムに何が起こっているのかを把握しま
しょう。
Simplified policyは、/etc/seedit/policy以下に「.sp」という拡張子のファイ
ルとしてインストールされています(詳細は後ほど)。Simplified policyは、
seedit-loadコマンド(内部的にseedit-converterコマンドが実際の作業を行っ
ています)によって、SELinuxのポリシー(SELinuxのバイナリポリシ、
file_contextsファイル)に変換されます。変換後のポリシーは
/etc/selinux/seedit/policy, /etc/selinux/seedit/contexts/filesにインストー
ルされます。これらがカーネルに読み込まれていますが、/etc/selinux/seedit
以下のファイルを気にする必要は通常ありません。
デフォルトでインストールされているSimplified Policyは、「targetedポリシー」
相当のもので、設定が緩い部分があります。具体的に以下のようになってます。
- 選択されたデーモンプロセスだけが守られており、SELinuxによって制限
されないプロセスの存在を許容
「SELinuxによって制限されていないプロセス」には、「全てのアクセス
を許可」するドメインが割り当てられます。アクセス制御は、普通の
Linuxのパーミッションチェックのみになります。
- RBAC(Role Base Access Control)は設定されていない
SPDLは、原理的にはRBACも設定可能ですし、strictポリシー相当のものも記述可
能です。RBACについては、「RBACガイド」を参照してください。
このように、デフォルトでは、SELinuxで制限されていないプロセスが存在します。
これらのプロセスには、「SELinuxによって制限されないドメイン(以下
unconfinedドメインと呼びます)」が割り当てられています。
unconfinedドメインは、全てのアクセスを許可するように設定されています。
unconfinedドメインが割り当てられたアプリケー
ションは、SELinuxによるアクセス制御を事実上受けなくなり、普通のLinuxの上
で動いているのと同様になります。
例えば、システム起動スクリプトには、initrc_tドメインというunconfinedド
メインが割り当てられています。
どのプロセスにunconfinedドメインが割り当てられているのかを把握することがセキュリ
ティ上重要になってきます。
5.4 システムの状況把握(GUI)
システムの状況を把握するために、 ステータス をコントロールパネルか
ら選択します。seedit ステータスビューア というウィンドウが開きます。
5.4.1 モードの確認と切り替え
SELinux タブから、SELinuxのモードを確認したり切り替えたりできます
(図 2)。
Figure 2:
SELinuxのモードの確認と切り替え
|
seeditがインストールされている? はい, という表示は、seeditが無事
にインストールされていることを示しています。
現在のモードより、現在のモードがpermissiveモードであることが分か
ります。現在のモードの変更も、ここで行えます。
例えば、Enforcingモードに変えるには、 Enforcingモードを選択し、 適用 ボタンを押します。
ブート時のモード は、システム起動時のモードです。 Permissive
モードと表示されている時は、再起動時、システムがPermissiveモードで起動
します。実運用時には、両方ともEnforcingモードに切り替えるべきです。
プロセスタブ動作中のプロセス, より、動作中のプロセスのドメ
インを確認できます。
図は 3実行例です。
Figure 3:
動作中のプロセスのドメインを確認
|
Unconfinedドメインで動作しているプロセスには「Unconfined」と表示されてい
ます。例えば、bashはUnconfinedドメインで動作しています。一方、httpdには、
httpd_tドメインという通常のドメインが付与されていることが分かります。
PID, プロセス, ドメイン、をクリックすることで、それぞれの項目で結果をソー
トすることができます。
更新 ボタンを押すと、表示が更新されます。
ネットワークプロセス(ネットワーク接続を外部から受け付けるプロセス)は、攻撃者が侵入する際の入口として使われます。ここを
しっかりと守ることが、外部からの不正侵入による被害を無くすために重要になります。
以下のような状況が理想です。
- 全てのネットワークプロセスに適切なドメインが割り当てられている
- Unconfinedドメインが割り当てられた(SELinuxによって制限されない)プロセスがある場合
以下のような選択肢があります。
- 適切なドメインを割り当てる設定をする
設定方法は、後ほど紹介します。
- SELinux以外の対策を強化する
ファイアウォール(iptables)によって、接続できるアドレスを制限した
り、パッチ当ての優先度を上げるなどする
- そのようなプロセスを立ち上げない(サービスを止める)
- リスクを許容する
ネットワークプロセスのドメ
インは、プロセスネットワークプロセスより確認できます。
実行例を図 4に示します。
Figure 4:
ネットワークプロセスのドメインを確認
|
avahi-daemon, rpc.statdなどにUnconfinedドメインが割り当てられていること
が分かります。これらのサービスは使わないならば、停止すべきでしょう。使う
ならば、ドメインを割り当てるべきです。
コマンドラインからもシステムの状況を把握可能です。seedit-unconfinedコマ
ンドを使います。seedit-unconfinedコマンドは、rootユーザーになってから使います。
「seedit-unconfined -e」にて、動作中のプロセスのポリシー適用状況を確認で
きます。以下に実行例を示します。
$ su -
# seedit-unconfined -e
Current SELinux mode: permissive ----(1)
PID Comm Domain
1 init Unconfined(init_t) ---(2)
...
1853 sshd Confined by sshd_t ---(3)
- (1) は、現在のSELinuxのモードを示しています。「permissiveモードである」
と言っています。permissiveモードでは、SELinuxのアクセス制限がかからない
ことに今一度注意しましょう。
- (2)は、initプロセスは、SELinuxに制限されていないことを言っていま
す。そして、SELinuxに制限されていないドメインinit_tが割り当てら
れています(init_tドメインは、全てのアクセスが許可されていること
を意味します。)。
- (3)は、sshdに、「sshd_tドメイン」が割り当てられているとい
う意味です。sshd_tドメインは、sshdに必要最小限のアクセス許可を与
えるように設定されています(設定内容は後で示す方法で確認できます)。
ちなみに、ps -eZコマンドでも、動作中のプロセスのドメインを確認可能です。
しかし、どのドメインがunconfinedドメインかを知ること
はできません。SELinuxの制限がかかってないドメイン一覧は、
/etc/selinux/seedit/policy/unconfined_domainsに記述されていますので、
このファイルの内容と照合する必要があります。
ネットワークプロセス(外部からネットワーク接続を待ち受けているプロセス)
の状況をseedit-unconfined -nコマンドで確認できます(AppArmorの
unconfined`コマンドみたいなものです)。
さて、実際に確認してみましょう。seedit-unconfined -nの実行例を以下に示し
ます。
#seedit-unconfined -n
Current SELinux mode: permissive ----(1)
/usr/sbin/smbd Unconfined(initrc_t) -- (2)
/usr/sbin/sendmail.sendmail Confined by sendmail_t --(3)
...
ネットワークプロセス一覧が表示され、ドメインの適用状況が表示されます
- (1)は現在のSELinuxのモードです。
- (2)は、smbd は制限されていないことを言っています。
- sendmailは、sendmail_tドメインが割り当てられており、sendmail_t
は、最小限の権限を持つよう設定されてます。
この場合、smbdに対して何らかの対処をしないとセキュリティを保てません。
5.5.3 Enforcing/Permissiveモードを切り換える
インストール直後は、permissiveモードですが、以下のコマンドでEnforcingモードに切り換え可能です。
# setenforce 1
# getenforce
enforcing
ただし、これだと再起動時にまたPermissiveモードに戻ってしまいます。
ブート時からEnforcingモードにするには、/etc/selinux/configを次のようにします。
実運用の際には、このようにEnforcingモードにすることを強く薦めます。
SELinux=permissive
-->
SELINUX=enforcing
Next: 6 次に何をすればいいの?
Up: SELinux Policy Editor(seedit)管理ガイド(マニュアル) 2.0
Previous: 4 GUIの概要
Contents
Yuichi Nakamura
2006-10-27