COPY TO/COPY FROM

SE-PgSQLのやり方では、それぞれSQL構文毎にアクセス制御用のコードを記述する必要がある。なので、開発中の現バージョンではアクセス制御が効く構文と効かない構文がある。

というか、今日作ったCOPY TO/COPY FROM以外はまだアクセス制御は効いていないw

なので、実際に動かしてみると以下のような感じになる。COPY TOは、指定したテーブルの内容を標準出力や何かファイルにダンプするためのコマンドで、意味的には'*'指定・条件なしのSELECT文と同じ。

postgres=# select * from mytest;
 id | name  | price |        security_context
----+-------+-------+---------------------------------
  1 | water |   110 | user_u:object_r:unconfined_t:s0
  2 | coke  |   120 | user_u:object_r:unconfined_t:s0
  3 | wine  |   360 | user_u:object_r:unconfined_t:s0
  4 | juice |   120 | user_u:object_r:unconfined_t:s0
  5 | beer  |   240 | user_u:object_r:unconfined_t:s0
(5 rows)

postgres=# copy mytest to stdout;
ERROR:  SELinux access denied
(ここでpermissive modeに切り替え)
postgres=# copy mytest to stdout;
1       water   110
2       coke    120
3       wine    360
4       juice   120
5       beer    240
(※) security_context行を隠す修正を入れている

これを見る限り、一応アクセス制御は効いているようだ。ただ、ポリシーをまだ書いていないので、これはテーブルレベルでアクセスが弾かれているだけで、行レベルのアクセス制御が効いているかどうかをきちんと確認できているわけではない。

で、なんでマイナーなCOPY TO/COPY FROM構文のコーディングを先にやったかと言うと、initdbでこの構文が使われているために、security contextを正しくハンドリングできるようにしないと、そもそもセットアップすら不可能になるからだ。

まだバグバグで未完成極まりないが、コードを覗いてみたい人は以下のようにリポジトリをチェックアウトすることができる。

% svn co svn://kaigai.myhome.cx/sepgsql hoge
% cd hoge
% autoconf
% ./configure --enable-selinux --enable-debug

手元でいじってみて「....のSQL構文を実行したら落ちた」とかいうレポートは大歓迎であります。 (ただ、『機能が入っていない』というのは、まだ勘弁…。)