読者です 読者をやめる 読者になる 読者になる

かとじゅんの技術日誌

技術の話をするところ

堅牢なUNIX環境を作るためのポイントについて

といっても、観点は改ざん防止やネットワークからの侵入を検知するとかいろいろあるが、

まず、この件を再発防止する方法を考えてみたい。

Mavenを使っていてLinuxのOSを破壊したので書いておく。

このようなリスクを回避したり、最小化できる堅牢な環境を作るにはどうしたらよいか。
いわずもがな、まずはBackupは定期的に行うことが必要。おすすめはストライピング以外のRAID。最近はオンボードソフトウェアRAIDが安価に使える。これは予算に合わせて考える。Backupはバッチタイムなので、当然救済できないデータというのがあるので、最終奥義として考える。RAIDも万能というわけではない、ハードウェアトラブルでディスクがどうなってしまうかわからない。念には念をでAmazon S3みたいな外部ストレージにバックアップデータを退避させておくとよいかもしれない。


今回の場合は、RAID構成だったとしても、rm -fr /libということなので、救いようがないw
ということで、まずオペレーションとアプリケーションのユーザやファイルやディレクトリのパーミッションなどでできることを考えてみよう。

rootでのオペレーション

  • オペレーションでrootになりたい場合は、su - せずにsudo ls -alのようにsudoコマンド経由で実行する。さらに、ユーザ毎にrmコマンドなどの危険なコマンドを制限するなどしよう。sudo rm -fr /しても安心。ということはない。無設定だと泣きを見ることになる。

システムファイル、設定ファイルの削除を防ぐ

システムファイルなど重要なファイルの削除を防ぐため、sudoでの利用を制限する。UNIXでは、ファイルの削除を行うコマンドとして、rmがよく知られている。

sudo su -も実は危険ですw

sudo は通常、自分が明示的に実行したコマンドしかログに 記録しないことに気を付けてほしい。 ユーザが sudo su
とか sudo sh
とか いったコマンドを実行した場合、そのシェルから続いて実行されるコマンドは 記録されないし、sudo によるアクセス制御もそういったコマンドに 及ばないことになる。 シェル・エスケープを提供するコマンドについても (たいていのエディタが それに含まれる) 同じことが言える。

  • rmコマンドをaliasで別のコマンドに置き換える。rootで実行した時のリスクを回避するってことです。

alias rm='rm -i'こういう初期設定をよく見かけるが、yを気軽に入力してしまうので、あまり意味がないw
このように別のスクリプトに置き換えてしまうのがよい。

rmで誤ってファイルを消去しまうときがあります。
そこで、rmに仮想ゴミ箱機能を追加しましょう。

ユーザとパーミッション

  • デーモンなどのアプリケーションは極力root権限で起動させない。専用ユーザを作ってそのユーザで起動するようにする。専用ユーザで起動してもそのユーザで作ったデータがさっくり消えたとか壊れたとかってのはもちろん痛いが、rootでOS全体に被害が及ぶのは避けたい。
  • 削除されて困るファイルは、リードオンリーにしてしまう。chmod 400がよいと思う。
chmod 644 hoge.conf # 所有者は読み書き可能。それ以外のユーザは読み込みのみ
chmod 600 hoge.conf # 所有者のみが読み書き可能。
chmod 400 hoge.conf # 所有者のみが読み込みのみ可能。

その他の方法

  • 万が一のことを考えて、新しい牢獄をchrootで作ってからプロセスを起動するようにする。環境構築が大変だと思うが有事の際の汚染範囲を限定できる。

/usr/sbin/chroot /home/tomcat /bin/su tomcat

を、ルートとして実行してみてください (新しいルート・ディレクトリーが /home/tomcatであるとしてのもの)。正しくセットアップが行われていれば、これによって、新しいルートの中でtomcat が実行されるはずです。Tomcatを起動したり、終了したりするためのスクリプトも実行してみてください。すべてうまく動作することが確認できたら、最後に、リスト3のTomcatのサービス定義を変更します。su コマンドをtcstart.shとtcstop.shのスクリプトに移動して、su の代わりにchrootを使用するようにします。また、これらのスクリプトがルートによってしか変更できないようにする必要もあります。

  • tomcat限定の話ならセキュリティマネージャで、危険なrm -frなどを禁止できるかどうかですね。これは未調査。

Tomcatを安全にする
セキュリティマネージャとは?

とあげておいて、なかなか初期設定が面倒なんですが気を付けたいところである。