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構文を実行したら落ちた」とかいうレポートは大歓迎であります。 (ただ、『機能が入っていない』というのは、まだ勘弁…。)