「!」の制限演算子
ALLから「減算」のために「!」演算子の使用は通常効果がありません。ユーザーは目的のコマンドを別の名前にコピーし、そのコマンドを実行してこの問題を簡単に回避できます。たとえば、
ビルALL = ALL、!SU、!SHELLS
BillがSUまたはSHELLSにリストされているコマンドを実行するのを実際に防ぐ方法はありません。なぜなら、彼は単にコマンドを別の名前にコピーしたり、エディタや他のプログラムのシェルエスケープを使うことができるからです。したがって、そのような制限はせいぜい勧告と見なされるべきです(そして政策によって強化されるべきです)。
通常、ユーザーがsudo ALLを使用している場合、ユーザー仕様の「!」要素に関係なく、ルートシェルを提供する独自のプログラムの作成(または独自のシェルコピーの作成)を防ぐことはできません。
何ですか
このコマンドを別の名前にコピーするだけです。
意味は?コマンドの別名ですか、それとも別のものですか?
答え1
コマンドは通常(*)ファイルであり、ファイルは別の名前でコピーできます。
例えば
$ cp /bin/ls /tmp/lslsls
$ % /tmp/lslsls -l /tmp/lslsls
-rwxr-xr-x 1 ilkkachu wheel 187040 Dec 5 20:03 /tmp/lslsls
これで、ルート以外のものをsudo
実行することが許可されていても、実行を続けることができ、ls
まったくlslsls
同じ内容を持つようになります。元のファイルを実行可能(読み取り不可能)にするだけでは、通常は同じ操作を実行する別のバイナリを見つけることができるため、あまり役に立ちません。 (一度は実行を許可しないように設定されたsudo
システムを使用する必要がありましたが、実行を含む他のすべてが機能していたので、zshのインストールだけを検討しました。)/bin/sh
/bin/bash
apt-get
(*シェルの組み込みと関数は例外です。)
マニュアルページには、「エディタまたは他のプログラムからのシェルのエスケープ」の使用に関する言及もあります。これは、viで、またはのようなコマンドを使用するか、単にまたは:shell
(少なくともGNU AWKでは)を使用することを意味します。これらのどれもsudoによって課される制限の影響を受けません。:!bash
sudo perl -e 'exec "sh"'
sudo awk 'BEGIN { system("sh") }'