asuerhao's Blog

如果有什么做的不到的地方请尽管留言, 我会改进的 : )

安全BASH脚本的开场白(仅供参考)

#! /bin/bash --
# '--'标志选项的结束,禁止其余的选项处理.
# 任何'--'之后的参数将作为文件名和参数对待.
# 参数 '-'与之等价. 这可以避免某种程度的欺骗攻击(Spoofing Attack).

# IFS变量中存储着输入字段分割符,它会影响Shell接下来对输入数据解释的方式.
# 为了防止某些Shell导入该变量的一个外部设置,
# 在脚本开始时将IFS重设为标准值(空格,Tab和换行):
IFS=$' \t\n'

# 为了执行我们所预期的命令:
# 首先确定unalias不是一个被重新定义的函数(POSIX中,unset是一个特殊Shell内部命令,
# 它在函数和普通内部命令之前执行,所以你不必担心它被重新定义为一个函数,
# 不过,GNU/BASH却可以将其定义为函数,不解。。。):
unset -f unalias
# 删除所有命令别名,前面加'\'是为了保证unalias不是一个别名:
\unalias -a
# 确保command不是一个函数, 它本身是一个普通的内部命令:
unset -f command
# 设置一个可以信赖的PATH变量:
# 'command -p', 表示使用$PATH的默认值,并避开Shell函数,以执行后面的命令.
# 'getconf', 列出系统配置变量值.
SYSPATH="S(command -p getconf PATH 2>/dev/null)"
if [[ -z "$SYSPATH" ]]; then
      SYSPATH="/usr/bin:/bin"
fi
PATH="$SYSPATH:$PATH"
# 确保所有的子进程继承我们的安全查找路径:
export PATH