第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構築 連載インデックス |
- Windows起動前後にデバイスを守る工夫、ルートキットを防ぐ (2017/7/24)
Windows 10が備える多彩なセキュリティ対策機能を丸ごと理解するには、5つのスタックに分けて順に押さえていくことが早道だ。連載第1回は、Windows起動前の「デバイスの保護」とHyper-Vを用いたセキュリティ構成について紹介する。 - WannaCryがホンダやマクドにも。中学3年生が作ったランサムウェアの正体も話題に (2017/7/11)
2017年6月のセキュリティクラスタでは、「WannaCry」の残り火にやられたホンダや亜種に感染したマクドナルドに注目が集まった他、ランサムウェアを作成して配布した中学3年生、ランサムウェアに降伏してしまった韓国のホスティング企業など、5月に引き続きランサムウェアの話題が席巻していました。 - Recruit-CSIRTがマルウェアの「培養」用に内製した動的解析環境、その目的と工夫とは (2017/7/10)
代表的なマルウェア解析方法を紹介し、自社のみに影響があるマルウェアを「培養」するために構築した動的解析環境について解説する - 侵入されることを前提に考える――内部対策はログ管理から (2017/7/5)
人員リソースや予算の限られた中堅・中小企業にとって、大企業で導入されがちな、過剰に高機能で管理負荷の高いセキュリティ対策を施すのは現実的ではない。本連載では、中堅・中小企業が目指すべきセキュリティ対策の“現実解“を、特に標的型攻撃(APT:Advanced Persistent Threat)対策の観点から考える。
|
|