![如何将 sh 脚本加密到 Linux 环境?](https://linux22.com/image/502294/%E5%A6%82%E4%BD%95%E5%B0%86%20sh%20%E8%84%9A%E6%9C%AC%E5%8A%A0%E5%AF%86%E5%88%B0%20Linux%20%E7%8E%AF%E5%A2%83%EF%BC%9F.png)
我有个小问题,我该如何加密我的脚本?我的意思是,例如,有时我有一些 sh 脚本(由 VMWare 等公司提供),当我 VI 它时,他们只显示加密文件而不是纯文本文件。
如何将纯文本脚本转换为加密脚本?
答案1
这个站点似乎有一个脚本可以完成你想要做的事情:
来自网站:
makeself.sh 是一个小型 shell 脚本,它从目录中生成一个可自解压的 tar.gz 存档。生成的文件显示为 shell 脚本(其中许多脚本带有 .run 后缀),可以按原样启动。然后,存档将自行解压到临时目录中,并执行可选的任意命令(例如安装脚本)。这与 Windows 世界中使用 WinZip Self-Extractor 生成的存档非常相似。Makeself 存档还包括用于完整性自验证的校验和(CRC 和/或 MD5 校验和)。
参见有关 v2.1.5 支持通过 gpg 加密的评论。
我认为它被称为 shell 档案,最初是由 James Gosling(Java 的发明者)编写的。
答案2
如果您的目的是阻止某人看到脚本的内容(例如代码及其工作原理)并能够运行它,那么实际上没有办法做到这一点。您可以使用自解压和代码混淆,但最终真正想要的人只需付出一点额外的努力就能看到脚本。
使用加密的其他原因可能具有一定的实用性,但您还没有说明您要做什么或为什么,因此很难提出包含有关限制和漏洞信息的建议。
答案3
当我 VI 它时,他们只向我显示一个加密文件,而不是纯文本文件。
不,您正在查看的是压缩文件,而不是加密文件。
答案4
如果目标是隐藏脚本的源代码,你可能需要查看韓國。注意,直到今天我才真正使用过它。它至少对我的简单一行脚本 /bin/sh 测试脚本有用。
否则,您可以尝试使用 gpg 加密脚本并为每个用户提供密码。基本上,您获取完成的 shell 脚本,然后将其加密为装甲 ASCII 格式:
gpg -ca foo.sh
然后获取生成的“foo.sh.asc”文件,然后将其包装在另一个脚本中:
cat <<EOF | gpg -d | /bin/sh
-----BEGIN PGP MESSAGE-----
Version: GnuPG v1.4.10 (FreeBSD)
jA0EAwMCN7iZSx7u9fRgySY/QTWgnwhYs0fSdLhwR0xL0Z1VOk6Lm5Jil06U7XtJ
Yl62Gab6kg==
=Yalz
-----END PGP MESSAGE-----
EOF
密码为“test1”。加密后的脚本为:
echo "foo!"
虽然我向你保证我的脚本是安全的,但不要养成运行陌生人的此类脚本的习惯,因为你没有理由相信我,而且我可能会用我的加密脚本做一些狡猾的事情。:-)
不幸的是,足够精明的用户只需从脚本中删除“| /bin/sh”部分即可恢复脚本纯文本,这将导致脚本被转储到标准输出。
简而言之,如果最终用户可以运行该脚本,那么就有可能(只要有足够的动机和技能)对其进行逆向工程。不要将任何至关重要的信息(例如密码)放入这些模糊的脚本中。