2012年3月21日水曜日

sudoに復讐

sudoの設定について。前回もやっとしたまま終わったのでわりときちっと勉強した。するとsudoersファイルについて本家のmanページ(man sudoers)に「かなーり詳しく」いろんな設定例と説明が載っていた。なんと。最初からこっち見ろよというお話か。
で、こんなお話も。
セキュリティ上の注意
  ’!’ オペレータを使って ALL からコマンドを "差し引く" ことは、一般に有効でない。ユーザは、欲しいコマンドを別な名前でコピーして実行すれば、これを簡単に回避できてしまう。例を挙げる。
           bill        ALL = ALL, !SU, !SHELLS
  上の例では、実際には SU と SHELLS にリストされているコマンドを bill に実行させないようにすることができない。なぜなら、bill は、これらのコマンドを別な名前にコピーしたり、エディタや他のコマンドのシェルエスケープから使えるからである。よって、このような制限は、せいぜい補助的なものと考えるべきである (さらにポリシーで強化すべきである)。
つまりまさに前回例として挙げた
Cmnd_Alias SHUTDOWN = /sbin/halt,/sbin/poweroff,/sbin/reboot,/sbin/shutdown
ADMIN            ALL=(ALL)       ALL, !SHUTDOWN
は無意味な設定ということらしい。実際ADMINユーザは(特になんの設定もすることなく)rebootを実行できた。なぜなら/usr/bin/rebootコマンドがconsolehelperへのシンボリックリンクになっていて、consolehelperを経由して/sbin/rebootを実行できるようになっていて、かつ/usr/binに(ふつうに)パスが通っているから。あれ、ほんとだ。
シャットダウン系コマンドの実行権限を委譲しない、という意図のこの設定はほとんど意味をなさないことが分かった。しかしこれはsudoの設定について説明するかなり多くのサイトで「オススメの設定」として紹介されている。どうなんだろうね。情報を鵜呑みにしちゃならんというのを改めて実感したというか。
さらにいえば「ALL, !SHUTDOWN」だと/bin/bashの実行も許可しちゃうんだよね。つまり「sudo -s」ができちゃう。するとrootでシェルを実行するんだから、ほぼrootログインと同等。rootのパスワードを知る必要なく。これ危ないだろどう考えても。
というわけで設定を見直し。ファイル閲覧はパスワードなし、ファイル編集とサービス起動・停止系のコマンドはパスワード付きで実行できるようにした。「sudo -l」で確認するとこんな感じ。
User **** may run the following commands on this host:
    (root) NOPASSWD: /bin/ls, /bin/cat, /usr/bin/less, /usr/bin/tail
    (root) /usr/bin/vim
    (root) /sbin/service, /sbin/chkconfig
これで試用中。ただ「cp」「mv」「mkdir」とかのコマンドも許可しないと使い勝手が悪いかなぁ、と思っているところ。

0 件のコメント:

コメントを投稿