SELinux+CentOS5+Apache2+PostgreSQL8 そのいち

を試してみようひゃっほーい。

というわけで無能の入れ替え先予定の鯖に久しぶりに手入れ。
せっかくだからpermissiveな状態とは言え、SELinuxで遊んでみようと思ったわけです。


CentOS5、つまりFedora5以降に関してはSELinuxもサンプルポリシーを有しておりだいぶ楽になってきたって話なんで。

よーしやってやろうじゃねぇか。

まずはFTPを開けましょう。とりあえずvsftpdブチ込んで、いつものようにlocal_userをchrootするように。
chrootリスト利用をYESにして~hogeにetc切ってlocaltimeブチ込んでおしまい。
anonはのきなみdisable。

ftp localhost~~

OOPS!

ホームディレクトリにchrootできねぇって怒られました。SELinuxでのトラブルシュートの基本。vsftpdの設定を間違えたのか、SELinuxのせいなのかを特定するため、エラーが出たら即座に

setenforce 0

これでSELinuxを無効。再度ログインテスト。OK、問題なし。てことでSELinuxのせい。

getsebool -aでサンプルポリシーがとってこれるので、これをgrepでftpあたりでひっかけてみる。

ftp_home_dir –> off

それっぽいの発見。つまり、/homeのユーザーディレクトリにftpd_tのラベルがついてねぇってことですね。

setsebool -P ftp_home_dir on

でもっかいログイン。はいOK。

次はapache。デフォルトのラベルでは/var/www/html以下にしかhttpd_tが付与されていません。
このへんはポリシーデザインのソース見ると分かるんだけど、初見であそこ見に行くやつなんているかヴォケェ!

virtualhostをいくつか切るので、/home/hogehogeに適当なディレクトリを切って、そこをDocumentRootに割り当ててみる。
httpd graceful

超怒られる。setenforceでSELinuxのせい、を確定させたら手順一緒。

getsebool -a | grep httpd
httpd_enable_homedirs –> off
どう見てもお前だよねwwwww

setsebool -P httpd_enable_homedirs on

はいはいgraceful~~~~。

超怒られる。あっれぇぇぇぇ?
cat /etc/selinux/targeted/modules/active/homedir_template を眺めてみると、httpd_tが付与されるのはどうやらwww,web,public_htmlをアタマにしてないといけない臭い。
知るか阿呆。

適当にその辺の名前をつけてやる。public_htmlが最近あまり好きじゃなくなってきたので(どういう心境かは自分でもよくわからないw)webとかきっときゃいいか。
htmlとかhtdocsとかvhostとかvirtualとかそのへんもダメなんだね。お仕着せ仕様を我慢して使えということか。テンプレートとか書き変えたら後々のアップデートがウザそうなので却下。
SlackwareやPlamoやBSDならガンガン書き換えるのだけど、rpmはその点非常に怖い。
時々.rpmsaveで新confを置くんじゃなくて無理やり新conf置き換えるバカとかいるから。

さらに怒られる。あっるぇぇぇぇぇぇぇ?
しばし調べる。

restorecon -R /home

どうもこれが足りなかった様子。新しく作ったディレクトリを反映させるにはタイプラベルの再構築が必要ってことですね。

はいこれでapacheが起動。
htmlを置いてみる。問題なーし♪
cgi-binを切ってテスト用のcgiを置く。InternalServerError。が、沙耶さんあわてません。

よく考えたらそもそもがですね。

httpdのrpmってsuEXECが効いてる上にsuEXECの実行許可でてるのが/var/www以下のみという素敵仕様だったのを思い出したからです。

思い出す前にどうにか汁という話ではありますが。suEXECは古典的ながらかなり嫌がらせしっかりとした性格なのでシンボリックリンクでごまかすわけにもいきません。
ftpのログイン先からシンボリック張るしかなさそうですね。

つことで

/home/hoge/web/eden.dyndns.tv–>/var/www/html/vhost/eden.dyndns.tv

みたいな感じに。restoreconして再起動。cgi動いたー。わーいわーい。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です