ユーザーRickに再起動権限を奪い取ろうとしています。私は試し!
てみましたNOEXEC
。別の方法がありますか?
Rick ALL = (ALL) !/sbin/reboot
Rick ALL = NOEXEC: /sbin/reboot
答え1
あなたはできません。特定のコマンドを除くすべてのコマンドを実行するためのユーザー権限を割り当てるために「否定的なsudo」を作成することは実際には不可能です。これは、ユーザーがこれらの制限を簡単にバイパスできるためです。
- 拒否されたコマンドをシェルスクリプトに挿入して実行することによって
- 拒否されたコマンドを別の名前にコピーする
- 次のコマンドを実行します(あなたの場合、、、およびすべて
init 6
再telinit 6
起動shutdown -r now
をsystemctl isolate reboot.target
実行し、コマンドを拒否しません)。 - 拒否されたコマンドを実行して
exec
- テキストエディタや他のプログラムからシェルをエスケープする
- または単にrootユーザーに切り替えて
su
これはマンページにも記載されていますsudoers
。
SECURITY NOTES
Limitations of the ‘!’ operator
It is generally not effective to “subtract” commands from ALL
using the ‘!’ operator. A user can trivially circumvent this by copy-
ing the desired command to a different name and then executing that.
For example:
bill ALL = ALL, !SU, !SHELLS
Doesn’t really prevent bill from running the commands listed in SU
or SHELLS since he can simply copy those commands to a different
name, or use a shell escape from an editor or other program.
Therefore, these kind of restrictions should be considered advisory at
best (and reinforced by policy).
In general, if a user has sudo ALL there is nothing to prevent
them from creating their own program that gives them a root shell (or
making their own copy of a shell) regardless of any ‘!’ elements
in the user specification.
代わりに、ユーザーに必要な一連の制限されたコマンドを識別し、そのコマンドにのみアクセス権を付与する必要があります。
NOEXEC
単にシェルエスケープを無効にしても、他のすべての回避方法がブロックされるわけではありません。