ルートになるためにsudoの使用を無効にして、すべてのユーザーにsudoプレフィックス付きの特権コマンドを実行させたいと思います。これにより、これらすべてのコマンドが記録され、アクセスと変更の履歴が維持されます。
これを達成できるソリューションはありますか?
ベストアンサー1
sudoers
例外とともに、ユーザーが実行できるコマンドを一覧表示できます。
これsudoers
マニュアルページあなたが望むことをほとんど実行する例もあります(ここにはDebianに対するいくつかの調整があります):
Cmnd_Alias SHELLS = /bin/sh, /bin/bash, /bin/bash, /usr/bin/zsh Cmnd_Alias SU = /bin/su jill SERVERS = /usr/bin/, !SU, !SHELLS
Host_Aliasのすべてのシステムに対して、jillはHost_AliasとCmnd_Aliasesに属するコマンドを除いてそのディレクトリ内のすべての
SERVERS
コマンドを実行できます。/usr/bin/
ルールに特に言及されていませんが、Cmnd_Aliasのコマンドはすべてnoexecオプションが設定されています。SU
SHELLS
PAGERS
/usr/bin
また適用されますALL
:
someuser ALL=(ALL:ALL) ALL, !SU, !SHELLS
これを得なさい:
$ sudo -s
Sorry, user someuser is not allowed to execute '/bin/bash' as root on thishost.
$ sudo bash -c "echo please"
Sorry, user someuser is not allowed to execute '/bin/bash -c echo please' as root on thishost.
そして、sudo -l
これらの特定のコマンドを実行できないと言います。
デフォルトで何でも実行できる場合は、すべてのシェルを明示的に一覧表示する必要があります。たとえば、su
許可されている場合は使用できるようにシェルを実行しますsudo su
(通常は役に立ちません)。上記で間違って書いているので、/bin/dash
まだ利用可能です。
いずれにしても、そのような例外を列挙しても実際の制限になるわけではありません。ユーザーが別の名前()でシェルを複製またはsudo cp -a /bin/bash /bin/cash
実行してsudo vi
クリックするのを防ぐ方法はありません:shell
。もちろん、漏れを防ぐためにエディタなどを設定することはできますが、すべての穴を見つけて止める必要があり、まだ漏れを防ぐことはできません。それにもかかわらず、このようなシステムを使った経験があるので、これが良いアイデアだと思う人もいます。
ロギングに加えて、人々がすべてのコマンドを実行するために特権シェルを開いたままにしないようにして事故を減らすことだと思います。ただし、sudo
コマンドの前に追加する必要があるため、コマンドのスペルが間違っている可能性は実際には減りません。それでもsudo rm -rf *
間違ったディレクトリにあるか、誤ってそう/dev/sdd
思うかもしれません。/dev/sdf
特権シェルを拒否すると、管理者にとって実質的な問題が発生します。システムに管理者の一般アカウントでアクセスできないディレクトリがある場合は、特権シェルを実行してディレクトリに入り、ファイルの一覧を表示し、ファイル名にタブ補完機能を使用する必要があります。シェルがない場合は、常にこれを行う必要がありますsudo ls path/to/dir
(ただsudo ls
行くことはできないためではなく)、操作を実行するときにファイル名を手動でコピーして貼り付ける必要があります。これは非常に面倒ですが、すべてを遅くして、少なくとも単位時間あたりのエラーを減らすことができます。