標準ユーザーが特定のパラメータを使用してコマンドを実行できないように制限する

標準ユーザーが特定のパラメータを使用してコマンドを実行できないように制限する

コマンドの実行権限を削除して、標準ユーザーがコマンドを実行できないように制限する方法を知っています。しかし、標準ユーザーが特定のオプション/引数を使用してコマンドを実行できないように制限することは可能ですか?

たとえば、標準ユーザーは次のコマンドを実行できる必要があります。

ls

しかし:

ls -l

標準ユーザーが実行できるchshコマンドや同じコマンドがありますが、実行すると権限が拒否されるため、これが可能だと思います。passwdchsh rootpasswd -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。しかし、シェルとシェルで実行できるコマンドは、しばしば非常に強力で複雑な構文を持っているため、言葉のように簡単ではありません。フィルタを使用すると、バグや破損したコンテンツが残る可能性があります。lsls

標準ユーザーが実行できるchshコマンドや同じコマンドがありますが、実行すると権限が拒否されるため、これが可能だと思います。passwdchsh rootpasswd -a -S

まったく違う話です。なぜなら、これがこのプログラムが書かれる方法だからです。動作を変更するには、lsソースコードを修正して再コンパイルする必要があります。

関連情報