kern.maxfiles

最近,FreeBSD の security run output に "+kern.maxfiles limit exceeded by uid 80, please see tuning(7)." なるメッセージを出して httpd がアボートした旨の履歴が頻繁に通知されるようになった。このメッセージは,要するにシステムで参照可能なファイルディスクリプタ数を超過したということらしい。サーバは 500GB の HDD を内蔵しており,ここにこのブログの戯言記事やら,Web 公開コンテンツ,受発信電子メールのみならず,エッチ動画やら私の日頃の煩悩の求めるところのゴミデータもが大量に集積されていて,格納ファイルはただならぬ数に昇っているはずである。さもありなん。もしかすると,サーバ攻撃に晒された影響かも知れない。/phpmyadmin/scripts/setup.php 等の脆弱性に依った php アタックが頻発しているのは,apache22 のログからかねてから知っていた。まあ,Web サーバはとくに大きな支障無く動作しているようなので,放置してもよかったのだが気持ち悪いので少し手を加えることにした。

ファイルディスクリプタが足りないということなので,それを増やしてやる。リブートはなかなかする気になれないので,さしあたり root 権限でコマンドラインから kern.maxfiles の数を増やしてやる。sysctl kern.maxfiles とやると,現在の設定値が表示される。FreeBSD 8.0-RELEASE の場合,12288 だったと思う(控えておくのを忘れた)。これを 65536 に拡張した: sysctl kern.maxfiles=65536。次にサーバを再起動した際にもこれが活きるよう,/etc/sysctl.conf にも kern.maxfiles=65536 の一行を書き足しておいた。

昨日上記対策を行って,昨夜の security run output を確認したが,エラーメッセージは出ていなかった。もし,サーバ・アタックの影響だとしたら,もっと別の構造的要因を探る必要があり,上記のような何倍かに設定値を拡張するような小手先の対策では追い付かないかも知れない。しばらく様子を見ることとする。