コマンドの実行権限を削除して、標準ユーザーがコマンドを実行できないように制限する方法を知っています。しかし、標準ユーザーが特定のオプション/引数を使用してコマンドを実行できないように制限することは可能ですか?
たとえば、標準ユーザーは次のコマンドを実行できる必要があります。
ls
しかし:
ls -l
標準ユーザーが実行できるchsh
コマンドや同じコマンドがありますが、実行すると権限が拒否されるため、これが可能だと思います。passwd
chsh root
passwd -a -S
ベストアンサー1
唯一の方法は、問題のコマンド/ユーティリティにラッパーを直接作成し、それを開始したユーザーの(E)UIDに基づいて何を許可するかを決定することです。たとえば、上記のツールはこれを実行しchsh
たり、passwd
実装にこの機能を組み込むことができます。
ラッパーの作成方法ls
#!/usr/bin/perl
use strict;
use warnings;
my $problematic_uid = 1000; # For example
my $is_problematic = $< == $problematic_uid;
unless(/ -l / ~~ @ARGV or $is_problematic){
exec qq{/new/path/to/ls }.join '',@ARGV
}else{
die "Sorry, you are not allowed to use the -l option to ls\n"
}
元のパスがls
ユーザーの中にないことを確認する必要がありますPATH
。/new/path/to/ls
問題は、このラッパーを使用するにはユーザーが元のラッパーを実行できる必要があるため、ユーザーls
が元のls
ラッパーを直接呼び出してそれをバイパスできることです。