核心是三步:将sshd日志路由至独立分区目录(如/var/log/ssh/auth.log),对该分区启用root用户磁盘配额(如2GB硬限制),再通过logrotate配置maxsize 50M+daily+rotate 30+delaycompress+postrotate通知rsyslog重载句柄,确保隔离存储、容量可控、轮转安全不丢日志。

要把 sshd 日志重定向到独立分区并用 logrotate 安全保存,核心是三步:让日志写进独立挂载点、限制该分区的写入总量、轮转时避免中断和冲突。不依赖默认 /var/log,才能真正防日志撑爆系统盘或被恶意填满。
一、将 SSH 日志路由到独立分区目录
先确保目标分区已挂载(例如 /dev/sdb1 挂在 /var/log/ssh),且权限为 0700,属主 root:root:
- 修改 /etc/ssh/sshd_config,设
SyslogFacility local0 - 在 /etc/rsyslog.d/ssh-redirect.conf 中添加:
local0.* /var/log/ssh/auth.log - 重启服务:
sudo systemctl restart rsyslog sshd
验证:执行 logger -p local0.info "test" 后检查 /var/log/ssh/auth.log 是否有新条目。
二、为独立分区启用磁盘配额并限制 root 写入
auditd 和 sshd 都以 root 身份写日志,普通用户配额无效,必须对 root 设硬限额:
- 编辑 /etc/fstab,在
/var/log/ssh对应行加入usrquota,grpquota - 重新挂载:
sudo mount -o remount /var/log/ssh - 初始化配额数据库:
sudo quotacheck -cug /var/log/ssh - 给 root 设 2GB 硬上限:
sudo setquota -u root 0 2097152 0 0 /var/log/ssh(单位 KB)
这样即使攻击者暴力刷 SSH 登录,日志也无法突破分区容量上限。
三、配置 Logrotate 实现安全轮转
在 /etc/logrotate.d/sshd 中写入以下内容,关键点是 maxsize + postrotate + delaycompress:
/var/log/ssh/auth.log {-
maxsize 50M—— 单文件超 50MB 立即轮转,防突发日志洪峰 -
daily—— 同时保留每日兜底策略 -
rotate 30—— 保留 30 个归档 -
compress—— 归档后压缩 -
delaycompress—— 上一轮刚生成的 .1 不压缩,避免 rsyslog 写冲突 -
missingok—— 文件不存在也不报错 -
notifempty—— 空文件不轮转 -
create 0600 root root—— 新日志权限严格 sharedscriptspostrotate/bin/kill -USR1 $(cat /var/run/rsyslogd.pid 2>/dev/null) 2>/dev/null || trueendscript}
注意:这里发 USR1 是通知 rsyslog 重载日志文件句柄,不是重启服务,不会丢日志。
四、附加加固项(可选但推荐)
进一步提升完整性与可审计性:
- 在 /etc/audit/rules.d/ssh.rules 加监控规则:
-w /var/log/ssh/auth.log -p wa -k ssh_log_access,记录谁读写过该日志 - 设置 SELinux 上下文:
sudo semanage fcontext -a -t var_log_t "/var/log/ssh(/.*)?",再restorecon -Rv /var/log/ssh - 定期校验日志哈希:
sha256sum /var/log/ssh/auth.log*存档到离线介质
整套机制让 SSH 日志既隔离存储、又受容量约束、还能自动归档清理,同时保障轮转过程不丢事件、不中断服务。

















