某ロ*プの件、一区切りついた。これ以上特に調べる必要はなさそう。
ポイントは
まぁ、要するに、
ということでしょうね。
結論としては、Apache+suExec+Chrootかなぁ。Apacheの設定を「もう一度点検せよ」かな。
WordPress利用者はしばしばPermalink設定のために「rewrite」を利用するが、このrewriteを使うにはFollowSymLinkが生きていないといけない模様。(ダメぢゃん)
で、回避策はと探してみたら、Apache本家の Apacheコア機能 の中に、
SymLinksIfOwnerMatch シンボリック先のファイルまたはディレクトリが、 シンボリックリンクの所有ユーザ ID と同じ場合にのみシンボリックリンクを たどれるようにします。 注 <Location> 内にこのオプションを 指定しても無視されます。 このオプションはセキュリティの強化にはなりません。 なぜなら symlink の検査はレースコンディションを引き起こす可能性があり、 そのため回避可能になるからです。
を発見。って、Securityの強化にならないとな。これもダメか?というか、なんでURL rewriteでSymlinkが必要なんだよ?
で、WordPress側を調べてみた結果、以下が判明
##### WPのサイトに記載されている標準 <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> ##### 修正後 <IfModule mod_rewrite.c> RewriteCond $1 ^(index\.php)?$ [OR] RewriteCond $1 \.(gif|jpg|ico|css|js)$ [NC,OR] RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^(.*)$ - [S=1] RewriteRule . /index.php [L] </IfModule>
というわけで、Symlink問題は
AllowOverride None Options ExecCGI <IfModule mod_rewrite.c> RewriteCond $1 ^(index\.php)?$ [OR] RewriteCond $1 \.(gif|jpg|ico|css|js)$ [NC,OR] RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^(.*)$ - [S=1] RewriteRule . /index.php [L] </IfModule>
でイケることが判明。よし、まず一歩目をクリア