次のページ 前のページ 目次へ

4. ローカルのセキュリティ

次にローカルユーザの攻撃に対するシステムのセキュリティについて考えます. そうです, ローカルのユーザに対してです.

ローカルユーザのアカウントの獲得は, 攻撃者が root のアカウントを破ろうとする際に最初に考えることの一つです. ローカルに対するセキュリティが甘ければ, 様々なバグやローカル向けのサービスのまずい設定を利用して, 一般ユーザの権限から root ユーザの権限へ 「アップグレード」することができるのです. ローカルに対するセキュリティが強固であれば, 侵入者が越えなければならないハードルはまだ残ることになります.

ローカルユーザは, たとえ身元を詐称していなくてもシステムに被害を与えることができます. 知らない人, 連絡先のわからない人にアカウントを与えるのは, 非常に危険なことです.

4.1 新規アカウントの作成

アカウントを発行する際は, そのユーザが行う必要のある作業に対し, 必要最小限のアカウントを与えていることに留意すべきです. 息子 (10 才) にアカウントを与えるのならば, ワープロやお絵描きプログラムにはアクセスできるけれど, 自分のものでないファイルを削除できないユーザにすべきでしょう.

他人に Linux マシンに対して合理的にアクセスをしてもらうための, 便利な経験則があります.

  • 必要最小限の権限しか与えないようにします
  • いつ, どこからログインしたか, あるいはどこからログインすべきかに注意を払います
  • 使われていないアカウントは削除したかどうか確認します
  • 全てのコンピュータとネットワークで同じユーザ ID を使うとよいでしょう. これにより, アカウントの管理, ログデータの解析が容易になります.
  • グループユーザ ID の作成は絶対に禁止すべきです. ユーザアカウントでは責任の所在が明らかですが, グループアカウントではそうではないからです.

セキュリティを破るときに使われるローカルユーザのアカウントの多くは, 何ヵ月あるいは何年も使われていないものです. 誰も使っていないために, 理想的な攻撃の道具になってしまうのです.

4.2 root のセキュリティ

あなたのマシンで最も欲しがられるアカウントは, root (ユーパーユーザ) のアカウントです. このアカウントはマシン全体に対する権限を持ち, ネットワーク上の他のマシンに対する権限を持つこともあります. root のアカウントはできるだけ短時間の, 特定の作業だけで使用し, それ以外の時は一般ユーザとしてマシンを使用すべきです. root ユーザでログインしているとちょっとしたミスでも問題を起こしかねません. root 権限を持っている時間は短ければ短いほど安全です.

root 権限でマシンを壊してしまわないための仕掛けもいくつかあります.

  • 複雑なコマンドを実行するとき, 特に globbing を使う(* や ? などのワイルドカードを使用する)場合は, 失敗しても悲惨な結果にならない方法を最初にとりましょう. 例えば rm foo*.bak を実行したい場合は, まず "ls foo*.bak" を実行し, 考えているファイルだけが消されるようになっているか確認するのです. 危険なコマンドの代わりに echo が使えることもあります.
  • ユーザに対して rm コマンドのエイリアスを設定しておき, ファイルの削除の際に確認を行うようにします.
  • 特定の作業 1 つを行うためだけに root になりましょう. 自分が, どうやって作業しようか考えているような状態だとしたら, root でやらなければならないことがはっきりするまでは, 一般ユーザに戻りましょう.
  • root ユーザのコマンドパスはとても重要です. コマンドパス (つまり PATH 環境変数) はシェルがプログラムを探すディレクトリを指定します. root ユーザ用のコマンドパスはできる限り制限すべきですし, 絶対に '.' (これは「カレントディレクトリ」を意味します) を PATH の指定に入れてはいけません. さらに, 書き込み可能なディレクトリを検索パスに入れてはいけません. というのも, そうなっていると攻撃者が検索パス上のファイルを書き換えたり置き換えたりでき, あなたがそのコマンドを次に使ったときに root 権限で動作させることができるからです.
  • root で rlogin/rsh/rexec コマンド群 (いわゆる r-ユーティリティ) を使ってはいけません. これらのコマンドは色々な攻撃の対象となるので, root のときに実行するのは実に危険です. root ユーザ用の .rhosts ファイルは決して作ってはいけません.
  • /etc/securetty には root がログインできる端末のリストが書かれています. (Red Hat Linux の)デフォルトでは, これにはローカルの仮想端末 (vty) だけが設定されています. このファイルにそれ以外の端末を追加するときには, 細心の注意を払ってください. 必要がある時でも一般ユーザとして (できれば ssh 等の暗号化チャネル経由で) リモートログインし, それから su することができるはずなので, 直接 root としてログインできる必要はありません.
  • root での作業は, 必ずゆっくり, 慎重に行いましょう. 作業の結果は大きな影響をもたらすかもしれません. コマンドを打ち込む前に, まず考えましょう!

どうしても誰か (できれば非常に信頼している人) に root 権限を与える必要がある場合にも, これを補助するツールがあります. sudo を使えば, ユーザのパスワードを使って, 制限されたコマンド群を root の権限で使用させることができます. これにより, 例えば Linux マシンのリムーバブルメディアを ユーザにイジェクトやマウントをさせるけれど, それ以外の root 権限は与えないようにすることができます. sudo は成功・失敗を含めて全ての sudo の試みをログに取ることができるので, 誰が何のためにどのコマンドを使ったか調査することができます. このため, sudo は多くのユーザが root 権限を持つような環境でもうまく利用することができます. なぜなら, システムに対して行われた変更を調べやすくしてくれるからです.

sudo を使って特定のユーザに特定目的のための 特定の権限を与えることができますが, sudo には欠点がいくつかあります. sudo は, サーバの再起動やユーザの新規追加など, 限られた作業の組に対してだけ使うべきです. シェルエスケープができる任意のプログラムは, これを sudo を通して使ったユーザに root 権限を与えてしまいます. 例えば, 大部分のエディタがこれに該当します. また, /bin/cat のように無害なプログラムであっても ファイルの上書きに使うことができるので, これを使って root 権限が破られることもあり得ます. sudo は権限を使わせるための手段と考えるべきであり, root ユーザをより安全にするために置き換えるものと期待してはいけません.


次のページ 前のページ 目次へ

[