ถาม :ฉันจะเข้ารหัส 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 [email protected] for new version of this script" -f random.sh $ ./random.sh.x ./random.sh.x: has expired! Contact [email protected] 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 ได้