Q :Làm cách nào để mã hóa tập lệnh bash shell của tôi trên môi trường Linux? Tập lệnh shell chứa mật khẩu và tôi không muốn những người khác có quyền truy cập thực thi để xem tập lệnh shell và lấy mật khẩu. Có cách nào để mã hóa tập lệnh shell của tôi không?
Đ: Đầu tiên, như một phương pháp hay nhất, bạn không nên mã hóa tập lệnh shell của mình. Bạn thực sự nên ghi lại tập lệnh shell của mình một cách chính xác để bất kỳ ai xem nó đều hiểu chính xác những gì nó làm. Nếu nó chứa thông tin nhạy cảm như mật khẩu, bạn nên tìm ra một cách tiếp cận khác để viết tập lệnh shell mà không cần phải mã hóa nó.
Điều đó đang được nói, nếu bạn vẫn khăng khăng muốn mã hóa một tập lệnh shell, bạn có thể sử dụng tiện ích SHC như được giải thích bên dưới. Xin lưu ý rằng tập lệnh shell được mã hóa do shc tạo ra không thể đọc được bởi người dùng bình thường. Tuy nhiên, ai đó hiểu cách hoạt động của nó có thể trích xuất tập lệnh shell gốc từ tệp nhị phân được mã hóa do shc tạo ra.
SHC là viết tắt của trình biên dịch kịch bản shell.
1. Tải xuống shc và cài đặt nó
Tải xuống shc và cài đặt nó như hình dưới đây.
# 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
Xác minh rằng shc được cài đặt đúng cách.
$ ./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. Tạo tập lệnh Shell mẫu
Tạo một tập lệnh shell bash mẫu mà bạn muốn mã hóa bằng cách sử dụng shc cho mục đích thử nghiệm.
Đối với mục đích thử nghiệm, chúng ta hãy tạo tập lệnh shell random.sh sau để tạo các số ngẫu nhiên. Bạn phải chỉ định bao nhiêu số ngẫu nhiên bạn muốn tạo.
$ 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. Mã hóa Tập lệnh Shell bằng shc
Mã hóa tập lệnh shell random.sh bằng shc như được hiển thị bên dưới.
$ ./shc -f random.sh
Thao tác này sẽ tạo hai tệp sau:
$ 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 là tập lệnh shell ban đầu không được mã hóa
- random.sh.x là tập lệnh shell được mã hóa ở định dạng nhị phân
- random.sh.x.c là mã nguồn C của tệp random.sh. Mã nguồn C này được biên dịch để tạo tệp random.sh.x được mã hóa ở trên. Toàn bộ logic đằng sau shc là chuyển đổi tập lệnh shell random.sh thành chương trình C random.sh.x.c (và tất nhiên là biên dịch nó để tạo ra tệp thực thi 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. Thực thi Script Shell được mã hóa
Bây giờ, chúng ta hãy thực thi tập lệnh shell được mã hóa để đảm bảo nó hoạt động như mong đợi.
$ ./random.sh.x How many random numbers do you want to generate? 3 7489 10494 29627
Xin lưu ý rằng bản thân hệ nhị phân vẫn phụ thuộc vào shell (dòng đầu tiên được cung cấp trong random.sh. I.e / bin / bash) để có thể thực thi tập lệnh.
5. Chỉ định Ngày hết hạn cho Tập lệnh Shell của bạn
Sử dụng shc, bạn cũng có thể chỉ định ngày hết hạn. tức là Sau ngày hết hạn này khi ai đó cố gắng thực thi tập lệnh shell, họ sẽ nhận được thông báo lỗi.
Hãy để chúng tôi nói rằng bạn không muốn bất kỳ ai thực thi random.sh.x sau ngày 31 tháng 12 năm 2011 (tôi đã sử dụng ngày năm ngoái cho mục đích thử nghiệm).
Tạo một tập lệnh shell được mã hóa mới bằng cách sử dụng tùy chọn "shc -e" để chỉ định ngày hết hạn. Ngày hết hạn được chỉ định ở định dạng dd / mm / yyyy.
$ ./shc -e 31/12/2011 -f random.sh
Trong ví dụ này, nếu ai đó cố gắng thực thi random.sh.x, sau ngày 31 tháng 12 năm 2011, họ sẽ nhận được thông báo hết hạn mặc định như được hiển thị bên dưới.
$ ./random.sh.x ./random.sh.x: has expired! Please contact your provider
Nếu bạn muốn chỉ định thông báo hết hạn tùy chỉnh của riêng mình, hãy sử dụng tùy chọn -m (cùng với tùy chọn -e như được hiển thị bên dưới).
$ ./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. Tạo Tập lệnh Shell được mã hóa có thể phân phối lại
Ngoài -e và -m (cho hết hạn), bạn cũng có thể sử dụng các tùy chọn sau:
- -r sẽ nới lỏng bảo mật để tạo tệp nhị phân có thể phân phối lại, thực thi trên các hệ thống khác chạy cùng hệ điều hành với hệ điều hành đã được biên dịch.
- -T sẽ cho phép các tệp nhị phân được tạo có thể theo dõi bằng các chương trình như strace, ltrace, v.v.
- -v là dài dòng
Thông thường, bạn có thể muốn sử dụng cả tùy chọn -r và -T để lấy một tập lệnh shell mã hóa shell có thể phân phối lại và có thể tracable như được hiển thị bên dưới.
$ ./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
Cuối cùng, cần nhắc lại một lần nữa:Bạn không nên mã hóa tập lệnh shell của mình ngay từ đầu. Tuy nhiên, nếu bạn quyết định mã hóa tập lệnh shell của mình bằng shc, hãy nhớ rằng một người thông minh vẫn có thể tạo tập lệnh shell ban đầu từ tệp nhị phân được mã hóa được tạo bởi shc.