我想对脚本密码进行保护。如果我使用此代码,它将起作用:
ACTUAL="sam123"
read -s -p "Password: " enteredpass
我还想防止脚本被cat
和vi
读取。我尝试使用vim -x <script>
对其进行加密,但随后它不允许我运行它。
我使用的是普通用户,却一无所获。
答案 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