--作者:飞翔的小胖猪
--创建时间:2021年5月17日
--修改时间:2021年5月17日
shell作为Linux操作系统中原生的语言环境,由于其简单、便捷、可以移植等特性常被运维人员作为工作用来维护操作系统。
但是由于shell脚本是可读写的、并且以明文的方式存储,则会存在较大的安全隐患。如其可读写的特点可能会被动机不纯的份子利用修改其内容改变其本身的真实用途;其明文的存储方式则会泄露敏感信息,,如用户名,密码,路径,IP等。在生产环境中该是完全不能被接受的。
文档结合生产环境中的实际情况,针对生产中安全要求规范。总结整理针对shell脚本加密的相关规范。
针对shell的脚本的特点,作者总结并梳理3种机制来保障shell脚本在生产环境中的安全运行。
ps:较高的安全机制会在一定程度上增加维护成本,请君谨慎选择。不是任何一个脚本都需要加密了!一般生产环境中选择以上的一种方式进行安全管控即可,在安全等级较高的环境中可以采取多种机制组合的放肆进行安全保障。作者建议先加密文件再设置文件不可更改。
题外话:这就和selinux的作用一样,都知道selinux很安全,真正使用的又有几人?尤其对于现在的运维人员而言,开篇第一手就是设置其为disabled。所以安全固然重要,但是相信不会有人专门买个保险箱来存放空白A4纸吧。
文章中使用的shell脚本文件展示如下:
[root@135 62_encryption_note]# cat test1.sh #!/bin/bash printf "\e[33m姓名:\e[0m大高个 \n" printf "\e[33m年纪:\e[0m很年轻\e[m\n" printf "\e[33m电话:\e[0m12345678901\n" printf "\e[33m身份证号:\e[0m510502192102108274\n" printf "\e[33m家庭住址:\e[0m四川省泸州市江阳区某某小区aa栋bb单元cc号\n" #键入多种字符格式测试加密效果 #以下的内容不想其他人看到。 password=‘123456‘ check=‘aBcyysSLJAO#!‘ string_i=‘测试加密中文字符‘ special_i=‘!@#$%^&*()~":?>,.-=+~`‘
gzexec命令比较简单,没有其他的参数选项,其本质是一个压缩软件。在其压缩的过程中会改变部分文件内容的显示,有一定的安全管控作用。
执行gzexe命令过后会在原文件目录下自动生成一个名为${file_name}~的备份文件。加密过后的文件依然可以运行。
gzexe [-d][执行文件...]
-d 解开压缩文件。
加密
# gzexe test1.sh
shc是一个专业加密shell脚本的工具.它的作用是把shell脚本转换为一个可执行的二进制文件。Shc的主要目的是保护shell脚本不被修改或检查。
shc不是系统自带的工具,需要用户自行下载,官网地址:http://www.datsi.fi.upm.es/~frosal/sources/。
shc可以编译任何类型的shell脚本,但是您需要提供有效的-i、-x和-l选项。
使用-f指定的脚本创建一个剥离的二进制可执行版本,二进制版本会附加.x扩展名,通常比原始ascii码的大小要大一些。
生成的C源代码保存在一个扩展名为.x.c的文件中。shc使用-e选项可以为文件设置过期时间,过期后会提示对应信息,信息使用-m指定。
在执行时,编译后的二进制文件将解密并使用shell -c选项执行代码,由于需要先解密再执行则经过shc加密过后,脚本的执行时间将会有所增加。
官网已经断更了,版本停留在3.8.9,文档所用版本为3.8.9。
软件地址:http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.9.tgz
安装命令:
1.解压文件准备环境 # wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.9.tgz # tar -zxvf shc-3.8.9.tgz # cd shc-3.8.9/ # mkdir -p /usr/local/man/man1 2.安装验证结果 # make install # which shc
shc [ -e date ] [ -m addr ] [ -i iopt ] [ -x cmnd ] [ -l lopt ] [ -ACDhTv ] -f script OPTIONS The command line options are: -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 -i inline_option Inline option for the shell interpreter i.e: -e -x comand eXec command, as a printf format i.e: exec(\\‘%s\\‘,@ARGV); -l last_option Last shell option i.e: -- -r Relax security. Make a redistributable binary which executes on different systems running the same operating system. -v Verbose compilation -D Switch on debug exec calls -T Allow binary to be traceable (using strace, ptrace, truss, etc.) -C Display license and exit -A Display abstract and exit -h Display help and exit
加密
# shc -r -f test1.sh
命令会生成两个文件,${file_name}.x 和 ${file_name}.x.c。
${file_name}.x是C语言源文件,可以删除。
生产环境中的脚本一半情况上上线后不会进行修改,使用chattr命令为脚本添加只读和只执行权限。
Linux chattr命令用于改变文件属性。
chattr [-RV][-v<版本编号>][+/-/=<属性>][文件或目录...] 参数: -R 递归处理,将指定目录下的所有文件及子目录一并处理。 -v<版本编号> 设置文件或目录版本。 -V 显示指令执行过程。 +<属性> 开启文件或目录的该项属性。 -<属性> 关闭文件或目录的该项属性。 =<属性> 指定文件或目录的该项属性。 属性: a:让文件或目录仅供附加用途。 b:不更新文件或目录的最后存取时间。 c:将文件或目录压缩后存放。 d:将文件或目录排除在倾倒操作之外。 i:不得任意更动文件或目录。 s:保密性删除文件或目录。 S:即时更新文件或目录。 u:预防以外删除。
设置属性
# chattr +i test1.sh_bak # lsattr test1.sh_bak
同等与设置脚本的不可更改属性,使用校验码检查脚本是否被更改过后。
通过md5sum来校验生成文件校验码,来发现文件传输(网络传输、复制、本地不同设备间的传输)异常造成的文件内容不一致的情况。
md5sum [OPTION]... [FILE]... DESCRIPTION Print or check MD5 (128-bit) checksums. With no FILE, or when FILE is -, read standard input. -b, --binary read in binary mode -c, --check read MD5 sums from the FILEs and check them --tag create a BSD-style checksum -t, --text read in text mode (default) Note: There is no difference between binary and text mode option on GNU system. -z, --zero end each output line with NUL, not newline, and disable file name escaping The following five options are useful only when verifying checksums: --ignore-missing don‘t fail or report status for missing files --quiet don‘t print OK for each successfully verified file --status don‘t output anything, status code shows success --strict exit non-zero for improperly formatted checksum lines -w, --warn warn about improperly formatted checksum lines --help display this help and exit --version output version information and exit
# md5sum test1.sh > check_file.txt
# chattr +i check_file.txt # md5sum -c check_file.txt
原文:https://www.cnblogs.com/Pigs-Will-Fly/p/14774057.html