次にローカルユーザの攻撃に対するシステムのセキュリティについて考えます. そうです, ローカルのユーザに対してです.
ローカルユーザのアカウントの獲得は, 攻撃者が root のアカウントを破ろうとする際に最初に考えることの一つです. ローカルに対するセキュリティが甘ければ, 様々なバグやローカル向けのサービスのまずい設定を利用して, 一般ユーザの権限から root ユーザの権限へ 「アップグレード」することができるのです. ローカルに対するセキュリティが強固であれば, 侵入者が越えなければならないハードルはまだ残ることになります.
ローカルユーザは, たとえ身元を詐称していなくてもシステムに被害を与えることができます. 知らない人, 連絡先のわからない人にアカウントを与えるのは, 非常に危険なことです.
アカウントを発行する際は, そのユーザが行う必要のある作業に対し, 必要最小限のアカウントを与えていることに留意すべきです. 息子 (10 才) にアカウントを与えるのならば, ワープロやお絵描きプログラムにはアクセスできるけれど, 自分のものでないファイルを削除できないユーザにすべきでしょう.
他人に Linux マシンに対して合理的にアクセスをしてもらうための, 便利な経験則があります.
セキュリティを破るときに使われるローカルユーザのアカウントの多くは, 何ヵ月あるいは何年も使われていないものです. 誰も使っていないために, 理想的な攻撃の道具になってしまうのです.
あなたのマシンで最も欲しがられるアカウントは, root (ユーパーユーザ) のアカウントです. このアカウントはマシン全体に対する権限を持ち, ネットワーク上の他のマシンに対する権限を持つこともあります. root のアカウントはできるだけ短時間の, 特定の作業だけで使用し, それ以外の時は一般ユーザとしてマシンを使用すべきです. root ユーザでログインしているとちょっとしたミスでも問題を起こしかねません. root 権限を持っている時間は短ければ短いほど安全です.
root 権限でマシンを壊してしまわないための仕掛けもいくつかあります.
rm foo*.bak
を実行したい場合は,
まず "ls foo*.bak"
を実行し,
考えているファイルだけが消されるようになっているか確認するのです.
危険なコマンドの代わりに echo
が使えることもあります. rm
コマンドのエイリアスを設定しておき,
ファイルの削除の際に確認を行うようにします. .rhosts
ファイルは決して作ってはいけません. /etc/securetty
には
root がログインできる端末のリストが書かれています.
(Red Hat Linux の)デフォルトでは,
これにはローカルの仮想端末 (vty) だけが設定されています.
このファイルにそれ以外の端末を追加するときには,
細心の注意を払ってください.
必要がある時でも一般ユーザとして
(できれば
ssh
等の暗号化チャネル経由で)
リモートログインし, それから su
することができるはずなので,
直接 root としてログインできる必要はありません.どうしても誰か (できれば非常に信頼している人) に
root 権限を与える必要がある場合にも, これを補助するツールがあります.
sudo
を使えば,
ユーザのパスワードを使って, 制限されたコマンド群を
root の権限で使用させることができます. これにより,
例えば Linux マシンのリムーバブルメディアを
ユーザにイジェクトやマウントをさせるけれど,
それ以外の root 権限は与えないようにすることができます.
sudo
は成功・失敗を含めて全ての
sudo
の試みをログに取ることができるので,
誰が何のためにどのコマンドを使ったか調査することができます.
このため, sudo
は多くのユーザが root 権限を持つような環境でもうまく利用することができます.
なぜなら, システムに対して行われた変更を調べやすくしてくれるからです.
sudo
を使って特定のユーザに特定目的のための
特定の権限を与えることができますが,
sudo には欠点がいくつかあります.
sudo は, サーバの再起動やユーザの新規追加など,
限られた作業の組に対してだけ使うべきです.
シェルエスケープができる任意のプログラムは,
これを sudo
を通して使ったユーザに root 権限を与えてしまいます.
例えば, 大部分のエディタがこれに該当します.
また, /bin/cat のように無害なプログラムであっても
ファイルの上書きに使うことができるので,
これを使って root 権限が破られることもあり得ます.
sudo
は権限を使わせるための手段と考えるべきであり,
root ユーザをより安全にするために置き換えるものと期待してはいけません.