BASHプログラミング
 Computer >> コンピューター >  >> プログラミング >> BASHプログラミング

Linux で SHC を使用して Bash シェル スクリプトを暗号化する方法

質問 :Linux 環境で bash シェル スクリプトを暗号化するにはどうすればよいですか?シェル スクリプトにはパスワードが含まれており、実行アクセス権を持つ他のユーザーにシェル スクリプトを表示してパスワードを取得させたくありません。シェル スクリプトを暗号化する方法はありますか?

A: まず、ベスト プラクティスとして、シェル スクリプトを暗号化しないでください。シェル スクリプトを適切に文書化して、それを見た人がその機能を正確に理解できるようにする必要があります。パスワードなどの機密情報が含まれている場合は、暗号化せずにシェル スクリプトを作成する別の方法を見つける必要があります。

そうは言っても、それでもシェル スクリプトを暗号化する必要がある場合は、以下で説明する SHC ユーティリティを使用できます。 shc によって作成された暗号化されたシェル スクリプトは、通常のユーザーには読み取れないことに注意してください。ただし、これがどのように機能するかを理解している人は、shc によって作成された暗号化されたバイナリから元のシェル スクリプトを抽出できます。

SHC は、シェル スクリプト コンパイラの略です。

1. shc をダウンロードしてインストール

shc をダウンロードして、以下に示すようにインストールします。

# wget https://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.7.tgz
# tar xvfz shc-3.8.7.tgz
# cd shc-3.8.7
# make

shc が正しくインストールされていることを確認してください。

$ ./shc -v
shc parse(-f): No source file specified

shc Usage: shc [-e date] [-m addr] [-i iopt] [-x cmnd] [-l lopt] [-rvDTCAh] -f script

2.サンプル シェル スクリプトを作成する

テスト目的で shc を使用して暗号化するサンプルの bash シェル スクリプトを作成します。

テスト目的で、乱数を生成する次の random.sh シェル スクリプトを作成してみましょう。生成する乱数の数を指定する必要があります。

<センター>
$ vi random.sh
#!/bin/bash

echo -n "How many random numbers do you want to generate? "
read max

for (( start = 1; start <= $max; start++ ))
do
 echo -e $RANDOM
done

$ ./random.sh
How many random numbers do you want to generate? 3
24682
1678
491

3. shc を使用してシェル スクリプトを暗号化する

以下に示すように、shc を使用して random.sh シェル スクリプトを暗号化します。

$ ./shc -f random.sh

これにより、次の 2 つのファイルが作成されます:

$ ls -l random.sh*
-rwxrw-r--. 1 ramesh ramesh 149 Mar 27 01:09 random.sh
-rwx-wx--x. 1 ramesh ramesh 11752 Mar 27 01:12 random.sh.x
-rw-rw-r--. 1 ramesh ramesh 10174 Mar 27 01:12 random.sh.x.c
  • random.sh は元の暗号化されていないシェル スクリプトです
  • random.sh.x は、バイナリ形式の暗号化されたシェル スクリプトです
  • random.sh.x.c は、random.sh ファイルの C ソース コードです。この C ソース コードをコンパイルして、上記の暗号化された random.sh.x ファイルを作成します。 shc の背後にあるロジック全体は、random.sh シェル スクリプトを random.sh.x.c C プログラムに変換することです (もちろん、それをコンパイルして random.sh.x 実行可能ファイルを生成します)
$ file random.sh
random.sh: Bourne-Again shell script text executable

$ file random.sh.x
random.sh.x: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped

$ file random.sh.x.c
random.sh.x.c: ASCII C program text

4.暗号化されたシェル スクリプトを実行する

それでは、暗号化されたシェル スクリプトを実行して、期待どおりに動作することを確認しましょう。

$ ./random.sh.x
How many random numbers do you want to generate? 3
7489
10494
29627

バイナリ自体は、スクリプトの実行に使用できるシェル (random.sh で提供される最初の行、つまり /bin/bash) に依然依存していることに注意してください。

5.シェル スクリプトの有効期限の指定

shc を使用すると、有効期限を指定することもできます。つまり、誰かがシェル スクリプトを実行しようとすると、この有効期限が過ぎると、エラー メッセージが表示されます。

2011 年 12 月 31 日以降は、random.sh.x を誰も実行したくないとしましょう (昨年の日付をテスト目的で使用しました)。

「shc -e」オプションを使用して新しい暗号化シェル スクリプトを作成し、有効期限を指定します。有効期限は dd/mm/yyyy 形式で指定します。

$ ./shc -e 31/12/2011 -f random.sh

この例では、誰かが 2011 年 12 月 31 日以降に random.sh.x を実行しようとすると、以下に示すデフォルトの有効期限メッセージが表示されます。

$ ./random.sh.x
./random.sh.x: has expired!
Please contact your provider

独自のカスタム有効期限メッセージを指定したい場合は、-m オプションを (以下に示すように -e オプションと共に) 使用してください。

$ ./shc -e 31/12/2011 -m "Contact admin@thegeekstuff.com for new version of this script" -f random.sh

$ ./random.sh.x
./random.sh.x: has expired!
Contact admin@thegeekstuff.com for new version of this script

6.再配布可能な暗号化されたシェル スクリプトを作成する

-e と -m (有効期限用) 以外に、次のオプションも使用できます:

  • -r は、セキュリティを緩和して、コンパイルされたオペレーティング システムと同じオペレーティング システムを実行する他のシステムで実行される再配布可能なバイナリを作成します。
  • -T を使用すると、作成されたバイナリ ファイルを、strace、ltrace などのプログラムを使用して追跡できるようになります。
  • -v は冗長

通常、-r オプションと -T オプションの両方を使用して、以下に示すように、再配布可能で追跡可能なシェル暗号化シェル スクリプトを作成することをお勧めします。

$ ./shc -v -r -T -f random.sh
shc shll=bash
shc [-i]=-c
shc [-x]=exec '%s' "$@"
shc [-l]=
shc opts=
shc: cc random.sh.x.c -o random.sh.x
shc: strip random.sh.x
shc: chmod go-r random.sh.x

$ ./random.sh.x
How many random numbers do you want to generate? 3
28954
1410
15234

最後に、もう一度繰り返す価値があります。最初からシェル スクリプトを暗号化するべきではありません。ただし、shc を使用してシェル スクリプトを暗号化することにした場合でも、賢い人なら、shc によって作成された暗号化されたバイナリから元のシェル スクリプトを生成できることを覚えておいてください。


  1. Windows 10 に Linux Bash シェルをインストールする方法

    Bash Shell は、非常に長い間 Linux の一部であった単純なコマンドライン ユーティリティであり、現在、Microsoft はそれを Windows 10 に直接追加しています。これは、仮想マシンでも、コンテナーでも、Windows 用にコンパイルされたソフトウェアでもありません。代わりに、Linux ソフトウェアを実行するための完全な Windows サブシステムであり、Windows で Android アプリを実行するための Microsoft の廃止された Project Astoria に基づいています。 これで、デュアルモード オペレーティング システムとは何かがわか

  2. Bash Shell PS1:Angelina Jolie のような Linux プロンプトを作成する 10 の例

    f1r3storm85 提供の写真 前回の記事では、Linux 環境変数 PS[1-4] と PROMPT_COMMAND について説明しました。効果的に使用すれば、PS1 はコマンド プロンプトですぐに貴重な情報を提供できます。 トゥーム レイダーでは、アンジェリーナ ジョリーがすべてのガジェットと武器を指先で操作して、スタイリッシュに謎を解き明かします。アンジェリーナ・ジョリーのガジェットとスタイルは一致させるのが難しいですが、少なくとも、この記事で提供されている 10 の例を使用して、古き良き Linux プロンプトを非常に機能的でスタイリッシュなものにしてみましょう. 1.ユー