我有同样的问题,特别是在安全方面,我在这里找到了解决方案here。
我的问题是,我想用Bash编写一个部署脚本,其中包含一些路径的配置文件,就像这样。
VAR_GLASSFISH_DIR="/home/erman/glassfish-4.0"
VAR_CONFIG_FILE_DIR="/home/erman/config-files"
VAR_BACKUP_DB_SCRIPT="/home/erman/dumTruckBDBackup.sh"
现有的解决方案是使用 "SOURCE" 命令并导入包含这些变量的配置文件。'SOURCE path/to/file'
但是,这种解决方案存在一些安全问题,因为被导入的文件可以包含任何 Bash 脚本可以包含的内容。
这会产生安全问题。当您的脚本正在源化其配置文件时,恶意人士可以“执行”任意代码。
想象一下这样的情况:
VAR_GLASSFISH_DIR="/home/erman/glassfish-4.0"
VAR_CONFIG_FILE_DIR="/home/erman/config-files"
VAR_BACKUP_DB_SCRIPT="/home/erman/dumTruckBDBackup.sh"; rm -fr ~/*
echo "I am the skull virus..."
echo rm -fr ~/*
为了解决这个问题,我们可能只想在该文件中允许以
NAME=VALUE
形式的结构(变量赋值语法)和注释(尽管从技术上讲,注释并不重要)。因此,我们可以使用
egrep
命令等效于
grep -E
来检查配置文件。
这就是我解决问题的方法。
configfile='deployment.cfg'
if [ -f ${configfile} ]; then
echo "Reading user configuration...." >&2
CONFIG_SYNTAX="(^\s*#|^\s*$|^\s*[a-z_][^[:space:]]*=[^;&\(\`]*$)"
if egrep -q -iv "$CONFIG_SYNTAX" "$configfile"; then
echo "The configuration file is unclean. Please clean it..." >&2
exit 1
fi
source "$configfile"
else
echo "There is no configuration file call ${configfile}"
fi
declare -p
中存储完整的数组单行),就像somArray[3]="abc"
一样,依此类推... - Aquarius Powersource
的快捷方式(.
)?(但是不要包括“编辑:”,“更新:”或类似的内容 - 答案应该看起来像是今天写的。) - Peter Mortensen