shell脚本加密方式
--作者:飞翔的小胖猪
--创建时间: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脚本加密方式的更多相关文章
- CentOS6.7下使用非root用户(普通用户)编译安装与配置mysql数据库并使用shell脚本定时任务方式实现mysql数据库服务随机自动启动
CentOS6.7下使用非root用户(普通用户)编译安装与配置mysql数据库并使用shell脚本定时任务方式实现mysql数据库服务随机自动启动1.关于mysql?MySQL是一个关系型数据库管理 ...
- shell 脚本加密
日常编写shell脚本时会写一些账号和密码写入脚本内,但是不希望泄露账号密码,所以对shell脚本进行加密变成可执行文件. 主要使用 shc 对 Linux shell 脚本加密,shc是一个专业的加 ...
- shell脚本加密
如何保护自己编写的shell程序要保护自己编写的shell脚本程序,方法有很多,最简单的方法有两种:1.加密 2.设定过期时间,下面以shc工具为例说明: 一.下载安装shc工具shc是一个加密s ...
- 转:linux执行shell脚本的方式及一些区别
假设shell脚本文件为hello.sh放在/root目录下.下面介绍几种在终端执行shell脚本的方法: [root@localhost home]# cd /root/ [root@localho ...
- 转载:Shell 脚本加密 - 略有修改
shc是一个加密shell脚本的工具.它的作用是把shell脚本转换为一个可执行的二进制文件. shc 安装 yum -y install shc 如果yum不能安装,请移步官方下载rpm包 http ...
- Linux 下执行Shell 脚本的方式
Shell 脚本的执行方式通常有如下三种: (1)bash script-name 或者 sh script-name:(2)path/script-name或者./script-name:(3)so ...
- shell脚本执行方式
# BY THE WAY, 其实这块内容算是比较简单的,但是都比较常记得它最基本的两种方式,另外两种却忘记了 1. 利用sh或bash命令执行 sh test.sh bash test.sh 2. 在 ...
- Linux之Shell 脚本加密工具-shc
Much effort, much prosperity. 为什么要加密Shell脚本呢?当然是为了安全! 可能脚本里面涉及到密码之类的就需要进行加密了 一.下载安装shc工具 要保护自己编写的she ...
- linxu下的shell脚本加密,shell生成二机制可执行文件
再安全的加密也抵不过逆向,斗智斗勇吧,持续加密持续破解 1.简单的加密:gzexe file.sh 2.使用shc加密:下载地址:http://www.datsi.fi.upm.es/~frosal/ ...
随机推荐
- C++11多线程之future(一)
// ConsoleApplication5.cpp : 定义控制台应用程序的入口点. #include "stdafx.h" #include<random> #in ...
- golang中通过递归或通道实现斐波那契数列
1. 循环实现 package main import "fmt" func fibonacciFor(nums int) (s1 []int) { // 循环实现斐波那切数列 n ...
- CTFSHOW-SSRF篇
之前就想着写一下 ctfshow 的 wp, 但由于时间问题,一直没有机会, 其实是懒≥.≤ 这次趁着寒假刷几篇ctfshow的文章 那,开始吧. web351 存在一个flag.php页面,访问会返 ...
- 在EntityFrameworkCore中记录EF修改日志,保存,修改字段的原始值,当前值,表名等信息
突发奇想,想把业务修改的所有字段原始值和修改后的值,做一个记录,然后发现使用EF可以非常简单的实现这个功能 覆盖父类中的 SaveShanges() 方法 public new int SaveCha ...
- Net6 DI源码分析Part2 Engine,ServiceProvider
ServiceProvider ServiceProvider是对IServiceProvider实现,它有一个internal的访问修饰符描述的构造,并需要两个参数IServiceCollectio ...
- 洛谷P4859 已经没有什么好害怕的了
因为不存在任意两个数相同,那么设糖果比药片大的组有 \(x\) 个,药片比糖果大的组有 \(y\) 个,那么我们有: \[x + y = n, x - y = k \] 即: \[x = \frac{ ...
- SpringBeanUtils的部分方法类
原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/12060553.html SpringBeanUtils的部分方法类: import java. ...
- 使用MediaPlayer框架实现简单音乐播放器-陈棚
该项目需要使用MediaPlayer框架,因此程序需要先为该项目添加MediaPalyer框架,并在上面控制器类的实现部分使用#import<MediaPlayer/MediaPlayer.h& ...
- cloudstack-4.1.5版本最全入门笔记【2022】
cloudstack简介 CloudStack是一个开源的具有高可用性及扩展性的云计算平台.目前Cloudstack支持管理大部分主流的hypervisors,如KVM,XenServer,VMwar ...
- xss标签和属性爆破
当网站过滤了大部分的HTML标签和属性,我们就尝试爆破一下,看哪些标签和属性没有没过滤. 爆破的步骤: 1. 首先在测试点输入我们正常的exp,并抓包发送到Intruder模块. 2. 将exp改为 ...