よたらぼ
自分の興味の赴くままにIT技術系のネタを取りとめもなくメモっています。
Ruby言語やLinuxのネタが多いです。

October 18, 2005 [おもひで]

[Ruby] Dir.globとHikiとSELinuxとApache

SELinuxなApache上でHikiを構築しようとしてみたところ、pluginディレクトリを読み込めないという事象にぶつかった。

よくよく調べてみると、Dir.globがうまく動作していない(要素0の配列[]を返す)。厳密に言うと、cgi-bin/配下がまるまるNGのようだ。

#!/usr/bin/ruby
print "Content-type:text/html\n\n"
puts "
<html><head><title>Hello, Ruby world!</title></head>
<body>
<h1>Hello, Ruby world!</h1>
<hr>
#{Dir.glob("/home/mutoh/WWW/cgi-bin/*").inspect}
<hr>
</body></html>
"

いろいろ調べた結果、cgi-bin配下のアクセス権であるsystem_u:object_r:httpd_sys_script_exec_tが問題で、system_u:object_r:httpd_sys_content_tに変更したらアクセスできるようになった(アクセス権限はls -Zで調べれる)。
#ただ、このアクセス権だと今度はCGIが動かないのでcgi-bin/hiki/plugin配下のみ設定を変更する必要がある。

静的ドキュメントとしてapacheから読み込めるようにするためにはhttpd_sys_content_tを、CGIとして動作させるためにはhttpd_sys_script_exec_t権限が必要。だけどhttpd_sys_script_execに対してはファイルアクセス系が制限される(調べてないけど)っぽい。
まとめると以下のように設定する必要がある。(/home/mutoh/WWW 配下がDocumentRoot)

$ cd /home/mutoh/
  (WWW配下はすべてapacheからアクセスできるようにしておく)
$ chcon system_u:object_r:httpd_sys_content_t WWW 
$ cd WWW 
$ chcon system_u:object_r:httpd_sys_script_exec_t cgi-bin
$ chcon system_u:object_r:httpd_sys_content_t cgi-bin/hiki/plugin

オレの場合、dataディレクトリはcgi-bin配下に置いていないので問題なかった(もともとhttpd_sys_content_t権限を与えていた)が、Hikiの標準的なフォルダ構成のまま使う場合はdata配下等もhttpd_sys_content_t権限に変えなければ動かないかもしれない。

SELinux、おもしろいけど難しいなぁ。きちんと勉強した方が良さそうだな。


編集