最新更新日 2001.07.16.
更新項目  「セキュリティレベル」って言うのは随分昔から有ったみたいです。

セキュリティレベルってなんやねん?
 私も詳しくは知りません。いつの頃からか、多分、4.1-RELEASE からだと思いますが、カーネルに「セキュリティレベル」と言うのが付きました。インストール時インストールが終わって各種設定の所で、「セキュリティレベルはどれにしますか?」と出てきますよね。ユーザから見たモノ的にはあんな感じです。

 はかま^H^H^Hカードバスの 古田さん から教えていただきました。「セキュリティレベル」自体は随分昔から有ったようです。4.4BSD 由来の機能だそうです。
#インストール時に聞いて来るようになったりしたのはこの 4 系バージョンからなので、私もこのバージョンから知りました。

 ただ単にセキュリティと言っても、ネットワークデーモンを起動するしないの安全の確保の他に、ファイルシステムの安全(mount 時に ReadOnly Mount するとか)であるとか、デバイスに対して読み書きを禁止するであるとか、いろいろあると思います。

 FreeBSD ではそー言ったモノをカーネルレベルで考慮しようと言う機構が新たに追加されました。

 大まかにみると、jman init とすれば、各セキュリティレベルの説明が書いて有ります。以下抜粋です。

----------------
     カーネルは 4 種類のセキュリティレベルで走行します。どのスーパユーザプロセ
     スもセキュリティレベルを上げることができますが、レベルを下げることができ
     るプロセスはありません。セキュリティレベルは以下のように定義されます:

     -1    常に危険なモード - システムは常にレベル 0 モードで走行します。これ
           は初期値のデフォルトです。

     0     危険なモード - 変更不可 (immutable) フラグや追加のみ (append-only)
           フラグは無効にされます。全てのデバイスは、そのパーミッションに従っ
           て読み書きされます。

     1     安全なモード - 変更不可フラグや追加のみのフラグは変更されません。マ
           ウントされたファイルシステムのディスクおよび /dev/mem や /dev/kmem
           は read-only となります。

     2     安全度の高いモード - レベル 1 のモードの効果に加え、ディスクはマウ
           ントさていようといまいと、( mount(2) を除き) 常に read-only となり
           ます。このレベルは、ファイルシステムをアンマウントして変更を加える
           ことを不可能にします。また、システムがマルチユーザで走行中に
           newfs(8) を実行することも出来なくなります。

     初期のセキュリティレベルが -1 だった場合、 init はセキュリティレベルを変
     更しません。それ以外の場合、シングルユーザモードではレベル 0 で、マルチユ
     ーザモードではレベル 1 で、システムは動作します。マルチユーザモードにおい
     てレベル 2 でシステムを走らせたい場合は、シングルユーザの状態の間に、つま
     り、 /etc/rc の中で sysctl(8) を使って、変数 ``kern.securelevel'' に必要
     なセキュリティレベルの値を設定します。
----------------
 と、言う事で、上記を値を参考にしてカーネルレベルで各種フラグやデバイス、ファイルシステムを書き込み不可状態に変更してから boot する様になります。

 このレベルを上げた場合、サーバマシンなどでは危険にさらされている分だけ非常に有効な手段となる場合があります。しかし、例えばデスクトップな PC でセキュリティレベルを 1 に上げると、/dev/mem や /dev/kmem は書き込み不可状態になります。これは、X が起動出来ない状態になります;-)。まぁ、フツーの人はこの時点で大あわてでねすね;-P。

#さ、この辺りから文章が今まで通りになって行く;-P。  このセキュリティレベルの変更は /erc/default/rc.conf 内に、

----------------
kern_securelevel_enable="NO"    # kernel security level (see init(8)),
kern_securelevel="-1"	        # range: -1..3 ; `-1' is the most insecure
----------------
 こう言う設定があるのですが、これで変更できます。これは、インストール後の環境設定で、セキュリティレベルを「高い」に設定すると /etc/rc.conf に記述されます。

 もしくは、自分で変更して、 YES にして securelevel を 1 とか 2 にする事も当然出来ます。よりセキュアなマシンが出来ますね。

 これとは別に sysctl と言うコマンドがあり動的に変更できます。現在のセキュリティレベルを知る為には

----------------
# sysctl kern.securelevel
kern.securelevel: -1
----------------
と、root で叩けば良いです。またもし、変更するなら、
----------------
# sysctl -w kern.securelevel=1
kern.securelevel: -1 -> 1
----------------
 などとすれば、レベルが 1 になります。ただ、ここで問題が発生します。発生した時点でもう大変な事になります;-)。大事な所です。通常セキュリティレベルが -1 なので、「じゃ、1 にしてみんべ。」などと思い、気安く sysctl -w kern.securelevel=1 等と叩いてしまった日にゃぁ・・。しくしく。あぁら不思議・・。以降、リブートしたら X は立ち上がらないは動作が厳しいわ、カーネルが作れないわで、デスクトップ環境ではしくしく。状態です。

 んでもって、「じゃ、しゃーねっぺ。レベルを下げるべ。」などと思って今度は sysctl -w kern.securelevel=-1 などとしてもねあぁら不思議。下がらないのですね。しくしく。これは困ったちゃんだ・・。

 いやぁ、私は焦った焦った・・(^^;;。web とかでいろいろあさりましたよぉぉ。したら、init プロセスが起動する前(この言い方はたんま正しくない?;-)のシングルユーザモードの時にのみハイレベルからローレベルに移行できる。と、言う事を知りました。

 んだば、と思い、シングルユーザでブートして、sysctl -w kern.securelevel=-1 だとか、sysctl kern.securelevel を打ちまくった所、ふぅぅ。なんとか、-1 に変更出来て無事にブートしました。良かったです。はい。

 リクツとしては、クラックされて FreeBSD サーバが乗っ取られた時、この設定を動的に変更できてしまったら全然ご利益無いやんけ。的な発想みたいです。ま、まさしくその通りなんですけどね;-)。

 と、言う事でこの辺りが全然解らない人は手を出さない方が良いと思われるカーネルパラメータですね(^^;;。

・ポートスキャン対策
 他のカーネルオプションを見てみると、net.inet.tcp.log_in_vain 等と言うのがあります。これは、自分のマシンで開けていない port に対してアクセスが有った時に syslog に吐き出す様にする設定です。

----------------
# sysctl -w net.inet.tcp.log_in_vain=1
net.inet.tcp.log_in_vain: 0 -> 1
# sysctl -w net.inet.udp.log_in_vain=1
net.inet.udp.log_in_vain: 0 -> 1
----------------
 普段は 0 ですが、1 にすると有効になります。これはセキュリティレベルと違っていつでもどっちにでも変更が可能です;-)。1 を設定すると、以下の様なログが吐き出される様になります。
----------------
Jan 19 23:36:01 nora /kernel: Connection attempt to UDP 127.0.0.1:512 from 127.0.0.1:1236
Jan 19 23:36:02 nora /kernel: Connection attempt to TCP 127.0.0.1:1110 from 127.0.0.1:3021
----------------
 IPv6 のログも吐き出されるのでどうぞご安心を;-)。ただ、一つ問題なのが、localhost からのアタックもログとして出力してしまう点です。DNS が立ち上がっていたりした時には結構ログが吐き出されます。ま、自分の趣味で設定してみてください。

・他にもいろいろ・・。
 FreeBSD のドキュメントとしてこれらが書かれたモノが存在しています。例えば

http://www.freebsd.org/~jkb/howto.html

 等があります。カーネルパラメータだけで無く、例えば telnet とか ftp であるとかの /etc/inetd.conf の設定方法であるとか、それに伴う syslog.conf の設定に付いても書かれています。読んでみるとなかなかためになるモノが多いです。ただ、英語の為ちょっととっつきにくいですけどね(^^;;。

 このページは、カーネルのセキュリティレベルって何?的要素もあるのですが、実質的には X が立ち上がらないよぉぉ。的人の対策のページとして書きました。あれれ;-P。

 と、言う事ですが、自分のマシンは自分で守りましょう;-)。



Copyright (c) 1997-2004 takachan@running-dog.net All Rights Reserved.