配置磁盘配额需重点防护 /var 和 /home 分区,因前者日志满会导致 pam 认证失败、ssh 登录静默中断,后者满则用户无法生成 session 文件而退回登录界面或黑屏;须依次启用内核配额支持、安装 quota 工具、编辑 fstab 添加 usrquota,grpquota、remount、quotacheck 初始化、quotaon 开启,并为 syslog 等服务账户设置硬限(如 500mb blocks 和 50000 inodes),最后通过切换用户写入测试与 ssh 登录验证实效性。

配置磁盘配额防范恶意日志堆积,核心不是堵住所有用户,而是守住 /var 和 /home 两个关键分区——前者日志写满会卡死 PAM 认证,导致 SSH 和 login 进程静默失败;后者塞爆会让用户无法生成 .Xauthority、.bash_history 等 session 文件,直接退回登录界面或黑屏。
先确认前提与安装工具
确保系统已启用内核配额支持(主流发行版默认开启),并安装 quota 工具包:
- Ubuntu/Debian:sudo apt update && sudo apt install quota
- RHEL/CentOS/Rocky:sudo dnf install quota(或 yum)
- 验证安装:quota --version 应正常输出版本号
为 /var 分区启用配额(重点防护日志区)
/var 是攻击面最集中的区域:syslog、journal、nginx、apache 日志全在此,恶意脚本或异常进程可数分钟内打爆空间。操作必须按顺序执行:
- 编辑 /etc/fstab,在 /var 对应行挂载参数中加入 usrquota,grpquota,例如:
UUID=abc123 /var ext4 defaults,usrquota,grpquota 0 2 - 立即重挂载:sudo mount -o remount /var,再用 mount | grep var 确认输出含 usrquota
- 初始化配额数据库:sudo quotacheck -cugm /var,成功后 ls /var/aquota.* 应显示两个非空文件
- 开启配额:sudo quotaon /var,用 sudo quotaon -p 验证状态为 enabled
给服务账户设硬限(防“日志刺客”)
普通用户不是主要风险源,syslog、www-data、mysql、postgres 等服务账户才是日志疯长的主力。必须设硬限制(hard limit),软限无效:
- 查 UID:getent passwd syslog(通常 UID=101)
- 设置限额:sudo edquota -u syslog,在 vi 编辑器中填入(单位 KB):
• blocks 行:soft 留空,hard 填 512000(500MB)
• inodes 行:soft 留空,hard 填 50000(防小文件刷爆 inode) - 同法设置其他关键账户:sudo edquota -u www-data、sudo edquota -u mysql
- 测试拦截:sudo -u syslog dd if=/dev/zero of=/var/log/test.bin bs=1M count=600 应报 Disc quota exceeded
验证真实防护效果
命令返回成功不等于生效,必须走通故障链路:
- 切换到被限账户:sudo -u syslog bash,尝试超限写入,确认被拒
- 另开终端,用普通用户 ssh user@localhost,验证即使 /var/log 已满 99%,仍能正常认证登录
- 检查实时用量:quota -u syslog 或全局汇总:repquota -a | grep -E "(syslog|www-data)"











