tweet:2013:0902_01
某の件まとめ
某ロ*プの件、一区切りついた。これ以上特に調べる必要はなさそう。
ポイントは
- ApacheでFollowSymLinkを.htaccessでOverrideさせない
- 定番の徳丸さんの記事 http://blog.tokumaru.org/2013/09/symlink-attack.html やっぱりよくまとまっているよなぁ。
- PHPでchrootさせること
- これは決定打の記事がない…
まぁ、要するに、
- 「マルチユーザー」環境で「共用サービス」を提供する場合には「注意すべきこと」がやはり沢山ある
- 今時、共有環境なんて使っていない人たちが多いので既に「忘れ去られている」知識が増えている
ということでしょうね。
結論としては、Apache+suExec+Chrootかなぁ。Apacheの設定を「もう一度点検せよ」かな。
追記 (2013/09/02 13:10)
WordPress利用者はしばしばPermalink設定のために「rewrite」を利用するが、このrewriteを使うにはFollowSymLinkが生きていないといけない模様。(ダメぢゃん)
で、回避策はと探してみたら、Apache本家の Apacheコア機能 の中に、
SymLinksIfOwnerMatch シンボリック先のファイルまたはディレクトリが、 シンボリックリンクの所有ユーザ ID と同じ場合にのみシンボリックリンクを たどれるようにします。 注 <Location> 内にこのオプションを 指定しても無視されます。 このオプションはセキュリティの強化にはなりません。 なぜなら symlink の検査はレースコンディションを引き起こす可能性があり、 そのため回避可能になるからです。
を発見。って、Securityの強化にならないとな。これもダメか?というか、なんでURL rewriteでSymlinkが必要なんだよ?
追記 (2013/09/02 13:20)
で、WordPress側を調べてみた結果、以下が判明
- WordPresssでrewriteに対応するために設定しているhttpd.confの以下の部分を変更する
##### 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>
- これで、FollowSymlinkもSymLinksIfOwnerMatchもOffにして、rewrite出来るようになった。
というわけで、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>
でイケることが判明。よし、まず一歩目をクリア
tweet/2013/0902_01.txt · 最終更新: 2013/09/02 01:00 by 127.0.0.1