バリューサーバーでシンボリックリンクを使用したサイトが突然使用不可能になった。
2月に入ったくらいから、バリューサーバーでシンボリックリンクを使用するサイトが突然「500 Internal Server Error」表示になって使用できなくなってしまいました。
バリューサーバーはマルチドメイン、マルチサイトに対応しています。
自分のアカウントディレクトリ上に特定のルールに沿ったディレクトリを作成することで各ドメインのホームディレクトリとすることができます。
また、ヘルプ類からは特に見つけることはできませんでしたが、この時作成するディレクトリはシンボリックリンクでもOKです。(でした。)
ホームディレクトリの外部にサイトデータを置いてシンボリックリンクで該当ディレクトリにリンクすると簡単にサイト構築することが出来るため、PHPフレームワークを使用する際などこの方法で構築をしていました。
(デフォルト設定ではシンボリックリンク先の参照が許可されていないため、ユーザー側で.htaccessファイルに「Options +FollowSymLinks」の一文を追加する必要がありました)
しかし、どうやら最近ユーザー側での「Options +FollowSymLinks」オプションの指定が無効になってしまい、そのせいで上記のエラーが出てしまっているようです。。
その代わり、Apache側のデフォルトでシンボリックリンクを有効にしたらしくFollowSymLinksオプションをコメント化すればそのまま使用可能になりました。
これは1月下旬に発生したバリューサーバーのクラッキング(ハッキング)事件の対策の一貫なのでしょうか?
それともタダのメンテナンス?
このクラッキング事件、なるべく表沙汰にしたくない風な雰囲気がビシビシ伝わってきて、対策内容もユーザー側にはほとんど知らされていません。メールも来ません。
ただのメンテナンスだとしても、設定値の仕様が変わるなら一言くらい教えて欲しいです・・・
同じ目にあっている方がいらっしゃったら、.htaccessに記述されているシンボリックリンクのオプションをを使わない形に変更してみて下さい。
なんで1週間もたった今こんなこと書いてんだよ。今更だよ!と言う感じもしますが、バリューサーバーの運営元であるデジロック社は今やGMO傘下。
リアルタイムで推測を書くと、GMOには「株価が!責任とってくれるのか!?」とか言って怒り出す、沸点の低い人がいましたね。
(そうですよ。ロリポップ攻撃の時の社長さんのことです)
まあ、1週間も経ってしまえばPVも伸びることは無いだろうとメモ代わりに書いている感じです。
自分の予想では、今まで
- ルート・・・記載なし
- .htaccess・・・FollowSymLinksでのシンボリックリンク参照を許可
だったのが
- ルート・・・SymLinksIfOwnerMatchを有効に
- .htaccess・・・FollowSymLinksでのシンボリックリンク参照を拒否
となったのでは無いかなと思います。
FollowSymLinksとSymLinksIfOwnerMatchの違いは
- FollowSymLinks・・・無条件でシンボリックリンクを許可
- SymLinksIfOwnerMatch・・・シンボリックリンクの持ち主とリンク先の持ち主が同一の場合許可
なので、当然後者のほうが安全です。パフォーマンスは悪いみたいですけど。
ちなみに、FollowSymLinksが無効になってしまった理由は、シンボリックリンク攻撃への対処だと思われます。
シンボリックリンクは柔軟で便利ですが,それ故に危険性を孕んでいます。その危険性はかなり前から言われていることではありますが、
- 書き込み権限があればシンボリックリンクは作れる。
- 自分にアクセス権限が無いファイル/ディレクトリに対してもリンクを張ることが出来る。
- リンク先は必ずしも実体として存在する必要は無い。
この3点が有名なところです。
その中でもレンタルサーバーの場合は2.の仕様が大きく影響してきます。
UNIX/Linuxには大きく分けて「所有者/グループ/すべてのユーザー」の3つの属性に対してパーミッションの設定を行います。
所有者は自分のアカウントのことです。
グループはレンタルサーバーの場合、そのレンタルサーバーを使用しているユーザーは同じグループになります。
すべてのユーザーは自分とレンタルサーバー上のユーザーを除く全てです。Apacheもここを見ます。
各アカウントごとのディレクトリは、同一グループの他のユーザーから見えることを防ぐためおそらく701「rwx/-/x」などとなっていることでしょう。
上記のような場合、他ユーザーのファイル「hoge.php」の中身が見たくてそのパーミッションが644「rw/r/r」であろうと推測される場合、
「ln -s ../../他ユーザーのアカウント/html/hoge.php hoge.txt」
と言うシンボリックリンクを張る事によって、Apache経由でそのファイルの中身をテキストファイルとして覗けてしまうわけです。
直接そのファイルのソースを見る権限は無いにも関わらず、です。
そしてそのソースを足がかりにして、ログファイル、設定ファイル、データベースの名前を知り、あるものは覗き見し、あるものは書き換え・・・
・・・・・・やり方としては単純で原始的ですが、これも立派なクラッキング(ハッキング)ですね。
これがシンボリックリンク攻撃の仕組みです。
当然、犯罪です。
逆に言うと、FollowSymLinksを用いたサイト構成が可能だったバリューサーバーは、今までこれができていた可能性があると言うことです。
こ・・・怖い。
あ・・・足が震えてきましたね。
気軽にレンタルサーバーが格安(や無料で)借りられる時代ではありますが、こう言うセキュリティ面についても常に頭の片隅で考慮しておくことは必要かと思います。
何事も絶対安全ということは無いですからね。