温馨提示×

centos系统回收站安全设置

小樊
41
2025-11-16 00:46:55
栏目: 智能运维

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 中
      • alias rm=~/bin/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、调整清理策略)先在测试环境验证,并安排维护窗口回滚方案

0