当需要写shell连接数据库取一些数据或备份等操作时,shell中可能包含数据库的用户密码等敏感信息,被一些不怀好意的人发现是你的灾难,出于安全的考虑需要对shell明文加密,使用shc 就可以把原shell编译为可执行程序(二进制),这样就无法再明文打开shell。
下面做个简单的测试:
[root@s19118 ~]# cat /etc/issue
Oracle Linux Server release 5.8
[root@s19118 ~]# uname -a
Linux s19118 2.6.32-300.10.1.el5uek #1 SMP Wed Feb 22 17:37:40 EST 2012 x86_64 x86_64 x86_64 GNU/Linux
1. Download shc and install it
2. Encrypt A Shell Script Using shc
3. Execute the Encrypted Shell Script
4. Specifying Expiration Date for Your Shell Script
# 也可以定义过期后的提示信息使用-m 选项如下
[root@s19118 shc-3.8.7]# ./shc -e 18/6/2013 -m "Contact dba@anbob.com for new version of this script" -f test.bash
Notice:
通过shc加密后的文件并不是不可以解密。
下面做个简单的测试:
[root@s19118 ~]# cat /etc/issue
Oracle Linux Server release 5.8
[root@s19118 ~]# uname -a
Linux s19118 2.6.32-300.10.1.el5uek #1 SMP Wed Feb 22 17:37:40 EST 2012 x86_64 x86_64 x86_64 GNU/Linux
1. Download shc and install it
[root@s19118 ~]# wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.7.tgz
--2013-06-18 16:32:08-- http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.7.tgz
Resolving www.datsi.fi.upm.es... 138.100.9.22
Connecting to www.datsi.fi.upm.es|138.100.9.22|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 20498 (20K) [application/x-gzip]
Saving to: `shc-3.8.7.tgz'
100%[=======================================================>] 20,498 11.1K/s in 1.8s
2013-06-18 16:32:12 (11.1 KB/s) - `shc-3.8.7.tgz' saved [20498/20498]
[root@s19118 ~]# tar zxvf shc-3.8.7.tgz
shc-3.8.7/CHANGES
shc-3.8.7/Copying
shc-3.8.7/Makefile
shc-3.8.7/match
shc-3.8.7/pru.sh
shc-3.8.7/shc-3.8.7.c
shc-3.8.7/shc.1
shc-3.8.7/shc.README
shc-3.8.7/shc.c
shc-3.8.7/shc.html
shc-3.8.7/test.bash
shc-3.8.7/test.csh
shc-3.8.7/test.ksh
[root@s19118 ~]# cd shc-3.8.7
[root@s19118 shc-3.8.7]# ls
CHANGES Copying Makefile match pru.sh shc.1 shc-3.8.7.c shc.c shc.html shc.README test.bash test.csh test.ksh
[root@s19118 shc-3.8.7]# make
[root@s19118 shc-3.8.7]# ./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. Encrypt A Shell Script Using shc
[root@s19118 shc-3.8.7]# ./test.bash
+ echo '$@ is '
$@ is
+ echo 'command line: ./test.bash '
command line: ./test.bash
+ echo 'hello world'
hello world
+ echo '[26053] PAUSED... Hit return!'
[26053] PAUSED... Hit return!
+ read DUMMY
+ exit 0
[root@s19118 shc-3.8.7]# cat test.bash
#!/bin/bash -x
echo "\\$@ is $@"
echo "command line: $0 $*"
echo "hello world"
# Added
echo "[$$] PAUSED... Hit return!"
read DUMMY
exit 0
[root@s19118 shc-3.8.7]# ./shc -f test.bash
# 加密后生成两文件.x.c C源文件,.x可执行文件
-rw-r--r-- 1 root root 9905 Jun 18 16:39 test.bash.x.c
-rwx--x--x 1 root root 11840 Jun 18 16:39 test.bash.x
[root@s19118 shc-3.8.7]# strings test.bash.x|head
/lib64/ld-linux-x86-64.so.2
__gmon_start__
libc.so.6
sprintf
perror
fork
time
_exit
getpid
kill
[root@s19118 shc-3.8.7]# strings test.bash.x.c|head
#if 0
shc Version 3.8.7, Generic Script Compiler
Copyright (c) 1994-2009 Francisco Rosales
./shc -f test.bash
#endif
static char data [] =
#define opts_z 3
#define opts ((&data[0]))
"\\266\\246\\304"
#define tst2_z 19
[root@s19118 shc-3.8.7]# file test.bash.x
test.bash.x: ELF 64-bit LSB executable, AMD x86-64, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), stripped
[root@s19118 shc-3.8.7]# file test.bash.x.c
test.bash.x.c: ASCII C program text
3. Execute the Encrypted Shell Script
[root@s19118 shc-3.8.7]# ./test.bash.x
+ echo '$@ is '
$@ is
+ echo 'command line: ./test.bash.x '
command line: ./test.bash.x
+ echo 'hello world'
hello world
+ echo '[25194] PAUSED... Hit return!'
[25194] PAUSED... Hit return!
+ read DUMMY
+ exit 0
4. Specifying Expiration Date for Your Shell Script
# 可以用shc 指定文件的过期时间,过了那个时间用户再调用执行文件会报错。
[root@s19118 shc-3.8.7]# rm test.bash.x*
rm: remove regular file `test.bash.x'? yes
rm: remove regular file `test.bash.x.c'? yes
#日期格式是dd/mm/yyyy
[root@s19118 shc-3.8.7]# ./shc -e 18/6/2013 -f test.bash
[root@s19118 shc-3.8.7]# date
Tue Jun 18 17:02:06 CST 2013
[root@s19118 shc-3.8.7]# ./test.bash.x
./test.bash.x: has expired!
Please contact your provider
[root@s19118 shc-3.8.7]# date -s "20130617"
Mon Jun 17 00:00:00 CST 2013
[root@s19118 shc-3.8.7]# ./test.bash.x
+ echo '$@ is '
$@ is
+ echo 'command line: ./test.bash.x '
command line: ./test.bash.x
+ echo 'hello world'
hello world
+ echo '[22106] PAUSED... Hit return!'
[22106] PAUSED... Hit return!
+ read DUMMY
# 也可以定义过期后的提示信息使用-m 选项如下
[root@s19118 shc-3.8.7]# ./shc -e 18/6/2013 -m "Contact dba@anbob.com for new version of this script" -f test.bash
Notice:
通过shc加密后的文件并不是不可以解密。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




