简介
Shc用来对shell脚本进行加密,它将shell脚本转换为一个可执行的二进制文件,从而避免shell脚本中的用户名、密码等重要信息暴露。
编译和测试方式
1.选择操作环境
本文选用华为鲲鹏 云服务 ECS KC1实例做测试
2.配置编译环境
1)下载和解压Shc软件包。
cd /usr/local/src
wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.9.tgz
tar -zxvf shc-3.8.9.tgz
2)编译和安装Shc。
mkdir /usr/local/man/man1/ -p
cd /usr/local/src/shc-3.8.9
make install
回显内容如下:
[root@ecs-001 shc-3.8.9]# make install
***Installing shc and shc.1 on /usr/local
***Do you want to continue?
输入“y”,继续执行。
回显内容如下:
***Do you want to continue? y
install -c -s shc /usr/local/bin/
install -c -m 644 shc.1 /usr/local/man/man1/
3.测试已完成编译的软件
1)创建测试脚本“hello.sh”。
cd /usr/local/src
touch hello.sh
chmod +x hello.sh
vi hello.sh
输入以下内容后,退出保存
#!/bin/bash
echo "test shc"
2)执行“hello.sh”。
./hello.sh
回显内容如下:
[root@ecs-001 src]# ./hello.sh
test shc
3)采用Shc对“hello.sh”加密。
cd /usr/local/src/
shc -v -f hello.sh
参数说明:
“-v”表示显示加密过程。
“-f”指定需要加密的脚本。
回显内容如下:
[root@ecs-001 src]# shc -v -f hello.sh
shc shll=bash
shc [-i]=-c
shc [-x]=exec '%s' "$@"
shc [-l]=
shc opts=
shc: cc hello.sh.x.c -o hello.sh.x
shc: strip hello.sh.x
shc: chmod go-r hello.sh.x
加密完成后,会产生两个新的文件,一个为“hello.sh.x”,一个为“hello.sh.x.c”。
其中“hello.sh.x”是新产生的二进制可执行文件,“hello.sh.x.c”是新产生的c源文件。
4)查看产生的新文件。
ll | grep hello
回显内容如下:
[root@ecs-001 src]# ll | grep hello
-rwxr-xr-x 1 root root 28 Jul 10 16:50 hello.sh
-rwx--x--x 1 root root 68496 Jul 10 17:05 hello.sh.x
-rw-r--r-- 1 root root 9605 Jul 10 17:05 hello.sh.x.c
5)执行“hello.sh.x”测试。
./hello.sh.x
回显内容类似如下,表示加密成功。
[root@ecs-001 src]# ./hello.sh.x
test shc
已知问题汇总
问题描述:
将在x86平台上经过Shc加密的“XXX.sh.x”文件复制到基于鲲鹏的服务器中,无法执行,例如,将“test.sh.x”从x86平台复制鲲鹏平台 云服务器 执行:
./test.sh.x
回显内容如下:
[root@ecs-001 test]# ./test.sh.x
-bash: ./test.sh.x: cannot execute binary file
问题原因:“test.sh.x”是c程序基于x86平台的gcc编译器生成的二进制可执行文件,x86与鲲鹏的指令集不兼容,导致“test.sh.x”在鲲鹏服务器上不能执行。
解决方法:
方式一:将源shell脚本重新在鲲鹏平台云服务器上重新用Shc加密。
方式二:将“test.sh”脚本在x86平台上经Shc加密生成“test.sh.x.c”源文件,再复制到鲲鹏平台的云服务器,重新由鲲鹏平台的云服务器的gcc编译生成二进制可执行文件。
gcc -o test ./test.sh.x.c