で、こんなお話も。
セキュリティ上の注意
’!’ オペレータを使って 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 件のコメント:
コメントを投稿