Next: 11 ネットワークアクセス制御:allownet
Up: SPDL仕様書 ver 2.1.
Previous: 9 SELinuxがサポートしないファイルシステムへのアクセス制御: allowfs
Contents
Subsections
allowtmp は、一時ファイルのアクセス制御のために用意された設定要素
です。その前に、なぜそんなものが必要なのかを見ていきましょう。
SELinuxは、内部的にファイルをファイル名ではなく、iノードで識別しています
(正確にはiノードに関連づけられたタイプラベル)。
seeditは、ファイル名を指定して設定を行いますが、iノード番号が変わって
しまう、もしくは設定時にファイルが存在しない場合(iノード番号が設定時に分
からない)は、うまく動かなくなります。
/var/run, /tmp, /var/tmp等には、そのようなファイルがたくさんあります。
一つ例を見てみましょう。
domain httpd_t
allow /var/run/httpd.pid r,w;
設定時には、httpd_tは、/var/run/httpd.pidに対するr,wパーミッションが許
可されています。しかし、httpdを再起動すると、httpd.pidファイルは消去され、
また同じ名前のファイルが生成されます。iノード番号も変わって
しまっています。そうなると、seedit側では、新しく生成されたファイルを認識
できなくなり、httpd_tはhttpd.pidにアクセスできなくなってしまいます。
次の例です。/tmpにランダムにファイルを生成する場合問題になります。
プログラムA(a_tドメインで動作する)、プログラムB(b_tドメインで動作す
る)があるとします。そして、これらが、/tmp以下にランダムな名前のファイルを作成
するとします(tmpfsシステムコールで一時ファイルを生成した場合に相当しま
す)。
すると、以下のような設定を書かざるをえません。
{
domain a_t;
allow /tmp/** r,w;
}
{
domain b_t;
allow /tmp/** r,w;
}
これは、プログラムA、Bともお互いの一時ファイルにアクセスできることを意味
します。一時ファイルに重要な情報が書かれていたら情報漏洩に繋がります。
こういった問題を解決するため、SELinuxはファイルタイプ遷移という機能を持っ
ています。ファイルタイプ遷移を分かりやすく設定するのがallowtmpです。
ファイルタイプ遷移を使うと、「ドメインAがディレクトリBに生成したファイル」
のようなラベルを付与し、そのラベルを使ってアクセス制御できます。
例です。
domain httpd_t;
allow /var/run r,s;
allowtmp -dir /var/run -name httpd_var_run_t; -(a)
allow httpd_var_run_t r,w; -(b)
(a)では、httpd_tドメインのプログラムが/var/runにファイルを生成したとき、
そのファイルにhttpd_var_run_tのようなラベルを付与します。(b)では、そ
のラベルが付与されたファイルに読み書きできるようにしています。
以下のような省略記法もあります。
domain httpd_t;
allow /var/run r,s;
allowtmp -dir /var/run -name auto r,w;
「/var/runに生成するファイルに読み書き許可」と設定しています。内部的には
先ほどの(a)(b)を設定しています。
- 書式
- allowtmp -dir directory -name label permission;
- allowtmp -fs file system name -name label permission;
permissionは、ファイルのものと同じです。省略して、ラ
ベル付け設定のみを行うこともできます。
- 意味
- ドメインが、directoryディレクトリにファイルを生成す
ると、labelという名前のラベルが付与されます。そして、
そのラベルに対するパーミッションを permissionで指定
します。 permissionは省略可能です。省略すると、パー
ミッション設定は別途allow文を使って行うことになります。
- これは、xattrをサポートしないファイルシステム上のファイル
に対する設定です。今のところ、tmpfsのみのサポートとなりま
す。
- labelの指定について
- label が auto のときは、ラベルの名前は、
自動的に名付けられます(ドメインとディレクトリ名か
ら生成されます)。例えば、hoge_tドメイン、 directory が /var/の場合は、hoge_var_tという名
前のラベルが生成されます。
- labelがall または *の時は、 directoryディレクトリ以下の、allowtmp設定
によりラベル付けされた全てのファイルを意味します。
- 例
domain httpd_t ;
allowtmp -dir /var/run -name auto r,w;
httpd_tが、/var/runにファイルを生成すると、httpd_var_run_tというラベ
ルが付与され、それに対してr,wアクセスができます。
domain httpd_t
allowtmp -dir /var/run -name auto r,w;
domain named_t
allowtmp -dir /var/run -name auto r,w;
domain initrc_t;
allowtmp -dir /var/run -name all r,w;
httpd_tが、/var/runにファイルを生成すると、httpd_var_run_tというラベ
ルが付与され、それに対してr,wアクセスができます(named_tなどはア
クセス不可)。
named_tが、/var/runにファイルを生成すると、named_var_run_tというラベ
ルが付与され、それに対してr,wアクセスができます(httpd_tなどはア
クセス不可)。
initrc_tは、上記のファイルにr,wアクセスができます。なぜなら、-name all
が指定されているからです。
Yuichi Nakamura
2006-12-27