bash 脚本安全
不管是大厂还是小厂,总能听到一些误操作新闻
那避免误操作就办法就是写脚本, 然后也有很多脚本出事的新闻, 通常有以下
引用了不存在的变量
1 |
|
如果ABC_PATH变量被unset了, 那么就是删除系统了
不过听说/bin/rm /
的操作会可能被系统禁止, 但是/bin/rm /*
则肯定能执行成功
脚本没有输出
有很多公司用堡垒机来审计操作记录, 但是如果脚本没有输出,那么就不知道执行了什么命令, 再如果脚本也被删除死无对证,那就无法分析了
解决办法
在bash 脚本前面加上 set -xeu
-x 调试模式,bash会输出所有命令
-e 遇到错误就退出
-u 引用了不存在的变量就退出
添加默认值
path=${ABC_PATH-/} #default /
这样,当ABC_PATH不存在时,就使用默认值’/‘
最好的办法
使用ansible, 可以对脚本进行版本管理和review, 可以避免脚本难以维护的问题
使用ide + bash 插件, 可以有提示
良好的脚本习惯
除了在脚本前面加上 set -xeu
外, 有一些建议
- 多用
&&
,||
,少用;
,如果前面的命令出错,后面就不会执行, 而;
不管 - 善用 date, 例如将日志文件加上日期
bash test.sh > log_
date +%m_%d_%H_%M_%S`` - 脚本放在指定目录,不要与工作目录放在一起, 避免脚本自己被删, 死无对证
- 定期备份
bash 的条件判断
有以下脚本,当TMP 不为空的时候,才进行判断值是否大于2
1 | if [ -n "$TMP" -a ${TMP} -gt 2 ];then |
if [ -n “$TMP” -a ${TMP:=2} -gt 2 ];then
echo “aaaa”
else
echo “bbbbbbbb”
fi