【发布时间】:2011-02-17 05:00:16
【问题描述】:
用户对其文件进行备份的目录位于他们可以访问和上传到的目录中。
如果他们获得正确的命名方案并故意导致错误使系统尝试恢复最近 5 个左右的备份,他们可能会使用绝对路径 gzip 文件(例如 @)将所需的文件放到服务器上987654322@ 或任何可能的情况。
我可以执行哪些检查来防止这种情况在 BASH 中以编程方式发生
下面的命令是root运行的(因为我用的是webmin,所以是root运行的):
tar zxf /home/$USER/site/backups/$BACKUP_FILE -C /home/$USER/site/data/
$BACKUP_FILE 将是它尝试恢复的备份的名称
编辑 1:
这是我到目前为止想出的。我相信这种方式可以改进很多:
CONTENTS=$(tar -ztvf /home/$USER/site/backups/$BACKUP_FILE | cut -c49-200)
for FILE in $CONTENTS; do
if [[ $FILE =~ \.\. ]] || [[ $FILE =~ ^\/ ]]; then
echo "Illegal characters in contents"
exit 1
fi
done
tar zxf /home/$USER/site/backups/$BACKUP_FILE -C /home/$USER/site/data/
exit 0
我想知道如果不允许它以 / 开头并且不允许 .. 就足够了吗? tar -ztvf 的输出字符 50+ 也是正常的吗?
【问题讨论】:
-
建议
chroot如果由 root 完成? -
为什么要以 root 身份恢复用户备份?
-
因为我使用的是 webmin,并且我从 BASH 代码开始将所有内容保存在一个地方,然后将其转换为 PERL。我所做的工作类型需要 root 才能使旧程序正确运行。因此 usermin 不是一个选项
-
不是答案,但
r.tar.gz相当有趣。解压它,解压其中的存档,解压其中的存档,然后……
标签: security bash backup gzip tar