如果你的shell指令碼包含了敏感的口令或者其它重要資訊, 而且你不希望使用者通過ps -ef(檢視系統每個程序的狀態)捕獲敏感資訊. 你可以使用shc工具來給shell指令碼增加一層額外的安全保護. shc是乙個指令碼編譯工具, 使用rc4加密演算法, 它能夠把shell程式轉換成二進位制可執行檔案(支援靜態鏈結和動態鏈結). 該工具能夠很好的支援: 需要加密, 解密, 或者通過命令引數傳遞口令的環境.
shc主頁:
現在的版本是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
然後 # ln -s /usr/bin/gcc34 /usr/bin/cc
安裝:
# wget 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還可以設定指令碼的執行期限和自定義返回資訊:
shc -e 03/31/2007 -m 「the mysql backup script is now out of date.」 -f mysql_back.sh
-e表示指令碼將在2023年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加密shell指令碼
採用shc工具加密shell指令碼,以提高shell指令碼檔案的安全性。介紹 當我們寫的shell指令碼,存在有敏感資訊如賬號密碼,於是想加強指令碼的安全性 還有不想讓別人檢視 修改您的shell核心 等等情況。都可使用以下工具進行加密。shc是乙個指令碼編譯工具,使用rc4加密演算法,它能夠把sh...
shc加密shell指令碼
1.加壓shc 3.8.9b.tgz tar xzvf shc 3.8.9b.tgz cd shc 3.8.9b 2.建立幫助文件目錄 mkdir p usr local man man1 3.安裝 make install 4.安裝完,加密test.sh shc r t f test.sh 如果要...
Shell 指令碼加密工具 shc
為什麼要加密shell指令碼呢?當然是為了安全!可能指令碼裡面涉及到密碼之類的就需要進行加密了 要保護自己編寫的shell指令碼程式,方法有很多,最簡單的方法有兩種 1 加密 2 設定過期時間,下面以shc工具為例說明 shc是乙個加密shell指令碼的工具.它的作用是把shell指令碼轉換為乙個可...