next up previous contents
Next: 11 ネットワークアクセス制御:allownet Up: SPDL仕様書 ver 2.1. Previous: 9 SELinuxがサポートしないファイルシステムへのアクセス制御: allowfs   Contents

Subsections

10 一時ファイルへのアクセス制御:allowtmp

10.1 なぜallowtmpが必要?

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ともお互いの一時ファイルにアクセスできることを意味 します。一時ファイルに重要な情報が書かれていたら情報漏洩に繋がります。

10.2 allowtmpとは

こういった問題を解決するため、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)を設定しています。

10.3 allowtmpの書式と意味

  1. 書式
    1. allowtmp -dir directory -name label permission;
    2. allowtmp -fs file system name -name label permission; permissionは、ファイルのものと同じです。省略して、ラ ベル付け設定のみを行うこともできます。
  2. 意味
    1. ドメインが、directoryディレクトリにファイルを生成す ると、labelという名前のラベルが付与されます。そして、 そのラベルに対するパーミッションを permissionで指定 します。 permissionは省略可能です。省略すると、パー ミッション設定は別途allow文を使って行うことになります。
    2. これは、xattrをサポートしないファイルシステム上のファイル に対する設定です。今のところ、tmpfsのみのサポートとなりま す。
    3. labelの指定について
      • labelauto のときは、ラベルの名前は、 自動的に名付けられます(ドメインとディレクトリ名か ら生成されます)。例えば、hoge_tドメイン、 directory が /var/の場合は、hoge_var_tという名 前のラベルが生成されます。
      • labelall または *の時は、 directoryディレクトリ以下の、allowtmp設定 によりラベル付けされた全てのファイルを意味します。

  3. 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