New security policy for SE-PostgreSQL

SE-PostgreSQL向けのポリシーを、selinux-policyパッケージ(Fedoraの標準)に入れ込むための議論をしている。
http://marc.info/?t=120289541400001&r=1&w=2

従来の SE-PostgreSQL のポリシーでは、SQL関数(db_procedure)に対してちょっとした小細工をしていて、

DBA(データベース管理者)がSQL関数を定義 → sepgsql_proc_t
非DBAがSQL関数を定義 → sepgsql_user_proc_t

のように、type_transitionルールを定義している。
これの意図は、うっかりDBAの権限でユーザ定義SQL関数を実行してしまわないこと。
悪意のあるユーザが、間違えてDBAが実行しそうな名前で予めSQL関数を仕込んでおけば、いつかその関数が呼び出され、情報漏洩に繋がるかもしれない。

で、この辺のポリシーに対して Chris が「template使ったらよくね?」とコメント。
言われてみたら確かにそうだ。まさに『その発想はなかった』である。

で、その様にするパッチを投稿してみた。
http://marc.info/?l=selinux&m=120488325030950&w=2
例えば、postgresql_userdom_template(staff) とすると、以下のタイプが定義される。

  • sepgsql_staff_table_t
  • sepgsql_staff_proc_t
  • sepgsql_staff_blob_t

staff_t はこれらのDBオブジェクトに対し、relabel以外の操作を実行可能である。また、従来から存在する sepgsql_ro_table_t (読込み専用) や sepgsql_fixed_table_t (更新禁止)には、文字通りの制約された権限が適用される。

Fedoraでホームディレクトリをラベリングするのと同じ方法ではあるが、なるべく情報資産を分割して管理するという観点からは良い方法だ。