
コマンドの実行権限を削除して、標準ユーザーがコマンドを実行できないように制限する方法を知っています。しかし、標準ユーザーが特定のオプション/引数を使用してコマンドを実行できないように制限することは可能ですか?
たとえば、標準ユーザーは次のコマンドを実行できる必要があります。
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
ラッパーを直接呼び出してそれをバイパスできることです。
答え2
chsh
と同じコマンドはpasswd
特別にコーディングされています。彼らは追加の権限で実行されます(彼らは設定値)ルート)自己認証メカニズムを含みます。どちらもユーザーが自分に電話をかけていることを確認し、非rootユーザーのみがその機能のサブセットを使用できるようにします。
chsh
そしてpasswd
それは例外的です。ほとんどのコマンドは、誰が呼び出すかは関係ありません。
ユーザーが特定のコマンドを実行することを禁止することは意味がありません。ユーザーは、独自の実行可能ファイルを提供するなど、他の方法でコマンドが実行するすべての操作を実行できます。
ホワイトリストに含まれるコマンドセットのみを実行できる制限付きアカウントを作成できます。限られた殻、またはデータ転送にのみ使用されるアカウント、RSSHまたはscponly。
ユーザーが昇格した権限(通常はsudo
)で特定のコマンドを実行できるようにし、特定のオプションの組み合わせに対してのみ許可するには、オプションを確認し、ユーザーがラッパースクリプトを実行できるようにするラッパースクリプトを作成します。
答え3
Rahulの答えは、あなたが望むものはa)良いアイデアではなく、b)おそらくカスタムシェルを作成しなければならないので、あなたの質問に関連しています。このような実行可能ファイルは、ls
独自に引数を処理する独立した自己完結型プログラムです。ユーザーがそれを使用できないようにするには、カスタムをls -l
直接作成してコンパイルする必要がありますls
。これは簡単ではありません。そして、変更したいコマンドごとに毎日作業をしなければならないので、時間もかかります。
あなたはできますおそらくbash
フルシェル(あなたの場合は可能)をユーザーコマンドをフィルタリングする別のシェルに完全に置き換えてみてください。たとえば、実際に呼び出す前にコマンドラインから削除を試みることができます-l
。しかし、シェルとシェルで実行できるコマンドは、しばしば非常に強力で複雑な構文を持っているため、言葉のように簡単ではありません。フィルタを使用すると、バグや破損したコンテンツが残る可能性があります。ls
ls
標準ユーザーが実行できる
chsh
コマンドや同じコマンドがありますが、実行すると権限が拒否されるため、これが可能だと思います。passwd
chsh root
passwd -a -S
まったく違う話です。なぜなら、これがこのプログラムが書かれる方法だからです。動作を変更するには、ls
ソースコードを修正して再コンパイルする必要があります。