shell 脚本加密

前端之家收集整理的这篇文章主要介绍了shell 脚本加密前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

想想好久没更新博客了,今天在群里看到讨论关于shell脚本加密的事情。

想想也是,我们在写脚本有时候会配置相关账号和密码的事情,这样只要能权限都能看到该信息,非常的不安全,有没有在正常运行的情况下对文件进行加密。大致有以下两个特点:

  1. 加密文件,防止别人看到我写的具体内容

  2. 可以对隐藏敏感性知识点,比如脚本涉及到用户和密码,如MysqL

    我特意搜了一下,有两种方法,涨知识了,所以验证了一下,过程如下:


第一种方法(gzexe):基于ubuntu14.04

这种加密方式不是非常保险的方法,但是能够满足一般的加密用途。它是使用系统自带的gzexe程序,它不但加密,同时压缩文件

使用方法: gzexe file.sh 它会把原来没有加密的文件备份为 xx.sh~,同时 xx.sh 即被变成加密文件

root@leco:~/test#ls
test.sh
root@leco:~/test#cattest.sh
#!/bin/bash
echo`date`
root@loocha50:~/test#shtest.sh
MonJul1715:08:01HKT2017
root@loocha50:~/test#gzexetest.sh
test.sh:25.0%
root@loocha50:~/test#ls
test.shtest.sh~
root@loocha50:~/test#shtest.sh
MonJul1715:08:14HKT2017
root@loocha50:~/test#shtest.sh~
MonJul1715:08:18HKT2017
root@loocha50:~/test#cattest.sh~
#!/bin/bash
echo`date`
root@loocha50:~/test#cattest.sh
#!/bin/bash
skip=44
tab=''
nl='
'
IFS="$tab$nl"
umask=`umask`
umask77
gztmpdir=
trap'res=$?
test-n"$gztmpdir"&&rm-fr"$gztmpdir"
(exit$res);exit$res
'01235101315
iftypemktemp>/dev/null2>&1;then
gztmpdir=`mktemp-dt`
else
gztmpdir=/tmp/gztmp$$;mkdir$gztmpdir
fi||{(exit127);exit127;}
gztmp=$gztmpdir/$0
case$0in
-*|*/*'
')mkdir-p"$gztmp"&&rm-r"$gztmp";;
*/*)gztmp=$gztmpdir/`basename"$0"`;;
esac||{(exit127);exit127;}
case`echoX|tail-n+12>/dev/null`in
X)tail_n=-n;;
*)tail_n=;;
esac
iftail$tail_n+$skip<"$0"|gzip-cd>"$gztmp";then
umask$umask
chmod700"$gztmp"
(sleep5;rm-fr"$gztmpdir")2>/dev/null&
"$gztmp"${1+"$@"};res=$?
else
echo>&2"Cannotdecompress$0"
(exit127);res=127
fi;exit$res

此时我们可以看出test.sh 文件已经被加密了,但是不影响运行。此时你删除test.sh~ 文件,别人就彻底看不到了(自己也看不到,请酌情删除)。

root@leco:~/test#ls
test.shtest.sh~
root@leco:~/test#rmtest.sh~
root@leco:~/test#ls
test.sh
root@leco:~/test#shtest.sh
MonJul1715:10:36HKT2017

建议使用,一方面系统自带命令,达到目的即可,没人闲的破解你的脚本,就算要破解,先进入你系统再说。


我基于centos6.8 (ubuntu14.04有问题,没具体排查)

方法2: shc

shc 常用参数

-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(编译的详细情况)

shc是一个专业的加密shell脚本的工具.它的作用是把shell脚本转换为一个可执行的二进制文件,这个办法也很好的解决了脚本中含有IP、密码等不希望公开的问题

包下载链接

http://www.datsi.fi.upm.es/~frosal/sources/

[root@leco~]#wgethttp://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.6.tgz
--2017-07-1715:23:39--http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.6.tgz
Resolvingwww.datsi.fi.upm.es...138.100.9.22
Connectingtowww.datsi.fi.upm.es|138.100.9.22|:80...connected.
HTTPrequestsent,awaitingresponse...200OK
Length:35071(34K)[application/x-gzip]
Savingto:“shc-3.8.6.tgz”
100%[=============================================================================================================================>]35,07121.9K/sin1.6s
2017-07-1715:23:46(21.9KB/s)-“shc-3.8.6.tgz”saved[35071/35071]
[root@leco~]#tarxfshc-3.8.6.tgz
[root@leco~]#mkdir-p/usr/local/man/man1

这步是必须的,不然安装过程中会报错,shc将安装命令到/usr/local/bin/目录下;

将帮助文档存放在/usr/local/man/man1/目录下,如果系统中无此目录,安装时会报错,可创建此目录后再执行安装。

[root@leco~]#cdshc-3.8.6
[root@lecoshc-3.8.6]#makeinstall
***Installingshcandshc.1on/usr/local
***Doyouwanttocontinue?y#此时等待输入y
install-c-sshc/usr/local/bin/
install-c-m644shc.1/usr/local/man/man1/
使用方法:-f
[root@lecotest]#cattest.sh
#!/bin/bash
echo`date`
[root@lecotest]#shc-r-ftest.sh
test.sh.x.c:Infunction'chkenv':
test.sh.x.c:211:warning:castfrompointertointegerofdifferentsize
Youhavenewmailin/var/spool/mail/root
[root@lecotest]#ls
test.shtest.sh.xtest.sh.x.c
运行后会生成两个文件,xx.x和xx.x.c.


其中xx.x是加密后的可执行的二进制文件;用./xx.x即可运行,xx.x.c是生成xx.x的原文件(c语言).

不建议使用,需要单独安装管理,比较麻烦。如果安全性要求极高,倒是可以参数。

猜你在找的Bash相关文章