CentOS 回收站安全设置
一 安全原则与总体思路
- 最小权限:回收站目录仅对属主可写,避免其他用户或进程篡改、窥探删除内容。
- 可追溯:记录删除操作(源路径、时间、回收路径),便于审计与恢复。
- 防误删双保险:用safe-rm做黑名单保护关键系统路径,再叠加回收站机制作为第二道防线。
- 自动清理:按时间/数量/容量策略定期清理,避免回收站膨胀占满磁盘。
- 避免覆盖系统 rm:优先使用别名或函数替换 rm,保留直接调用 /bin/rm 的能力,防止脚本绕过回收站。
- 备份兜底:关键数据定期做异地/快照/增量备份,回收站不是备份替代方案。
二 方案一 使用 safe-rm 做黑名单保护(强烈建议)
- 安装 safe-rm(CentOS 常用方式为源码安装或从 EPEL 获取):
- 方式A:EPEL 安装(若仓库可用)sudo yum install -y safe-rm
- 方式B:源码安装
- wget https://gitlab.com/berkeleylab/fastbit/-/raw/master/safe-rm/safe-rm-0.12.tar.gz
- tar xzf safe-rm-0.12.tar.gz && cd safe-rm-0.12
- sudo make install
- 配置黑名单(/etc/safe-rm.conf),禁止删除关键路径:
- / /boot /dev /etc /lib /lib64 /proc /root /sbin /sys /usr /var /bin /srv /opt
- 启用方式(任选其一,确保其在 $PATH 中优先于 /bin/rm):
- 推荐:在 /etc/profile.d/safe-rm.sh 中放入:
- export PATH=“/usr/local/bin:$PATH” # 假设 safe-rm 安装到 /usr/local/bin
- alias rm=‘/usr/local/bin/safe-rm’
- 或:直接重命名替换 /bin/rm(风险较高,需充分测试脚本兼容性)。
- 验证:
- safe-rm /etc 应提示被跳过;/usr/local/bin/safe-rm --version 可查看版本。
三 方案二 回收站机制与自动清理(配合方案一更佳)
- 桌面环境用户(GNOME):优先使用 gvfs-trash(与图形会话回收站一致)
- 安装:sudo yum install -y gvfs-trash
- 使用:gvfs-trash ;gvfs-trash --list;gvfs-trash-empty
- 服务器/纯命令行:使用 trash-cli(遵循 FreeDesktop Trash 规范)
- 安装:sudo yum install -y trash-cli
- 使用:trash ;trash-list;trash-empty;restore-trash(交互恢复)
- 配置要点:回收站目录为 ~/.local/share/Trash/{files,info};可按需设置保留天数(通过 trash-empty 的 --days 或定期清理)。
- 自定义回收站脚本(可控性最强,便于审计与策略扩展)
- 建议目录:TRASH=$HOME/.trash;权限:chmod 700 $TRASH
- 示例脚本(~/bin/trash.sh):
- #!/usr/bin/env bash
set -Eeuo pipefail
TRASH=“$HOME/.trash”
mkdir -p “$TRASH”
LOG=“$TRASH/.trash.log”
ts=$(date +%s)
for f in “$@”; do
if [[ -e $f ]]; then
bn=$(basename – “$f”)
ext=${bn##.}
[[ $bn == $ext ]] && ext=“”
[[ -n $ext ]] && ext=“.$ext”
mv -i – “$f” "$TRASH/${bn%.}-${ts}${ext}"
echo “$ts $PWD/$f -> $TRASH/${bn%.*}-${ts}${ext}” >> “$LOG”
else
echo “WARN: $f not exist” >&2
fi
done
- 启用:在 ~/.bashrc 或 /etc/profile.d/trash.sh 中
- 直接删除绕过回收站:使用 /bin/rm 或 command rm
- 自动清理策略(示例)
- 按时间:find ~/.trash -mtime +30 -type f -delete
- 按数量:按文件数或总大小阈值清理(可结合 du/ls 与 wc 实现)
- 定时任务:crontab -e
- 0 2 * * * find ~/.trash -mtime +30 -type f -delete
- 0 3 * * 0 find ~/.trash -mindepth 1 -maxdepth 1 -mtime +90 -exec rm -rf {} +
四 权限与审计配置要点
- 回收站目录权限:chmod 700 ~/.local/share/Trash ~/.trash;属主为相应用户,避免组/其他写权限。
- 日志与元数据:为回收站启用操作日志(如上脚本中的 .trash.log),定期归档与审查。
- 多用户环境:为各用户独立回收站目录,避免共享;必要时通过集中日志收集审计。
- 脚本安全:回收站脚本与清理任务使用绝对路径、开启set -Eeuo pipefail,避免变量展开导致误删;清理任务优先用 find … -delete,减少 shell 循环风险。
五 运维与应急建议
- 关键目录与脚本中避免使用 rm -rf $FOO/,优先 rm -rf “$FOO”;删除尽量使用绝对路径,减少相对路径与通配符风险。
- 保留直接调用 /bin/rm 的能力(不使用别名/函数时),并在运维手册中明确紧急绕过方式。
- 重要数据实施3-2-1 备份(3份副本、2种介质、1份异地/离线),回收站仅作短期“后悔药”。
- 对生产环境变更(替换 rm、调整清理策略)先在测试环境验证,并安排维护窗口与回滚方案。