【Linux】"sudo -s"を禁止する方法

前回書いたように、"sudo -s"は対話式シェルを起動できるので、root権限で色々と作業したいときに大変便利ですが、ログに起動したシェル上で行った作業が記録されないという問題があります。
ユーザに特定のコマンドしかsudoさせない場合、"sudo -s"の利用は禁止するのが望ましいです。

/etc/sudoersではオプション利用が禁止できない

sudoコマンドの設定は、visudoコマンドで/etc/sudoersファイルを編集して行います。
ところが、/etc/sudoersファイルでは特定のオプション禁止することができません。

シェルコマンドを1つ1つ禁止する

"sudo -s"は実行されると環境変数SHELLに設定されたシェルを起動します。
つまり、"sudo -s"は"sudo $SHELL"と同じです。

そのため、$SHELLに設定される可能性がある、/bin/bash、/bin/tsch、/bin/zshなどのコマンドを1つ1つ禁止する必要があります。 (とても面倒ですが他によい方法が見つかりません。。。)

【/etc/sudoersの設定例】
Cmnd_Alias SHELLS = /bin/bash/, /bin/tsch, /bin/zsh, /usr/local/bin/bash, /usr/local/bin/tcsh, ....
%wheel ALL = (ALL) ALL, !SHELLS  ← wheelグループのSHELLSに設定したコマンド利用を禁止

実は完璧ではない

実は上記の方法、シェルコマンド利用を完全に禁止できてはいません。 ちょっと知識があれば、すぐに抜け道を見つけられてしまいます。

例えば、シェルコマンドを別のディレクトリにコピーされたり、別名にされたりすると、sudoで使うことができます。 また、Linuxにはviコマンドやlessコマンドなど、外部コマンドを起動できるものが多くあり、ここからroot権限でコマンドを実行することもできてしまいます。

ですので、上記の方法はあくまで気休め程度ととらえてください。 本当になんか上手い方法はないんでしょうかね。。。