某ロ*プの件、一区切りついた。これ以上特に調べる必要はなさそう。
ポイントは
まぁ、要するに、
ということでしょうね。
結論としては、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>
でイケることが判明。よし、まず一歩目をクリア