--作者:飞翔的小胖猪

--创建时间: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. gorm中动态使用表名

    用户表(前台.后台) type User struct { ID int `gorm:"primaryKey;autoIncrement"` Name sql.NullString ...

  2. java继承子类实例化过程(细节解释)

    1 package face_08; 2 class Fu{ 3 Fu(){ 4 super(); 5 show(); 6 return; 7 } 8 void show() { 9 System.o ...

  3. 项目管理软件jira安装

    JIRA是Atlassian公司出品的项目与事务跟踪工具,被广泛应用于缺陷跟踪.客户服务.需求收集.流程审批.任务跟踪.项目跟踪和敏捷管理等工作领域. 官方文档https://confluence.a ...

  4. while...break 实例

    // 输出1-100内前5个可以被3整除的数 public class Demo { public static void main(String[] args) { int num = 0; for ...

  5. ApacheCN 数据库译文集 20211112 更新

    创建你的 Mysql 数据库 零.前言 一.介绍 MySQL 设计 二.数据采集 三.数据命名 四.数据分组 五.数据结构调整 六.补充案例研究 Redis 学习手册 零.序言 一.NoSQL 简介 ...

  6. Linux下Wordpress忘记密码后的解决方法

    进入Wordpress的数据库,找到wp_users表,使用MD5('你的密码')函数添加密码 示例: 修改admin的密码为123456 UPDATE wp_users SET user_pass= ...

  7. 用Dockerfile部署zabbix

    用Dockerfile部署 zabbix-server部署阶段 要用docker跑zabbix-server,需要以下几个组件 组件名称 作用 数据库 MySQL或是PostgreSQL Zabbix ...

  8. 如何清除项目git版本控制信息

    首先进入项目目录下 邮件打开 git bash here 执行命令 find . -name ".git" | xargs rm -rf 就清除了git版本控制信息

  9. Velocity学习

    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11790482.html Velocity学习: 1. velocity对大小写敏感 2. ve ...

  10. Java读写文件常用方法

    一.字符流:读写纯文本(txt,csv等), 1 字符流写文件主要用:FileWriter,BufferedWriter,PrintWriter 1.1 测试 FileWriter 写入 privat ...