shell脚本脱敏

在实际生产环境中我们会碰到自动化脚本的编写过程中会写入账号密码的情况,加入此服务器被入侵或者其他人员无意中获得访问此服务器的权限,那么密码就完全暴露在非授权人员的眼前,系统数据安全岌岌可危。
所以我们需要对这部分数据进行加密处理.虽然现在的gpg加密软件虽然能够更强的保证数据安全,但是此软件加密后的文件不能够执行,从而丧失了shell脚本的作用。此处选择shc进行文件脱敏,因为此种功能只是将shell源码编译成c语言执行文件,所以严格意义上说并非加密。但是此种方法确实能够实现脱敏。

安装

wget http://www.datsi.fi.upm.es/%7Efrosal/sources/shc-3.8.7.tgz
yum install make gcc
make test
make string 
touch -p  /usr/local/man/man1/
make install

使用

执行以下命令会生成一个可执行的脚本

shc -v -f a.sh

执行之后会生成a.sh.x
a.sh.x.c,a.sh.x.c是c语言源码文件,a.sh.x是通过c源码文件编译成的二进制文件。
通常采取的策略是删除a.sh.x.c文件,a.sh.x是直接可以执行的脚本文件,将这个文件重命名为a.sh就可以了。

当我们需要把脚本文件拷贝到其他服务器上执行的时候使用上面的语句生成的a.sh.x还不行,还需要添加一个参数-r。
-r Relax security. Make a redistributable binary which executes on different systems running the same operating system.

shc -v -r -f a.sh

至此脚本脱敏已完成

注意

由于此种方法只是通过编译的二进制的方式进行加密,所以通过逆向的方式还是有一定几率还原出脚本内容的,所以不算真正的加密。我没有实践过,但是原理上还原出来是可行的。