你的shell脚本存在安全问题吗?

更多技术资料,请关注微信公众号“运维之美”

信息安全对于线上环境显得尤为重要,shell脚本的代码中可能经常会引用到密码等变量进行赋值等场景,但是在使用的过程中可能会导致环境的登录信息泄露,导致安全隐患,那么如何避免这种问题呢?本文从脚本中密码和文件的加密上来给出部分解决思路。

01 不使用明文密码

既然密码使用是场景需要,那么为了避免密码泄露,不使用明文密码,对密码进行加密处理是一种很好的方式。

base64加密用法

加密:echo "密码"|base64 -i

解密:echo "加过密的密码"|base64 -d

实例演示

[root@knode1 ~]# echo "test@123"|base64  #将密码通过base64加密变成加密密码
dGVzdEAxMjMK
[root@knode1 ~]# echo "dGVzdEAxMjMK"|base64 -d  #使用过程中解密
test@123

通过上面的加解密过程,我们可以应用到shell脚本的使用过程中,通过加密来传递密码参数,在一定程度上防止了密码泄露的风险。

shell脚本中应用场景

#!/bin/bash
dst_dir=/opt/package
dst_ip=192.168.0.1
package=$1
PASSWD=`echo 'dGVzdEAxMjMK' |base64 -d`
echo "开始文件传输..........................."

/usr/bin/expect <<EOF
set timeout 3000  #设置文件传输超时时间
spawn  scp  -P 2202  -o StrictHostKeyChecking=no  $package  root@$dst_ip:$dst_dir
expect {
        "*yes/no" { send "yes\r"; exp_continue }
        "*password:" { send "$PASSWD\r" }
}
expect eof
EOF
echo "执行结束..............."

如上所示,在scp远程拷贝文件的场景中,密码交互通过加密方式替代明文密码的传递

02 shell脚本加密处理

base64其实是可以反向解密的,对于此问题,还可以通过对脚本文件进行加密处理,使用某种手段加密,让脚本文件其不可读但是可执行,极大的提高的安全性,这样即使获取了脚本文件,也无法查看脚本的具体内容,获取不到密码,ip地址等信息。

shc加密

它可以将 Shell 脚本编译为可执行的二进制文件。使用 shc,你可以将脚本加密并编译为一个可执行文件,然后在目标系统上直接执行该文件。

首先安装shc工具

yum -y install shc

2.准备shell脚本

你的shell脚本存在安全问题吗?_第1张图片

3.将shell脚本加密

语法:shc -f script.sh -o script

[root@knode1 ~]# shc -f upload_file.sh -o upload_file
[root@knode1 ~]# ls -ltr upload_file*
-rwxr-xr-x 1 root root   464 715 16:44 upload_file.sh
-rw-r--r-- 1 root root 19847 715 16:49 upload_file.sh.x.c
-rwxrwxr-x 1 root root 11688 715 16:49 upload_file
[root@knode1 ~]# more upload_file

******** upload_file: Not a text file ********

通过上面的方法,可以将脚本转换成upload_file二进制脚本,并且并不影响脚本的执行

upload_file.sh 是原始的未加密shell脚本,加密后可以直接删除,避免泄露
upload_file 是二进制格式的加密shell脚本
upload_file.x.c 是upload_file.sh文件的C源代码。编译该C源代码以创建上面的加密的upload_file文件。
4.执行效果

[root@knode1 ~]# ./upload_file testrw.dbf
开始文件传输...........................
spawn scp -P 22 -o StrictHostKeyChecking=no testrw.dbf [email protected]:/opt/package
[email protected]'s password: 
testrw.dbf                                                                                                                                                                     100%  160MB 143.9MB/s   00:01    
执行结束...............

除了shc之外,还可以使用gzexe,upx等工具也可以达到类型的效果,感兴趣的小伙伴可以自己研究。

你可能感兴趣的:(Linux,shell,安全,服务器,运维)