sudo -sとsudo -iを無効にする

sudo -sとsudo -iを無効にする

ルートになるために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オプションが設定されています。SUSHELLSPAGERS/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悪い習慣を捨てるように親切なお知らせ

したがって、私が正しく理解しているなら、あなたは悪い習慣を捨てるように親切に思い出させる「ただ」が欲しいでしょう。つまり、簡単なツールを使用して簡単に削除または解決できます。

この場合、実際のP​​ATHディレクトリにある単純なシェルスクリプトが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`

関連情報