加密shell命令

第一種方法(gzexe):
這種加密方式不是非常保險的方法,但是能夠滿足一般的加密用途,可以隱蔽腳本中的密碼等信息。
它是使用系統自帶的gzexe程序,它不但加密,同時壓縮文件。
使用方法:
gzexe file.sh
它會把原來沒有加密的文件備份爲 file.sh~ ,同時 file.sh 即被變成加密文件;

第二種方法(shc):
使用 shc 對 Linux shell 腳本加密.
shc是一個專業的加密shell腳本的工具.它的作用是把shell腳本轉換爲一個可執行的二進制文件,這個辦法很好的解決了腳本中含有IP、密碼等不希望公開的問題.
shc的下載地址:              
http://download.chinaunix.net/download/0010000/9479.shtml
安裝:
tar zxvf shc-3.8.tgz
cd shc-3.8
make test
make
make test
make strings
make install
使用方法:
shc -r -f script-name
運 行後會生成兩個文件,script-name.x 和 script-name.x.c.   其中script-name.x是加密後的可執行的二進制文件;用./script-name即可運行,script-name.x.c是生成 script-name.x的原文件(c語言).

 

-----------------------------------------------------------------------

 

如果你的shell腳本包含了敏感的口令或者其它重要信息, 而且你不希望用戶通過ps -ef(查看系統每個進程的狀態)捕獲敏感信息. 你可以使用shc工具來給shell腳本增加一層額外的安全保護. shc是一個腳本編譯工具, 使用RC4加密算法, 它能夠把shell程序轉換成二進制可執行文件(支持靜態鏈接和動態鏈接). 該工具能夠很好的支持: 需要加密, 解密, 或者通過命令參數傳遞口令的環境.

shc主頁: 
http://www.datsi.fi.upm.es/%7Efrosal/

現在的版本是3.8.6(shc-3.8.6.tgz), 以此爲例介紹shc的安裝及應用:

準備:
首先你需要檢查系統是否安裝了gcc編譯器, 以Fedora Core 6爲例介紹gcc的檢查和安裝: 
# rpm -qa|grep compat-gcc 
compat-gcc-34-3.4.6-4 
如果沒有安裝, 按下面步驟安裝gcc 
# wget ftp://mirrors.kernel.org/fedora/core/6/i386/os/Fedora/RPMS/compat-gcc-34-3.4.6-4.i386.rpm 
然後 
# ln -s /usr/bin/gcc34 /usr/bin/cc

安裝:
# wget http://www.datsi.fi.upm.es/%7Efrosal/sources/shc-3.8.6.tgz 
# tar vxf shc-3.8.6.tgz 
# cd shc-3.8.6 
# make test 
# make strings 
# make install

應用:
下面以mysql數據庫備份(備份文件通過ftp上傳到一臺遠程的服務器)腳本爲例: 
############################### mysql_backup.sh ############################## 
#!/bin/sh

newtime=`date +%m-%d-%y_%I%M%p` 
mysqldump -u ****** -p ****** dbname | gzip > /Users/****/Documents/dbName_$newtime.sql.gz 
echo “backup of dbname” 
curl –upload-file dbname$newtime.sql.gz –url “ftp://*****:*****@host/” 
echo “ftp of dbname done”

############################### mysql_backup.sh ##############################

1). 加密腳本.

# shc -v -f mysql_backup.sh 
-v: 是verbose模式,輸出更詳細編譯日誌. -f: 指定腳本的名稱.

上面命令在屏幕上的輸出: 
shc shll=sh 
shc [-i]=-c 
shc [-x]=exec ‘%s’ “$@” 
shc [-l]= 
shc opts= 
shc: cc mysql_backup.sh.x.c -o mysql_backup.sh.x 
shc: strip mysql_backup.sh.x 
shc: chmod go-r mysql_backup.sh.x

我們可以看到生成了動態鏈接可執行二進制文件mysql_back.sh.x和C源文件mysql_backup.sh.x.c, 注意生成的二進制文件因爲是動態鏈接形式, 所以在其它平臺上不能運行:

mysql_backup.sh.x: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), 
dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped

2). 生成靜態鏈接的二進制可執行文件.

不過, 我們可以通過下面的方法生成一個靜態鏈接的二進制可執行文件:

# CFLAGS=-static shc -r -f mysql_backup.sh 
# file mysql_backup.sh.x 
mysql_backup.sh.x: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), 
statically linked, for GNU/Linux 2.6.9, stripped

提示: 通過sch加密後的腳本文件很安全嗎? 
一般來說是安全的, 不過可以使用gdb和其它的調試工具獲得最初的源代碼. 如果你需要更加安全的方法, 可以考慮使用wzshSDK.

另外, sch還可以設置腳本的運行期限和自定義返回信息: 
shc -e 03/31/2007 -m “the mysql backup script is now out of date.” -f mysql_back.sh

-e表示腳本將在2007年3月31日前失效, 並根據-m定義的信息返回給終端用戶.

3). 二進制文件的剖析
有興趣的朋友可以參閱下面的文章: 
Paranoid Penguin - Limitations of shc, a Shell Encryption Utility

你好 shc 能不能在64位的機子上運行我有臺64位的服務器 OS 爲64位的rhel4up2 執行加密後的腳本出錯 
test.sh.x: has expired! 
Please contact your provider 
是什麼問題 估計在運行命令的時候-e選項指定的日期已經失效, 注意看一下服務器的時間是否正確.

在64(OS爲64位)位的機子加-e 和不加 -e 還是報那樣的錯誤,服務器的時間沒有問題,我在32位的機子上測試完全正常,你可以在64位測試以下

 

 

 

下面就說明一下shc的安裝,參數,以及使用示例:
下載安裝:
(官網下載地址: http://www.datsi.fi.upm.es/~frosal/sources/)
# wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.7.tgz
# cd shc-3.8.7
# make
# make install
(僅用make就可以完成安裝,運行shc時要指出絕對路徑;用make install,將shc安裝到/usr/local/bin下,可以直接運行)

常用參數:
-e date 
Expiration date in dd/mm/yyyy format [none](指定過期日期)

-m message
message to display upon expiration ["Please contact your provider"](指定過期提示的信息)

-f script_name
File name of the script to compile(指定要編譯的shell的路徑及文件名)

-r Relax security. 
Make a redistributable binary which executes on different systems running the same operat-ing system.(可以相同操作系統的不同系統中執行)

-v Verbose compilation(編譯的詳細情況)

使用示例:
[root@centos54 tmp]# /usr/local/src/shc-3.8.7/shc -e 20/10/2010 -m "contact [email protected]" -v -r -f ./ex.sh
-e:指定過期時間爲2010年10月20日
-m:過期後打印出的信息;
-v: verbose
-r: 可在相同操作系統的不同主機上執行
-f: 指定源shell
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章