第1回 SELinuxのアクセス制御をデータベースでも


海外 浩平
日本SELinuxユーザ会
2007/8/3


 SE-PostgreSQLのアクセス制御を試してみる

 それでは、早速SE-PostgreSQLのアクセス制御の働きを試してみましょう。

 今回はまず導入編ということで、最も設定が簡単なMulti Category Security(MCS)を利用したアクセス制御を行うことにします。準備体操として、少しMCSの考え方に触れておきましょう。

【参考記事】
詳細なMCSの解説は以下の記事を参照してください。
SELinuxの最新動向(6)
新しく追加されたMulti Category Security
http://www.atmarkit.co.jp/fsecurity/rensai/selinux06/selinux01.html

 MCSによるアクセス制御とは

 MCSでは、0個以上のカテゴリの集合同士の包含関係に基づいてアクセス制御が行われます。実際にFedora 7システム上でMCSによるアクセス制御が行われている様子を確認しながら、基本的な事項を押さえていくことにします。

 まず、rootユーザーでログインし、自プロセスのセキュリティコンテキストを表示するid -Zコマンドを実行しましょう。

[root@masu ~]# id -Z
root:system_r:unconfined_t:SystemLow-SystemHigh

 セキュリティコンテキストは“:”で4つのフィールドに分割することのできる文字列ですが、このうち、MCSのアクセス制御に関係するのは、“SystemLow-SystemHigh”の部分だけです。これは実際には「s0-s0:c0.c1023」という文字列ですが、可読性向上のためにmcstransデーモンが別名に変換しています。

 通常の運用では必要ありませんが、ここでは説明のためにmcstransデーモンを停止します。

[root@masu ~]# /etc/init.d/mcstrans stop
Stopping mcstransd:                                                        [ OK ]
[root@masu ~]# id -Z
root:system_r:unconfined_t:s0-s0:c0.c1023

 このように、別名に変換される前の「s0-s0:c0.c1023」が表示されます。この表記の意味は「プロセスは0〜1023番の各カテゴリに属している」です。従って、このプロセスは0〜1023番の範囲の各カテゴリに対するアクセスやカテゴリの変更を許可されています。

 一方、root以外の一般ユーザーの場合、デフォルトではプロセスにカテゴリは付与されません。id -Zを実行すると、以下のように“s0”とだけ表示され、カテゴリが付与されていないことが分かります。

[kaigai@masu ~]$ id -Z
user_u:system_r:unconfined_t:s0

 MCSを使ったアクセス制御の一例を紹介します。

[root@masu ~]# echo 'It is a secret information.' > /tmp/testfile
[root@masu ~]# chcon -l s0:c0 /tmp/testfile
                chconコマンドを用いてファイルのカテゴリを変更
[root@masu ~]# ls -Z /tmp/testfile
-rw-r--r-- root root system_u:object_r:tmp_t:s0:c0       /tmp/testfile

 上記の一連の操作で、/tmp/testfileには“c0”というカテゴリが付与されました。続いて、このファイルをカテゴリに属していない一般ユーザーから参照することにします。

[kaigai@masu ~]$ cat /tmp/testfile
cat: /tmp/testfile: Permission denied

 kaigaiユーザーはカテゴリに属していませんので、当然、“c0”カテゴリを含んではいません。従って、“c0”カテゴリを持つ/tmp/testfileへのアクセスは禁止されます。

 semanageコマンドで権限を修正する

 各ユーザーに付与されるカテゴリは、semanageコマンドによって設定することができます。デフォルトではrootユーザーのみ「s0-s0:c0.c1023」カテゴリが付与され、一般ユーザーには付与されていません。例として、kaigaiユーザーに「s0-s0:c0.c31」カテゴリを付与してみることにします。これは「プロセスは0〜31番の各カテゴリに属している」ことを意味します。

[root@masu ~]# semanage login -a -r s0-s0:c0.c31 kaigai
[root@masu ~]# semanage login -l

Login Name           SELinux User        MLS/MCS Range

__default__              user_u                 s0
root                     root                    s0-s0:c0.c1023
kaigai                    user_u                 s0-s0:c0.c31

 semanageコマンドのloginサブコマンドでは、ログイン時にプロセスに付与するカテゴリを設定/参照することができます。なお、semanageコマンドはそのほかにもいくつかの機能を持っていますが、今回の記事では割愛します。詳細はシステムのmanpageを参照してください。

 上記の設定により、kaigaiユーザーには「s0-s0:c0.c31」というカテゴリが付与されました。先ほどの/tmp/testfileに対してもアクセスを行うことができます。

[kaigai@masu ~]$ id -Z
user_u:system_r:unconfined_t:s0-s0:c0.c31
[kaigai@masu ~]$ ls -Z /tmp/testfile
-rw-r--r-- root root system_u:object_r:tmp_t:s0:c0     /tmp/testfile
[kaigai@masu ~]$ cat /tmp/testfile
It is a secret information.

 さて、これで準備体操は終わりです。上の例では、ファイルに対してMCSのアクセス制御を行いましたが、データベースオブジェクトに対してもファイルと同様のアクセス制御を適用することがSE-PostgreSQLの設計思想であったことを思い出してください。

2/3

Index
SELinuxのアクセス制御をデータベースでも
  Page1
SE-PostgreSQLが目指すもの
リファレンスモニタの考え方をデータベースにも適用する
SE-PostgreSQLを使ってみよう
Page2
SE-PostgreSQLのアクセス制御を試してみる
MCSによるアクセス制御とは
semanageコマンドで権限を修正する
  Page3
各行のセキュリティコンテキストを確認
システムのポリシーに従った行レベルアクセス制御


SE-PostgreSQLによるセキュアDB構築 連載インデックス


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

注目のテーマ

Security & Trust 記事ランキング

本日 月間