第6回 新しく追加されたMulti Category Security

古田 真己
サイオステクノロジー株式会社
インフラストラクチャービジネスユニット
Linuxテクノロジー部
OSSテクノロジーグループ
2006/8/16

 MCSのセキュリティレベルと表記法

 MCSはMLSのサブセットです。従って、MLSゆずりのセキュリティレベルを持っています。先ほどの「s0-s0:c0.c255」の見方を解説します。

 「s0」は「Sensitivity」と呼ばれ、企業における役職の上下を表します。しかし、MCSではこの機能は使われないため、Sensitivityは常に「s0」です。「c0」とか「c255」は「Category」のことで、そのままカテゴリになります。

 図中の「FC5デフォルトの例」は、表記法のサンプルとしては分かりにくいかもしれません。なぜならば、デフォルトのセキュリティレベル(下限、新規にファイルを作成したときに適用される)は「カテゴリなし」になっていて、何も記述されていないからです。

 そこで「分かりやすい例」として、デフォルトのセキュリティレベルにもカテゴリを設定したものを作りました。こちらの方がアクセスのイメージを持ちやすいと思います。

 MCSのアクセスモデル

 図2を使って、MCSのアクセス制御を解説すると以下のようになります。

 自分のカテゴリに属しているものに対してはフルアクセスが可能ですが、自分の持っていないカテゴリが含まれているものにはまったくアクセスできません。また、ファイルにカテゴリを付けないでおくと誰からでもアクセス可能になります。

図2 MCSのアクセス制御の概念図(画像をクリックすると拡大します)

 実際の動作における設定方法

 それでは、実際にMCSを設定してみましょう。

1.ユーザーへのカテゴリの設定と確認方法

 新規にユーザー「john」を追加します。デフォルト(下限)にカテゴリがないと新規作成したファイルに誰からでもアクセスできてしまうので「s0:c0」を設定します。

[root@localhost ~]# adduser john
[root@localhost ~]# id john
uid=10002(john) gid=10002(john) groups=10002(john)
[root@localhost ~]# semanage login -a -r s0:c0-s0:c0.c255 john
[root@localhost ~]# semanage login -l

Login Name   SELinux User   MLS/MCS Range

__default__    user_u        s0
john        user_u        s0:c0-SystemHigh
root        root          SystemLow-SystemHigh

 「s0:c0」だと分かりにくいので、「John」というトランスレーションを設定します【注】。

[root@localhost ~]# semanage translation -a -T john s0:c0
[root@localhost ~]# semanage translation -l

Level        Translation

s0
s0-s0:c0.c255   SystemLow-SystemHigh
s0:c0         john
s0:c0.c255     SystemHigh
[root@localhost ~]# semanage login -l

Login Name   SELinux User   MLS/MCS Range

__default__    user_u        s0
john        user_u        john-SystemHigh
root        root          SystemLow-SystemHigh

【注】
FC5のpolicycoreutils-1.30.10-2.fc5の/usr/sbin/semanageコマンド(実体はpythonスクリプト)にはバグがあるようです。以下のパッチを/usr/lib/python2.4/site-packages/semanage.pyに当ててバイトコンパイルし直すか、semanage.pycとsemanage.pyoをsemanage.pyc.offやsemanage.pyo.offなどのようにリネームしてください。

diff -ur seobject.py.old seobject.py
--- seobject.py.old 2006-07-15 05:11:00.000000000 +0900
+++ seobject.py 2006-07-03 20:54:23.000000000 +0900
@@ -195,8 +195,8 @@

  def save(self):
        (fd, newfilename) = tempfile.mkstemp('', self.filename)
-       fd.write(self.out())
-       fd.close()
+       os.write(fd, self.out())
+       os.close(fd)
        os.rename(newfilename, self.filename)

class semanageRecords:
 

2.新規作成ファイルのカテゴリ確認とカテゴリの変更方法

 トランスレーションの設定も終わりましたので、実際にユーザー「john」でログインして空のファイルを作成してみます。

[root@localhost ~]# ssh john@localhost
Enter passphrase for key '/root/.ssh/id_rsa':
[john@localhost ~]$ id -Z
user_u:system_r:unconfined_t:s0:c0-s0:c0.c255
[john@localhost ~]$ echo TEST > /tmp/TEST_FILE

  作成したファイルをrootユーザー(s0-s0:c0.c255)から確認します。

[john@localhost ~]$ exit
[root@localhost ~]# ls -Z /tmp/TEST_FILE
-rw-rw-r-- john john user_u:object_r:user_home_t:john TEST_FILE
[root@localhost ~]# cat /tmp/TEST_FILE
TEST

 次に、カテゴリを持たないユーザーを作成して、このファイルの中身が見られるかどうか確認してみます。

[root@localhost ~]# adduser jane
[root@localhost ~]# id jane
uid=10002(john) gid=10003(jane) groups=10003(jane)
[root@localhost ~]# semanage login -a -r s0 jane
[root@localhost ~]# semanage login -l

Login Name   SELinux User   MLS/MCS Range

__default__    user_u        s0
jane        user_u        s0
john        user_u        john-SystemHigh
root        root          SystemLow-SystemHigh
[root@localhost ~]# ssh jone@localhost
Enter passphrase for key '/root/.ssh/id_rsa':
[jane@localhost ~]$ id -Z
user_u:system_r:unconfined_t:s0
[jane@localhost ~]# ls -l /tmp/TEST_FILE
-rw-rw-r-- 1 john john 5 Jul 15 05:47 /tmp/TEST_FILE
[jane@localhost ~]$ cat /tmp/TEST_FILE
cat: /tmp/TEST_FILE: Permission denied

 /tmp/TEST_FILEのパーミッションは644ですが、MCSによるアクセス制御によって読めなくなっているのが分かります。このとき、SELinuxのログは以下のように出力されています。

1: Jul 15 05:52:55 localhost kernel: audit(1152910375.418:591): avc: denied { read } for pid=28072 comm="cat" name="TEST_FILE" dev=dm-0 ino=461533 scontext=user_u:system_r:unconfined_t:s0 tcontext=user_u:object_r:tmp_t:s0:c0 tclass=file
2: Jul 15 05:52:55 localhost kernel: audit(1152910375.418:591): arch=40000003 syscall=5 success=no exit=-13 a0=bfd40c02 a1=8000 a2=0 a3=8000 items=1 pid=28072 auid=10003 uid=10003 gid=10003 euid=10003 suid=10003 fsuid=10003 egid=10003 sgid=10003 fsgid=10003 tty=pts3 comm="cat" exe="/bin/cat" subj=user_u:system_r:unconfined_t:s0
3: Jul 15 05:52:55 localhost kernel: audit(1152910375.418:591): cwd="/home/jane"
4: Jul 15 05:52:55 localhost kernel: audit(1152910375.418:591): item=0 name="/tmp/TEST_FILE" inode=461533 dev=fd:00 mode=0100664 ouid=10002 ogid=10002 rdev=00:00 obj=user_u:object_r:tmp_t:s0:c0

 このログでは1行目の「avc: denied { read }」部分で読み込みの拒否が発生しています。そのときのアクセス元のコンテキストは「scontext=user_u:system_r:unconfined_t:s0」、アクセス先のコンテキストは「tcontext=user_u:object_r:tmp_t:s0:c0」、種類は「tclass=file」です。

 つまり、「s0」しか持たないユーザーは「s0:c0」のファイルに実際にアクセスできていないことが分かります。FC5からはMCSのこのカテゴリ別のアクセス制御機能を使ってセキュリティを高めてゆくことが可能となったのです。

 MCSの実運用での生かし方

 企業が、MCSを有効活用できそうな例を2つ挙げてみます。

1.内部統制(従業員評価書類や経理書類)

 重要書類を取り扱うユーザーとメンテナンス作業者を別のカテゴリに分けて登録することで実現できるソリューションです。

 人事評価情報を取り扱うサーバ上で、メンテナンスを行う一般の従業員から、役職者が取り扱う人事評価書類をMCSのアクセス制御によって守ることができます。また、経理書類を取り扱うサーバでは同じくメンテナンス作業者から経理書類を保護することが可能になります。

 メンテナンス作業者が重要書類にアクセスしようとしたかどうかは前述のようにSELinuxのログに出力されます。メンテナンス作業中に「seaudit」などのGUIツールでログをリアルタイムに観察することで、さらにセキュリティ上の安心が確保できます。

2.アプリケーションのテスト(SandBox)

 システム全体とテストしたいアプリケーションファイルとを別々のカテゴリに設定しておけば、新規にテストしたいアプリケーションが不必要な部分に手を加えて不具合を起こす可能性からシステムを保護できます。

 このソリューションの利点はchrootなどを行わなくても、SELinux上で本来のインストールパスにアプリケーションを配置してテストが可能な点です。

 MCSはMLSのサブセットで、カテゴリのみでアクセス制御を行う仕組みです。MCSを使うことで、従来RHELに含まれず、運用・保守も困難だったStrictポリシーでしかできなかったユーザーやグループごとのアクセス制御ができます。また、MCSの設定はコマンドで簡単に行えるので扱いやすく、企業において強力なソリューションとなり得ます。

 次回は、MCSの本来の姿であり、国際基準を満たす強力なセキュリティを実現するMLSを取り上げます。

2/2
 

Index
新しく追加されたMulti Category Security
  Page1
MCSは企業向けのセキュリティ機能
MCSを使うために
MCSで増えた「SystemLow-SystemHigh」という表示
Page2
MCSのセキュリティレベルと表記法
MCSのアクセスモデル
実際の動作における設定方法
MCSの実運用での生かし方


Profile
古田 真己(ふるた まさき)

サイオステクノロジー株式会社
インフラストラクチャービジネスユニット Linuxテクノロジー部
OSSテクノロジーグループ

 学生時代にUNIXマシン欲しさ、触りたさに秋葉原へ通い詰める。秋葉原でAT互換機や中古UNIXマシンの販売などを経て、IT業界に転職。その後Linuxのエンタープライズ分野での性能評価や、構築案件などを経験し、2004年にテンアートニ(現・サイオステクノロジー)入社。RedHat Linuxのサポート業務、構築案件に取り組んできた。

 現在はサイオステクノロジーでSELinuxの調査・研究、ビジネスでの普及活動に注力している。

Security&Trust記事一覧


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

注目のテーマ

Security & Trust 記事ランキング

本日 月間