受密码保护的Shell脚本

时间:2018-08-15 17:51:52

标签: shell

我想对脚本密码进行保护。如果我使用此代码,它将起作用:

ACTUAL="sam123"
read -s -p "Password: " enteredpass

我还想防止脚本被catvi读取。我尝试使用vim -x <script>对其进行加密,但随后它不允许我运行它。

我使用的是普通用户,却一无所获。

2 个答案:

答案 0 :(得分:2)

没有系统管理员的帮助,您无法安全地执行此操作,但是如果没有它,您可以做一些适得其反的事情。

所以,假设您像这样创建脚本:

cat >myscript <<EOF
echo "Doing something super secret here"
EOF

...但是您不希望任何不知道密码的人都可以运行它,即使他们使用的是共享帐户。您可以通过加密来做到这一点:

gpg -ac <myscript >myscript.asc

...然后将明文嵌入脚本中:

#!/usr/bin/env bash
{ gpg -d | bash -s "$@"; } <<'EOF'
-----BEGIN PGP MESSAGE-----

jA0EBwMCBogTuO9LcuZg0lsB2wqrsPU8Bw2DRzAZr+hiecYTOe//ajXfcjPI4G6c
P3anEYb0N4ng6gsOhKqOYpZU9JzVVkxeL73CD1GSpcQS46YlKWJI8FKcPckR6BE+
7vqkcPWwcS7oy4H2
=gmFu
-----END PGP MESSAGE-----
EOF

也就是说,如果共享帐户中的其他用户在运行过程中连接并跟踪您的进程,他们仍然可以收集您的密码-在strace的副本上运行bash -s将显示文本喂入其标准输入。 通常,对于任何需要保密的信息,您都不应依赖共享帐户。

答案 1 :(得分:0)

后代的最新答案,如何使用openssl?这是我的scriptencrypt.sh

它将生成一个需要密码的新.sh文件

#!/bin/bash

if [ -z "$1" ]; then echo "usage: $(basename $0) script"; exit 1; fi

script=$(cat "$1")
checksum="$(echo "$script" | md5sum | awk '{ print $1 }')"
extension=$([[ "$(basename $1)" =~ .\.. ]] && echo ".${1##*.}" || echo "")

cat << EOF > "${1%.*}.enc${extension}"
#!/bin/bash

read -r -d '' encrypted_script << EOF2
$(openssl aes-256-cbc -a -salt -in /dev/stdin -out /dev/stdout <<< "${script}")
EOF2

read -s -p "Enter script password: " password
echo
unencrypted_script=\$(openssl aes-256-cbc -d -a -salt -in /dev/stdin -out /dev/stdout <<< "\${encrypted_script}" -pass pass:"\${password}" 2>/dev/null | tr -d '\000')
clear
checksum="\$(echo "\$unencrypted_script" | md5sum | awk '{ print \$1 }')"
if [ "\${checksum}" = "${checksum}" ]; then
    eval "\${unencrypted_script}"
    exit 0
else
    echo "Wrong password inserted"
    exit 1
fi
EOF