--作者:飞翔的小胖猪

--创建时间:2021年5月17日

--修改时间:2021年5月17日

说明

shell作为Linux操作系统中原生的语言环境,由于其简单、便捷、可以移植等特性常被运维人员作为工作用来维护操作系统。

但是由于shell脚本是可读写的、并且以明文的方式存储,则会存在较大的安全隐患。如其可读写的特点可能会被动机不纯的份子利用修改其内容改变其本身的真实用途;其明文的存储方式则会泄露敏感信息,,如用户名,密码,路径,IP等。在生产环境中该是完全不能被接受的。

文档结合生产环境中的实际情况,针对生产中安全要求规范。总结整理针对shell脚本加密的相关规范。

方式

针对shell的脚本的特点,作者总结并梳理3种机制来保障shell脚本在生产环境中的安全运行。

  • 使用加密工具对shell脚本进行加密。
  • 对shell脚本添加特殊文件属性,限制shell脚本文件写功能。
  • 使用校验码校验shell脚本的完整性。

ps:较高的安全机制会在一定程度上增加维护成本,请君谨慎选择。不是任何一个脚本都需要加密了!一般生产环境中选择以上的一种方式进行安全管控即可,在安全等级较高的环境中可以采取多种机制组合的放肆进行安全保障。作者建议先加密文件再设置文件不可更改。

题外话:这就和selinux的作用一样,都知道selinux很安全,真正使用的又有几人?尤其对于现在的运维人员而言,开篇第一手就是设置其为disabled。所以安全固然重要,但是相信不会有人专门买个保险箱来存放空白A4纸吧。

原shell脚本文件

文章中使用的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='!@#$%^&*()~":?>,.-=+~`'

一、加密机制

1.1 gzexe加密

gzexec命令比较简单,没有其他的参数选项,其本质是一个压缩软件。在其压缩的过程中会改变部分文件内容的显示,有一定的安全管控作用。

执行gzexe命令过后会在原文件目录下自动生成一个名为${file_name}~的备份文件。加密过后的文件依然可以运行。

1.1.1 gzexe语法

gzexe [-d][执行文件...]
-d  解开压缩文件。

加密

# gzexe  test1.sh

1.1.2 gzexe加密后文件

1.1.3 gzexe加密后执行结果

1.2 shc加密

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。

1.2.1 shc安装

软件地址: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

1.2.2 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语言源文件,可以删除。

1.2.3 shc加密后文件

1.2.4 shc加密后执行结果

二、添加特殊属性

生产环境中的脚本一半情况上上线后不会进行修改,使用chattr命令为脚本添加只读和只执行权限。

2.1 chattr

Linux chattr命令用于改变文件属性。

2.1.1 chattr语法

chattr [-RV][-v<版本编号>][+/-/=<属性>][文件或目录...]
参数:
-R 递归处理,将指定目录下的所有文件及子目录一并处理。
-v<版本编号> 设置文件或目录版本。
-V 显示指令执行过程。
+<属性> 开启文件或目录的该项属性。
-<属性> 关闭文件或目录的该项属性。
=<属性> 指定文件或目录的该项属性。
属性:
a:让文件或目录仅供附加用途。
b:不更新文件或目录的最后存取时间。
c:将文件或目录压缩后存放。
d:将文件或目录排除在倾倒操作之外。
i:不得任意更动文件或目录。
s:保密性删除文件或目录。
S:即时更新文件或目录。
u:预防以外删除。

设置属性

# chattr +i test1.sh_bak
# lsattr test1.sh_bak

2.1.2 权限设置后结果

三、效验码检查

同等与设置脚本的不可更改属性,使用校验码检查脚本是否被更改过后。

3.1 md5sum

通过md5sum来校验生成文件校验码,来发现文件传输(网络传输、复制、本地不同设备间的传输)异常造成的文件内容不一致的情况。

  • md5sum 是校验文件内容,与文件名是否相同无关。
  • md5sum值逐位校验,所以文件越大,校验时间越长。
  • md5sum的效验文件一定要保存到其他专用文件夹中。同时需要设置md5sum效验文件设置为不可更改。

3.1.1 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

3.1.2 生产效验文件

# md5sum  test1.sh > check_file.txt
# chattr +i check_file.txt
# md5sum -c check_file.txt

3.1.3 md5效验结果

shell脚本加密方式的更多相关文章

  1. CentOS6.7下使用非root用户(普通用户)编译安装与配置mysql数据库并使用shell脚本定时任务方式实现mysql数据库服务随机自动启动

    CentOS6.7下使用非root用户(普通用户)编译安装与配置mysql数据库并使用shell脚本定时任务方式实现mysql数据库服务随机自动启动1.关于mysql?MySQL是一个关系型数据库管理 ...

  2. shell 脚本加密

    日常编写shell脚本时会写一些账号和密码写入脚本内,但是不希望泄露账号密码,所以对shell脚本进行加密变成可执行文件. 主要使用 shc 对 Linux shell 脚本加密,shc是一个专业的加 ...

  3. shell脚本加密

      如何保护自己编写的shell程序要保护自己编写的shell脚本程序,方法有很多,最简单的方法有两种:1.加密 2.设定过期时间,下面以shc工具为例说明: 一.下载安装shc工具shc是一个加密s ...

  4. 转:linux执行shell脚本的方式及一些区别

    假设shell脚本文件为hello.sh放在/root目录下.下面介绍几种在终端执行shell脚本的方法: [root@localhost home]# cd /root/ [root@localho ...

  5. 转载:Shell 脚本加密 - 略有修改

    shc是一个加密shell脚本的工具.它的作用是把shell脚本转换为一个可执行的二进制文件. shc 安装 yum -y install shc 如果yum不能安装,请移步官方下载rpm包 http ...

  6. Linux 下执行Shell 脚本的方式

    Shell 脚本的执行方式通常有如下三种: (1)bash script-name 或者 sh script-name:(2)path/script-name或者./script-name:(3)so ...

  7. shell脚本执行方式

    # BY THE WAY, 其实这块内容算是比较简单的,但是都比较常记得它最基本的两种方式,另外两种却忘记了 1. 利用sh或bash命令执行 sh test.sh bash test.sh 2. 在 ...

  8. Linux之Shell 脚本加密工具-shc

    Much effort, much prosperity. 为什么要加密Shell脚本呢?当然是为了安全! 可能脚本里面涉及到密码之类的就需要进行加密了 一.下载安装shc工具 要保护自己编写的she ...

  9. linxu下的shell脚本加密,shell生成二机制可执行文件

    再安全的加密也抵不过逆向,斗智斗勇吧,持续加密持续破解 1.简单的加密:gzexe file.sh 2.使用shc加密:下载地址:http://www.datsi.fi.upm.es/~frosal/ ...

随机推荐

  1. gin中绑定表单数据至自定义结构体

    package main import "github.com/gin-gonic/gin" type StructA struct { FieldA string `form:& ...

  2. ElasticSearch+Kibana+Packetbeat

    一.介绍 Packetbeat 是一个实时网络数据包分析工具,通过嗅探应用服务器之间的网络通讯,来解码应用层协议类型如HTTP.MySQL.redis等等,关联请求与响应,并记录每个事务有意义的字段. ...

  3. 微前端框架 之 single-spa 从入门到精通

    前序 目的 会使用single-spa开发项目,然后打包部署上线 刨析single-spa的源码原理 手写一个自己的single-spa框架 过程 编写示例项目 打包部署 框架源码解读 手写框架 关于 ...

  4. Pycharm新建文件时头部模板的配置方法

    方法

  5. JS异步加载AMD和CMD

    CommonJS 是个规范,主要用于js后端,var foo = require("./foo");foo("Hi"); AMD前置加载 require.jsr ...

  6. BootStrap基础入门概述总结

    是否还值得学习BootStrap 因为自己还是学生,自己在学习之前就先在网上看了看BootStrap是否在现在依旧流行,是否还值得学习. 以下是网友的一些评价: 20年11月 Bootstrap作为入 ...

  7. shell——trap捕捉信号(附信号表)

    trap捕捉信号有三种形式 第一种:trap "commands" signal-list 当脚本收到signal-list清单内列出的信号时,trap命令执行双引号中的命令. 例 ...

  8. uos系统离线状态下进入开发者模式

    需到处机器信息,接着登入指定的uos开发者网站,下载证书,然后在机器上加载证书,重启即可.

  9. Windows office2019免费激活,附代码

    office2019地址:链接:https://pan.baidu.com/s/1zPt5U7b0L-bGHl5AOtYs2w提取码:m5ei 新建一个txt,然后把这段代码放进去,然后保存关闭改后缀 ...

  10. 【琉忆分享】新手如何学习PHP?附上PHP知识导图。

    你好,是我--琉忆.PHP程序员面试系列图书作者. 作为一名PHP开发者过来人,也是经历了菜鸟到老手的过程,在此给那些想学PHP的同学指条路,即使你是转行学PHP一样可以学会PHP. (如果觉得下面这 ...