CentOS 解压相关的安全要点与配置
一 概念澄清与总体原则
二 解压工具的安全配置清单
sha256sum file.tar.gz 与官方指纹比对;仅在一致时解压。sudo -u extractor 执行解压,避免 root 直接解压不可信内容。tar --no-overwrite-dir 防止覆盖关键目录;解压前确认工作目录,避免相对路径导致“解压到上级目录”的风险。tar -tvf file.tar、unzip -l file.zip,确认不含可疑路径(如 /etc/passwd、/root/.ssh、/var/www 等)或异常设备文件。yum update 及时修补漏洞;仅使用受信任仓库的压缩工具版本。三 常见风险与缓解措施
../../../etc/passwd 或指向敏感文件的符号链接,解压时可能覆盖系统文件。tar --no-overwrite-dir,解压后核对是否出现异常文件。top、iostat 等资源指标,必要时分批解压。find /extract/dir -type f \( -perm -4000 -o -perm -2000 \))与 authorized_keys;必要时用 restorecon 恢复 SELinux 上下文。四 自动化与运维实践
#!/usr/bin/env bash
set -Eeuo pipefail
ARCHIVE="$1"
DEST="/var/tmp/extract_$(date +%s)"
USER=extractor
# 1) 完整性校验(示例:SHA-256)
echo "d2d2d2... $ARCHIVE" | sha256sum -c --status || { echo "校验失败"; exit 1; }
# 2) 仅列出检查
if [[ "$ARCHIVE" == *.tar* ]]; then
tar -tvf "$ARCHIVE" | grep -E '^\.\./|/etc/|/root/|\.ssh/|\.bash_history|\.rhosts'
elif [[ "$ARCHIVE" == *.zip ]]; then
unzip -l "$ARCHIVE" | grep -E '^\.\./|/etc/|/root/|\.ssh/|\.bash_history|\.rhosts'
else
echo "不支持的格式"; exit 2
fi
# 3) 创建隔离目录并解压
mkdir -p "$DEST"
chown "$USER:$USER" "$DEST"
if [[ "$ARCHIVE" == *.tar* ]]; then
sudo -u "$USER" tar -xf "$ARCHIVE" -C "$DEST" --no-overwrite-dir
elif [[ "$ARCHIVE" == *.zip ]]; then
sudo -u "$USER" unzip -q "$ARCHIVE" -d "$DEST"
fi
# 4) 审计新增 SUID/SGID
find "$DEST" -type f \( -perm -4000 -o -perm -2000 \) -ls
echo "解压完成,目录:$DEST"
visudo 精确授权),避免授予不必要的命令执行能力。