Computer >> 컴퓨터 >  >> 프로그램 작성 >> BASH 프로그래밍

SHC를 사용하여 Linux에서 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

그러면 다음과 같은 두 개의 파일이 생성됩니다.

$ 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

이 예에서 누군가 random.sh.x를 실행하려고 하면 2011년 12월 31일 이후에 아래와 같이 기본 만료 메시지를 받게 됩니다.

$ ./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에 의해 생성된 암호화된 바이너리에서 원래 셸 스크립트를 생성할 수 있음을 기억하십시오.