Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม BASH

วิธีเข้ารหัสสคริปต์ Bash Shell ของคุณบน Linux โดยใช้ SHC

ถาม :ฉันจะเข้ารหัส bash shell script บนสภาพแวดล้อม Linux ได้อย่างไร เชลล์สคริปต์มีรหัสผ่าน และฉันไม่ต้องการให้ผู้อื่นที่เรียกใช้งานเข้าถึงดูเชลล์สคริปต์และรับรหัสผ่าน มีวิธีเข้ารหัสเชลล์สคริปต์ของฉันหรือไม่

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. สร้างตัวอย่างเชลล์สคริปต์

สร้างตัวอย่างสคริปต์ bash shell ที่คุณต้องการเข้ารหัสโดยใช้ shc เพื่อการทดสอบ

เพื่อวัตถุประสงค์ในการทดสอบ ให้เราสร้างสคริปต์เชลล์ 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

เข้ารหัสสคริปต์เชลล์ random.sh โดยใช้ shc ดังที่แสดงด้านล่าง

$ ./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 คือซอร์สโค้ด C ของไฟล์ random.sh ซอร์สโค้ด 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 คุณยังสามารถระบุวันหมดอายุได้ นั่นคือ หลังจากวันที่หมดอายุนี้ เมื่อมีคนพยายามเรียกใช้เชลล์สคริปต์ พวกเขาจะได้รับข้อความแสดงข้อผิดพลาด

สมมติว่าคุณไม่ต้องการให้ใครดำเนินการ random.sh.x หลังจากวันที่ 31 ธันวาคม 2554 (ฉันใช้วันที่ปีที่แล้วเพื่อวัตถุประสงค์ในการทดสอบ)

สร้างเชลล์สคริปต์ที่เข้ารหัสใหม่โดยใช้ตัวเลือก "shc -e" เพื่อระบุวันหมดอายุ วันหมดอายุระบุไว้ในรูปแบบ วว/ดด/ปปปป

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

ในตัวอย่างนี้ หากมีคนพยายามเรียกใช้ random.sh.x หลังจากวันที่ 31 ธันวาคม 2554 พวกเขาจะได้รับข้อความการหมดอายุตามค่าเริ่มต้นดังที่แสดงด้านล่าง

$ ./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 คือ verbose

โดยทั่วไป คุณอาจต้องการใช้ทั้งตัวเลือก -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 ได้