PostgreSQLでCOPYを使う時のSELinux設定を教えてもらった
- kazuhisa1976
- 9471
- 0
- 1
- 0
@kazuhisa1976 PostgreSQLがpostgresql_t というドメインで動いているはずです(ps axZ|grep postgres)。このドメインがファイルを open search getattr できるディレクトリでなければファイルを読むことが出来ません
2012-07-19 20:16:31@kazuhisa1976 初め、HOMEDIR にファイルを置いていました。ここを postgresql_t が参照することはできません。確認方法は「sesearch -A -C -s postgresql_t -t user_home_t -c file」
2012-07-19 20:18:20@kazuhisa1976 ディレクトリの search 権限が与えられていないため、Permission Denied となっていました。さらに初めにログが抑止されているかも、といった通りディレクトリに対するログ抑止の設定が入っていました。
2012-07-19 20:24:46@kazuhisa1976 具体的には /home/USER が持つ user_home_dir_t に対する拒否ログ抑止です。確認方法は sesearch --dontaudit -s postgresql_t -t user_home_dir_t
2012-07-19 20:25:36@kazuhisa1976 semaange dontaudit off して貰うことで解決することで解決が早まったはずなのですが、なぜログ出力が回復しなかったかは不明です。。
2012-07-19 20:26:35@kazuhisa1976 postgresql_t からファイルを読めるようにする一番早い方法は既にアクセス許可が与えられているファイルコンテキスト(ラベル)を与えるです。
2012-07-19 20:28:41@kazuhisa1976 /var/lib/pgsql/data への移動 & restorecon がまさにそれで、postgresql_t が参照できる postgresql_db_t のファイルコンテキストを hogehoge.csv に与えました。
2012-07-19 20:30:13@kazuhisa1976 こうすることで、PostgreSQL のデーモンが CSV ファイルを読み込めるようになった。というわけです。
2012-07-19 20:30:47@ishikawa84g 今回はcsvファイルが毎日更新されるのですが大丈夫でしょうか?ディレクトリに対してアクセス権を与えることができますかね?
2012-07-19 20:30:09@kazuhisa1976 /home 以下に取得し続ける場合はポリシーを自作追加する必要があります。また、セキュリティ的に弱くなります。
2012-07-19 20:31:35@kazuhisa1976 おすすめはどこかに新規のディレクトリを作り、postgresql_db_t を与えるのが良いと思います。
2012-07-19 20:32:04@kazuhisa1976 たとえば、mkdir /csv ; semanage fcontext -a -t postgresql_db_t "/csv(/.*)?" ; restorecon -RFv /csv
2012-07-19 20:32:46@ishikawa84g なるほど。/home以外のディレクトリを作成してそこにファイルを置くようにすべきということですね。
2012-07-19 20:33:01@kazuhisa1976 ですね。/home はそもそも見れないので諦めるかヒャッハー!!キョカダー!!と許可するしかないです。
2012-07-19 20:33:42@kazuhisa1976 こうしている理由は、PostgreSQL が乗っ取られた場合、権限のないファイルを読ませないようにするためです。psql の中からファイルオープンコマンドが使えますので、SELinux ではこれの影響範囲を絞りたいと考えています。
2012-07-19 20:35:18@ishikawa84g お、今/csvをls -Zで確認してみたら system_u:object_r:postgresql_db_tになってますね。
2012-07-19 20:35:30これとぅぎゃっておいたら役に立つ?<PostgreSQL が CSV ファイルを読めない件( vs SELinux)
2012-07-19 20:37:16@ishikawa84g おおお。/csvにhogehoge.csvをコピーして取り込むとうまく行きました!これが正しい姿なのですね!
2012-07-19 20:38:17@ishikawa84g 初めてSELinuxの設定を行いました。実行中のプログラムが何のラベルを使ってるかはps axZコマンドで確認して、適切なファイルやフォルダにsemanageでラベルを付けていくという感じでしょうか?
2012-07-19 20:40:47