Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình Bash

Bảo Mật Script Bash Trên Linux: Mã Hóa Dữ Liệu Nhạy Cảm Với SHC

Hỏi: Làm thế nào để mã hóa script shell bash trên môi trường Linux? Script shell chứa mật khẩu, và tôi không muốn người khác có quyền thực thi xem script và lấy mật khẩu. Có cách nào mã hóa script shell không?

Đáp: Trước hết, như một thực hành tốt, bạn không nên mã hóa script shell. Bạn nên viết tài liệu script đúng cách để bất kỳ ai xem đều hiểu chính xác nó làm gì. Nếu chứa thông tin nhạy cảm như mật khẩu, bạn nên tìm cách khác viết script mà không cần mã hóa.

Điều đó nói, nếu bạn vẫn kiên持 mã hóa script shell, bạn có thể dùng tiện ích SHC như giải thích dưới. Lưu ý script shell mã hóa bởi shc không đọc được bởi user bình thường. Tuy nhiên người hiểu cách hoạt động có thể trích xuất script gốc từ file nhị phân mã hóa do shc tạo.

SHC viết tắt của shell script compiler (trình biên dịch script shell).

1. Tải shc và cài đặt

Tải shc và cài đặt như dưới.

# 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 shc cài đặt đúng.

$ ./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 Script Shell Mẫu

Tạo script bash shell mẫu bạn muốn mã hóa bằng shc để test.

Với mục đích test, hãy tạo script random.sh sau tạo số ngẫu nhiên. Bạn phải chỉ định muốn tạo bao nhiêu số ngẫu nhiên.

$ 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 Script Shell Dùng shc

Mã hóa script shell random.sh dùng shc như sau.

$ ./shc -f random.sh

Điều này tạo ra hai file 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à script shell gốc chưa mã hóa
  • random.sh.x là script shell mã hóa ở định dạng nhị phân
  • random.sh.x.c là mã nguồn C của file random.sh. Mã nguồn C này được biên dịch để tạo file random.sh.x mã hóa ở trên. Toàn bộ logic sau shc là chuyển script shell random.sh thành chương trình C random.sh.x.c (và biên dịch để tạo file 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 Đã Mã Hóa

Giờ, hãy chạy script shell đã 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

Lưu ý file nhị phân vẫn phụ thuộc vào shell (dòng đầu trong random.sh, ví dụ /bin/bash) phải có sẵn để chạy script.

5. Chỉ Định Ngày Hết Hạn Cho Script Shell

Dùng shc bạn cũng có thể chỉ định ngày hết hạn. Tức là sau ngày này khi ai đó cố thực thi script, họ sẽ nhận thông báo lỗi.

Giả sử bạn không muốn ai thực thi random.sh.x sau 31-12-2011 (dùng ngày năm trước để test).

Tạo script mã hóa mới dùng tùy chọn "shc -e" để chỉ định ngày hết hạn. Ngày hết hạn định dạng dd/mm/yyyy.

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

Trong ví dụ này, nếu ai đó chạy random.sh.x sau 31-12-2011, họ sẽ nhận thông báo hết hạn mặc định như sau.

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

Nếu muốn thông báo hết hạn tùy chỉnh, dùng tùy chọn -m (cùng -e như sau).

$ ./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. Tạo Script Shell 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ể dùng các tùy chọn sau:

  • -r sẽ nới lỏng bảo mật để tạo nhị phân có thể phân phối lại chạy trên hệ thống khác chạy cùng hệ điều hành nơi nó được biên dịch.
  • -T cho phép file nhị phân tạo ra có thể trace bằng chương trình như strace, ltrace, v.v.
  • -v là cho verbose (chi tiết)

Thông thường bạn có thể muốn dùng cả -r và -T để tạo script shell mã hóa có thể phân phối lại và trace như sau.

$ ./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, đáng nhắc lại: Bạn không nên mã hóa script shell từ đầu. Nhưng, nếu quyết định mã hóa bằng shc, hãy nhớ người thông minh vẫn có thể tạo lại script gốc từ file nhị phân mã hóa do shc tạo.