私はスクリプトセット(bash、ruby、python)を持っており、このコンテナを複数のサーバーに展開できるように、すべてをファイル形式のコンテナに入れたいと思います。このスクリプトは、rootを含む他のユーザーのアクセスから保護する必要があります。だから私の考えは、すべての機密スクリプトを含む暗号化されたコンテナを作成し、起動時にRAMにインストールすることです。ただし、このコンテナをインストールした後は、ファイルにアクセスできる人なら誰でもシステムからファイルにアクセスできます。
解釈されたスクリプト(bash、Rubyなど)をシステムに配布し、誰もいつでもその内容を見ることができないようにする技術はありますか?私は「難読化された」スクリプトを実行したくありません。
答え1
プログラムを実行しているユーザーがプログラムを読み取れないようにすることはできません。特に、ルートはすべてのファイルを読み取ることができます。
あなたが求めるものは言葉ではありません。コンピュータに暗号化されたコンテナを置くことができ、そのコンテナの管理者はそれを読むことができません。ただし、そのコンテナ内のコンテンツを使用するには、管理者がコンテンツを読み取る前にコンテンツの復号化が必要です。
ファイル権限を使用して、root以外のユーザーからファイルを保護できます。暗号化はこの場合ほとんど役に立ちません。暗号化は、誰かがデータを含むメディアにアクセスできる場合にのみデータを保護するのに役立ちます。 。他人のデータ)。通信チャンネルを覗くことができる人)
人々があなたのソフトウェアをコピーしたくない場合は、まずあなたのソフトウェアを人々が使用できるようにしないでください。ソフトウェアの機密部分が自分のサーバー上で実行されるように準備し、愚かなクライアントを送信することもできます。顧客が実行できるコピーの数を制限するには、法的契約を通じて制限してください。
答え2
混乱が何を意味するかによって異なります。これは、スクリプトをコンパイル可能なプログラムにラップしてバイナリ実行可能ファイルに変換する方法です。以下のようにCプログラムを書いてみてください。
#include <stdio.h> #include <stdlib.h> ︙ ファイル*sh; sh = popen("/bin/sh", "w"); //使用「/空/配布」必要なら、 //または必要な通訳者。 if(sh ==(FILE *)NULL) { error("開く"); 出口(1); } /*ここにスクリプトを挿入してください。 */ fprintf(sh, "x は赤、青、緑です\n"); fprintf(sh, "実行\n"); fprintf(sh, " echo x = \"$x\"\n"); fprintf(sh, "完了\n"); /* スクリプトの終わり。 */ fclose(sh);
数行以上の場合、文字列配列として保存する方が管理しやすくなります。次に、このプログラムをコンパイルします。
- root以外のユーザーがプログラム/スクリプトを実行できるようにするには、バイナリを実行専用に設定します(モード710または711など)。
- もちろん、ルートはモードに関係なくファイルを読み取ることができます。バイナリ実行可能ファイルは、一見するとバイナリ実行可能ファイルのように見えますが
strings
。スクリプトテキストに軽い疑似暗号化を追加すると、この問題をある程度軽減できます。存在するCプログラム、例えば各バイトを定数(好ましくは0x80ビットセットを持つバイト)でXORするなどのマイナーなものです。これは実際のセキュリティを提供しません。プログラムにはスクリプトを「暗号解読」するロジックが含まれている必要があるため、すべてのアナリストが同じことを実行できます。これはわずかな「曖昧さによるセキュリティ」を提供するだけです。
ps
(少なくともシェルスクリプトの場合)ユーザーは別のウィンドウでコマンドを使用して実行されていることがわかるため、完全な解決策はありません。
もちろん、スクリプトのロジックが非常に敏感な場合、実際の答えはスクリプトをコンパイル可能な言語に翻訳することです。
(で適応ユーザーがスクリプトを破って使用するのを防ぐ.)