特定のコマンドセットがLinuxで実行されるのをブロックするにはどうすればよいですか?


0

ターミナルでユーザーがコマンドを入力したらすぐに、一連のコマンドをブロックします。

どうやってやるの?


3
ユーザーにコマンドを実行する許可を与えないでください。
チョロバ

好奇心から:これらのコマンドはどのようなものですか?そして、なぜユーザーがそれらを実行できないようにしたいのですか?
-ArjunShankar

@choroba:それは、実際には別の言葉で問題を述べているだけです。どうやってやるの?私は言うだろうchmod 700
–MSalters

1
特定のコマンドセットをブロックして、他のすべてのコマンド(「ブラックリスト」)を許可しないでください。特定のコマンドセットを許可し、他のコマンドをすべてブロックする必要あります(「ホワイトリスト」)。そうしないと、不要な動作発生します。多くの変数が関係している場合、ブラックリストソリューションは多くの場合まったくソリューションではありません。これは確かにここに当てはまります。
ダニエルアンダーソン

私は@DanielAnderssonに同意しますが、最終的に任意のコードの実行につながらない健全なホワイトリストを作成することさえ、非常に困難です。膨大な数のコマンドがあり、それらを任意のコマンドライン引数で実行できれば、最終的に任意のコードが実行されます。
-allquixotic

回答:


5

特定のコマンドセットを単にブロックすることは危険であり、おそらくあなたが望むものではありません。誰かがシェルにアクセスできる場合、いくつかの基本的なコマンドを使用するだけで、何かを実行する方法を見つけることができます。実際に何かを「防止」していると判断するには、許可されているすべてのコマンドを慎重に監査し、ユーザーが望まない操作を許可していないことを確認する必要があります。それはかなり高い注文です。

あなたは彼らにへのアクセスを許可している場合たとえば、echochmodおよびbase64、その後、彼らは、システム上のバイナリを取ることができ、base64それは、と自分の殻に貼り付けecho 'long_base64_data' | base64 -d > bin.binた後とchmod +x bin.bin、その後./bin.bin-そしてそれは何でも行うことができますglibcし、システム上のシステムコールが可能に。

同様に、あれば任意のインタプリタが許可され、それはperlpythonruby、あるいは(間違いなく)bash、彼らは最終的に、任意のコードが実行されるダウン得るためにそれを使用することができるはず-再び、カーネルのシステムコールは許可何かを。

誰かがシステム上で完全なシェルアクセスを持っていると信用していない場合は、シェルアクセスを許可しないでください。それ以外の場合は、ユーザーが敵対的である想定し、ユーザーが悪意のある操作を試みても安全であることが知られている既知の調査済みのアクションの非常に小さなサブセットに制限するカスタムネットワークプロトコルを考え出す必要があります。

素朴にあなたが尋ねた実際の質問に答えるために:あなたがchmod o-x /bin/rm実際にユーザーがファイルを削除するのを止めるだろうと思うなら、あなたは明らかにすることができます(その場合、rmコマンドの所有者だけがそれを実行することができます、それは通常ですroot) ; しかし、それがあなたがするすべてであるならば、彼らは使うことができますbusyboxまたはファイルを削除するための前述のスクリプト言語のいずれか。または、実行可能コードをファイルにエコーし、実行可能にし、実行することができます。そして、表面上は無害に見えて明示的に任意のコマンドを許可しないコマンドへのシェルコマンドインジェクションなど、誰かがシェルを使用して任意のコードを実行するためのさらにトリッキーな方法を省略していると確信しています。実際、Ubuntuにインストールされ、「任意のシェルコードインジェクションを許可するため、これを実行するためのより良い方法を考える必要があります」などのコメントを付けたコマンドを頭の中で考えることができます。まだ修正されていません。

シェルは、ほとんどの場合、オペレーターが信頼されていると想定してます。通常のユーザーシェル(非ルート)でさえ、大きな信頼を前提としています。ユーザーがコマンドを実行できないようにする理由が、コマンドを完全に信頼していないことに関連している場合、シェルアクセスをまったく許可せずに、あなたがしようとしていることを行う別の方法を見つけます。

ちなみに、ユーザーシェルの権限をやや減らすことの目的は、(信頼できると想定される)ユーザーを自分自身から保護し、悪意のあるプログラムからユーザーを保護することです。ユーザーを自分自身から保護し、悪意のあるプログラムからユーザーを保護することは、信頼できないユーザーからオペレーティングシステムを保護することとはまったく異なる問題です。シェルは、その性質上、あまりうまくできません。

言い換えれば、シェルコマンドの「セット」の実行を防ぎ、誰かにシェルアクセスを許可することは、浜辺の砂にいくつかのポールを置くことによって津波を止めようとするようなものです。水が行くことができる他の場所はまだ何百万もあるので、たとえ水があなたのすべてのポールに流れ込んだとしても、それは少なくともビーチに来るのを妨げません(そしてそれはあなたのポールを引き裂いて持ってくるでしょう)とにかく津波と一緒に)。何マイルにもわたる真の水ダムを建設する必要があります。幸いなことに、デジタルの世界では、かなり良いダムを構築することは、実際の生活で行うよりもはるかに簡単です。と呼ばれるものとan HTTPS server、このタスクを全体的に非常によく達成するサーバー側プログラミング言語がいくつかあります。確かにシェルよりもはるかに優れています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.