ルートになるために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
行くことはできないためではなく)、操作を実行するときにファイル名を手動でコピーして貼り付ける必要があります。これは非常に面倒ですが、すべてを遅くして、少なくとも単位時間あたりのエラーを減らすことができます。
答え2
sudo
悪い習慣を捨てるように親切なお知らせ
したがって、私が正しく理解しているなら、あなたは悪い習慣を捨てるように親切に思い出させる「ただ」が欲しいでしょう。つまり、簡単なツールを使用して簡単に削除または解決できます。
この場合、実際のPATHディレクトリにある単純なシェルスクリプトがsudo
機能するはずです。私はあなたに提案します
- 名前をつけて
sudo
- ディレクトリに入れる
/usr/local/bin
- 実行権限を付与する
これは、あなたまたはあなたの同僚が入力したときにsudo something
システムが次を見つけることを意味します。
/usr/local/bin/sudo # the shellscript
今後
/usr/bin/sudo # the real sudo program
シェルスクリプト:
#!/bin/bash
if [ $# -eq 1 ] && ( [ "$1" == "-s" ] || [ "$1" == "-i" ] || [ "$1" == "bash" ] )
then
echo "Please do not use 'sudo $1'"
exit
else
/usr/bin/sudo "$@"
fi
削除や修正が難しいアイテムがあれば教えてください。。その場合は申し上げませんので、この回答を削除します。
答え3
警告: sudo sudo su
質問です。 sudoers ユーザーが次のタスクを実行する場合
sudo sudo su
彼はルートシェルにアクセスできます!
したがって、/usr/bin/sudoはCmnd_Aliasになければなりません。
Cmnd_Alias SHELLS = /bin/sh, /bin/bash, /bin/bash, /usr/bin/zsh
Cmnd_Alias SU = /bin/su,/usr/bin/sudo
またはスクリプトから
if [ $# -eq 1 ] && ( [ "$1" == "-s" ] || [ "$1" == "sudo" ] || [ "$1" == "-i" ] || [ "$1" == "bash" ] )
then
echo "Please do not use 'sudo $1'"
exit
else
/usr/bin/sudo "$@"
fi`