设为首页 收藏本站
查看: 944|回复: 0

shell 脚本加密

[复制链接]

尚未签到

发表于 2018-8-22 10:49:13 | 显示全部楼层 |阅读模式
  想想好久没更新博客了,今天在群里看到讨论关于shell脚本加密的事情。
  想想也是,我们在写脚本有时候会配置相关账号和密码的事情,这样只要能权限都能看到该信息,非常的不安全,有没有在正常运行的情况下对文件进行加密。大致有以下两个特点:

  •   加密文件,防止别人看到我写的具体内容。
  •   可以对隐藏敏感性知识点,比如脚本涉及到用户和密码,如mysql
      我特意搜了一下,有两种方法,涨知识了,所以验证了一下,过程如下:
  第一种方法(gzexe):基于ubuntu14.04
  这种加密方式不是非常保险的方法,但是能够满足一般的加密用途。它是使用系统自带的gzexe程序,它不但加密,同时压缩文件。
  使用方法: gzexe file.sh 它会把原来没有加密的文件备份为 xx.sh~ ,同时 xx.sh 即被变成加密文件
root@leco:~/test# ls  
test.sh
  
root@leco:~/test# cat test.sh
  
#!/bin/bash
  
echo `date`
  
root@loocha50:~/test# sh test.sh
  
Mon Jul 17 15:08:01 HKT 2017
  
root@loocha50:~/test# gzexe  test.sh
  
test.sh: 25.0%
  
root@loocha50:~/test# ls
  
test.sh  test.sh~
  
root@loocha50:~/test# sh test.sh
  
Mon Jul 17 15:08:14 HKT 2017
  
root@loocha50:~/test# sh test.sh~
  
Mon Jul 17 15:08:18 HKT 2017
  
root@loocha50:~/test# cat test.sh~
  
#!/bin/bash
  
echo `date`
  
root@loocha50:~/test# cat test.sh
  
#!/bin/bash
  
skip=44
  
tab=''
  
nl='
  
'
  
IFS=" $tab$nl"
  
umask=`umask`
  
umask 77
  
gztmpdir=
  
trap 'res=$?
  
  test -n "$gztmpdir" && rm -fr "$gztmpdir"
  
  (exit $res); exit $res
  
' 0 1 2 3 5 10 13 15
  
if type mktemp >/dev/null 2>&1; then
  
  gztmpdir=`mktemp -dt`
  
else
  
  gztmpdir=/tmp/gztmp$$; mkdir $gztmpdir
  
fi || { (exit 127); exit 127; }
  
gztmp=$gztmpdir/$0
  
case $0 in
  
-* | */*'
  
') mkdir -p "$gztmp" && rm -r "$gztmp";;
  
*/*) gztmp=$gztmpdir/`basename "$0"`;;
  
esac || { (exit 127); exit 127; }
  
case `echo X | tail -n +1 2>/dev/null` in
  
X) tail_n=-n;;
  
*) tail_n=;;
  
esac
  
if tail $tail_n +$skip  "$gztmp"; then
  
  umask $umask
  
  chmod 700 "$gztmp"
  
  (sleep 5; rm -fr "$gztmpdir") 2>/dev/null &
  
  "$gztmp" ${1+"$@"}; res=$?
  
else
  
  echo >&2 "Cannot decompress $0"
  
  (exit 127); res=127
  
fi; exit $res
  此时我们可以看出test.sh 文件已经被加密了,但是不影响运行。此时你删除test.sh~ 文件,别人就彻底看不到了(自己也看不到,请酌情删除)。
root@leco:~/test# ls  
test.sh  test.sh~
  
root@leco:~/test# rm test.sh~
  
root@leco:~/test# ls
  
test.sh
  
root@leco:~/test# sh test.sh
  
Mon Jul 17 15:10:36 HKT 2017
  建议使用,一方面系统自带命令,达到目的即可,没人闲的破解你的脚本,就算要破解,先进入你系统再说。
  我基于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  >  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 ~]# wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.6.tgz  
--2017-07-17 15:23:39--  http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.6.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: 35071 (34K) [application/x-gzip]
  
Saving to: “shc-3.8.6.tgz”
  
100%[=============================================================================================================================>] 35,071      21.9K/s   in 1.6s
  
2017-07-17 15:23:46 (21.9 KB/s) - “shc-3.8.6.tgz” saved [35071/35071]
  
[root@leco ~]# tar xf shc-3.8.6.tgz
  
[root@leco ~]# mkdir -p /usr/local/man/man1
  这步是必须的,不然安装过程中会报错,shc将安装命令到/usr/local/bin/目录下;
  将帮助文档存放在/usr/local/man/man1/目录下,如果系统中无此目录,安装时会报错,可创建此目录后再执行安装。
[root@leco ~]# cd shc-3.8.6  
[root@leco shc-3.8.6]# make install
  
***Installing shc and shc.1 on /usr/local
  
***Do you want to continue? y  #此时等待输入y
  
install -c -s shc /usr/local/bin/
  
install -c -m 644 shc.1 /usr/local/man/man1/
  
使用方法:-f
  
[root@leco test]# cat test.sh
  
#!/bin/bash
  
echo `date`
  
[root@leco test]#  shc -r -f test.sh
  
test.sh.x.c: In function 'chkenv':
  
test.sh.x.c:211: warning: cast from pointer to integer of different size
  
You have new mail in /var/spool/mail/root
  
[root@leco test]# ls
  
test.sh  test.sh.x  test.sh.x.c
  
运行后会生成两个文件,xx.x 和 xx.x.c.
  其中xx.x是加密后的可执行的二进制文件;用./xx.x即可运行,xx.x.c是生成xx.x的原文件(c语言).
  不建议使用,需要单独安装管理,比较麻烦。如果安全性要求极高,倒是可以参数。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-555030-1-1.html 上篇帖子: 23.Shell正则-grep,sed 下篇帖子: shell循环结构之while循环
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表