SELinux新機能解説

Red Hat Enterprise Linux 5で始めるSELinux


面 和毅

サイオステクノロジー株式会社
OSSソリューションセンター
グローバルサービスグループ
グループマネージャー

2007/3/14

 ツール類の充実

 RHEL5では、以前のバージョンに比べてSELinuxをより簡単に使用するためのツール類が充実しています。代表的なものをいくつか紹介します。

●トラブルシューティングの力強い味方:SETroubleShoot

 RHEL5で新たに追加されたGUIツールです。[System]->[Administration]->[SELinux Troubleshooter]で起動します。

図7 新たに追加されたSETroubleShoot(SELinux Troubleshooter)

 SETroubleShootは、市販のログ解析ツールのようなもので、いままでSELinuxで表示されていた、SELinuxの知識がある人間にしか理解できなかったようなログを解析し、分かりやすい形で表示してくれます。

 SETroubleShootが起動すると、図8のようにSELinuxのアクセス制御により出力されたログがWindowsのイベントログのような形で上側のペインに表示されます。また、それぞれのログの詳細な結果は、下部のペインに表示されます。単純にログを表示するだけでなく、そのログの意味や詳細な説明、そのほかのSELinuxに関する説明などが表示されます。さらに、FAQやバグレポートへのリンクもあり、これをクリックすることによりすぐにSELinux-FAQを参照したり、もしバグの場合にはバグレポートを作成することが可能になっています。

図8 SETroubleShootブラウザの画面(画像をクリックすると拡大します)

 RHEL5では、setroubleshootdというデーモンがデフォルトで動作しており、このsetroubleshootdがauditdサービスに渡るアクセス拒否メッセージを監視して、適宜ユーザーに告知するという方法を取っています。

【参考】
Fedora Core6におけるSELinuxの強化点──活発に開発が進むSELinux
http://www.itmedia.co.jp/enterprise/articles/0611/24/news011.html

●難解な設定を簡易に:semanage

 RHEL5から追加されたコマンドです。manページに“SELinux Policy Management tool”と書いてあることからも分かるとおり、SELinuxに関するさまざまな設定を行うことができます。

 semanageコマンドによって

  • ファイル/ディレクトリに対してのセキュリティコンテキスト(ユーザー:ロール:タイプ:MLS)の変更
  • ユーザーに対するセキュリティコンテキストの割り当て
  • インターフェイス、ポートなどネットワーク周りに関してのセキュリティコンテキストの割り当て

を制御することができます。

 例えば、“/var/tmp/hoge”ファイルのファイルコンテキストを“hoge_t”に変更する際には

# semanage fcontext -a -t hoge_t /var/tmp/hoge

とします。ファイルに対してのコンテキストの割り当ては、RHEL5からはchconコマンドよりもsemanageコマンドを使った方がfile_contextsを変更するため、yumアップデートの際のことを考えると良い方法だといえます。

 また、MCSで“s0:c0.c255”などと表示されるのは直感的ではないため、ユーザーの分かりやすいカテゴリ名を別名として“SystemHigh”などと表示することができますが、semanageコマンドはそのような別名の登録/管理を行うこともできます。semanageコマンドで作成した別名は、/etc/selinux/[ポリシー名]/setrans.confファイルに格納されています。

●ポリシーモジュール管理を容易に:semodule

 manページに“Manage SELinux policy modules”と書いてあることから分かるとおり、Referenceポリシーのポリシーモジュールを管理するコマンドになっています。例として、ポリシーをロードする際のオプションの使い方を見てみましょう。

 ユーザーが自分で“hoge”ドメイン用のポリシーモジュールを作成して追加したい際には、/usr/share/selinux/develディレクトリ(selinux-policy-develパッケージをインストールすると作成されます)に

  • hoge.te (hoge用のTEルールのファイル)
  • hoge.fc (hoge用のファイルコンテキストのファイル)
  • hoge.if (hoge用のインターフェイスのファイル)

を作成し、

# make hoge.pp

でhogeドメイン用のバイナリのポリシーパッケージを作成します。作成されたポリシーパッケージを

# semodule -i hoge.pp

でロードします。

●Referenceポリシー形式に対応:audit2allow

 SELinuxに関する拒否ログから、allowルールを生成するツールです。以前のバージョンからaudit2allowコマンドはあったのですが、RHEL5では新たにReferenceポリシーの形式でログから生成することができます。audit2allowのオプションを図に示します。

audit2allow [-adhilrv] [-t file ] [ -f fcfile ] [-i <inputfile> ] [[-m|-M] <modulename> ] [-o <outputfile>]
       -a, --all read input from audit and message log, conflicts with -i
       -d, --dmesg read input from output of /bin/dmesg
       -h, --help display this message
       -i, --input read input from <inputfile> conflicts with -a
       -l, --lastreload read input only after last "load_policy"
       -m, --module generate module/require output <modulename>
       -M generate loadable module package, conflicts with -o
       -o, --output append output to <outputfile>, conflicts with -M
       -r, --requires generate require output
       -t, --tefile Add input from Existing Type Enforcement file
       -f, --fcfile Existing Type Enforcement file, requires -M
       -v, --verbose verbose output
       -A, --analyze Analyze output
図9 audit2allowのオプション

 SELinuxのことを詳しく知らないユーザーでもallowルールの作成ができますので、今後はSELinuxが原因でアプリケーションが動作しないことが判明した場合には、audit2allowを用いて必要なallowルールを含むモジュールを作成して権限を追加することになります。

 例えば

# audit2allow -M local -i /var/log/audit/audit.log

とすると、local.ppというReferenceポリシーのマクロを用いたモジュールが作成されます。その後、semoduleコマンドを用いて

# semodule -i local.pp

としてモジュールをロードすることにより、SELinuxが原因でエラーとなっていたプログラムを動作させることが可能となります。

 また、その内容に関しては、同じディレクトリにlocal.teというソースが作成されるので参照しておいた方がよいでしょう。図にlocal.teの中身のサンプルを示します。

module local 1.0;

require {
    class chr_file { ioctl read write };
    class dir { add_name getattr read remove_name search write };
    class file { append create getattr read setattr unlink write };
    class sock_file { create setattr };
    type auditd_log_t;
    type initrc_t;
    type locale_t;
    type sshd_t;
    type staff_t;
    type system_crond_t;
    type usb_device_t;
    type user_home_t;
    type var_run_t;
    type var_t;
    role staff_r;
    role system_r;
};

allow initrc_t locale_t:file setattr;
allow initrc_t usb_device_t:chr_file { ioctl read write };
allow initrc_t var_run_t:sock_file { create setattr };
allow initrc_t var_t:dir write;
allow initrc_t var_t:file { setattr write };
allow sshd_t var_t:file { getattr read };
allow staff_t auditd_log_t:dir { getattr read search };
allow staff_t auditd_log_t:file { getattr read };
allow staff_t user_home_t:file { append read setattr write };
allow system_crond_t var_run_t:dir { add_name remove_name write };
allow system_crond_t var_run_t:file { create unlink write };
図10 local.teのサンプル

 audit2allowコマンドを使用する場合には、audit.logをすべて使用してモジュールを作成すると重複が生じたり、エラーが出る可能性がありますので、必要なログを適宜切り出して別途読み込ませるためのファイルを作成した方がよいでしょう。

 SELinuxを使ってみるチャンス

 RHEL5でのSELinuxは、以前のバージョンに比べて新機能を追加し、さらに使いやすさを考慮した拡張がなされています。以前のバージョンのSELinuxで苦労していた点も解消されてきていますので、ぜひ皆さんもRHEL5ではSELinuxを“Enable”にして使ってみてください。

2/2

Index
Red Hat Enterprise Linux 5で始めるSELinux
  Page1
Referenceポリシーの採用
MLS/MCSの実装
Page2
ツール類の充実
SELinuxを使ってみるチャンス

Profile
面 和毅(おも かずき)

サイオステクノロジー株式会社
OSSソリューションセンター
グローバルサービスグループ
グループマネージャー


学生時代よりUNIXに親しむ。1997年からサーバ構築およびセキュリティ全般を扱う仕事に従事、Linuxを使い始める。

現在はLIDSの普及活動に注力。LIDSユーザ会(LIDS-JP)の立ち上げやLIDS関連文書の日本語化、LIDSを用いたシステム構築の紹介などを行っている。また、サイオステクノロジーでビジネス面でのLIDSの普及活動に注力している。

2005年12月より、LIDS Teamに参加し、LIDSの公式な開発チームの一員として活動している。

関連記事
  連載:SELinuxの最新動向
  連載:セキュアOS「LIDS」入門
  SELinux Policy EditorでSELinuxを簡単に
  想像以上?! お隣韓国のセキュアOS事情(前)
  想像以上?! お隣韓国のセキュアOS事情(後)
  ITmedia エンタープライズ:SELinuxの現状:使いやすさの改善が進むSELinux

Security&Trust記事一覧


Security&Trust フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Security & Trust 記事ランキング

本日 月間