例によって作業メモ…

ホームディレクトリのサポート

ホームディレクトリのサポートを忘れてた。
例えば,httpd_tに,public_htmlのアクセスさせたい場合
allow /home/<ユーザ名>/public_html r,s;
をユーザーの数だけ書く必要がある。。100人ユーザがいたら100行(^^;
AppArmorばりに,
allow /home/*/public_htmlという書式をサポートしたいのだが、
これはかなり大変そうなので、
とりあえず、
allow ~/public_html r,s;
という書式をサポートしようと考えた。
~/とすると、ホームディレクトリ(/home/ユーザ名)を表す(root除く)

で、実装開始してみたが、これがまた思った以上に大変…
genhomedirconを駆使して実装してみた。
~で始まるファイル名がある場合は、homedir_template
に、タイプ付けを出力。
で、genhomedirconで、file_contexts.homedirsを生成。
makediffrelabel用に、file_contexts,file_contexts.homedirsをくっつけたファイルfile_contexts.allを作成。
file_contexts.homedirsから,/rootに関するエントリを消去。。
てな感じでやっていったが、
make diffrelabelがうまくいかないことに気づいた。
fcdiff.tmpが以下のようになって、restoreconで読み込めない。
/home/[^/]*/public_html
だが、
[^/] -> *に置き換えればrestoreconで読み込める。
つまり、
restorecon /home/[^/]*/public_html -R は駄目だが,
restorecon /home/*/public_html -R
はうまく動く。
結果,
domain httpd_t
allow ~/public_html/** r,s;
で、ユーザのホームページを公開できるようになった。
がこの書式には、問題がある。
「/home/ynakam/public_html」だけアクセスという設定ができない。
root以外のユーザのホームディレクトリが同じとみなされてしまう。
つまり,
allow /home/ynakam xxxx
と特定のユーザのホームディレクトリを指定して設定しても、無効にされてしまう。
これの修正はすごーく大変そうなので、やめとこう。
まだ問題があって、
ディレクトリの「dir:search」の自動許可もうまく動かないはず。。。

その他

seedit-converterの-oオプションは、出力ディレクトリに。
generated.conf(マクロ展開前のpolicy.conf), file_contexts, homedir_template, customizable_types unconfined_domains
が出力される。

明日こそ、ドキュメント書きやろ。。