首页 帮助中心 常见问题 VPS信息安全之彻底清理日志的常用方法
VPS信息安全之彻底清理日志的常用方法
时间 : 2026-04-29 09:43:35
编辑 : 华纳云
阅读量 : 20

运维VPS一段时间后,你会发现磁盘空间被日志吃掉了不少。更严重的是,如果服务器被入侵,攻击者第一件事就是清理访问痕迹。作为服务器管理员,掌握日志清理的正确方法,既是为了释放磁盘,也是安全响应流程里绕不开的一环。

本文不讲虚的,直接列出VPS环境下清理日志的常用操作。所有命令在UbuntuDebianCentOS上通用。

直接清空日志文件内容

最粗暴的方法是用`truncate`命令把文件大小变成0。文件还在,权限不变,但里面没东西了。

truncate -s 0 /var/log/syslog

或者用重定向:

cat /dev/null > /var/log/auth.log

这种方式适合处理正在被服务写入的日志文件。注意不要直接`rm`删除,因为某些进程会一直持有文件句柄,删除后新日志不会继续写入。

按时间删除旧日志

很多时候你只想保留最近7天的日志。用`find`配合`mtime`参数就能筛出来。

find /var/log -name "*.log" -mtime +7 -delete

`-mtime +7`代表修改时间在7天前的文件。先不加`-delete`跑一遍看看匹配结果,确认无误再删。

针对Nginx访问日志:

find /var/log/nginx -name "access.log*" -mtime +30 -exec rm {} \;

使用logrotate自动轮转

logrotate是系统自带的日志管理工具,比手删靠谱。配置文件在`/etc/logrotate.d/`下。

看一个典型配置,针对自定义应用`/var/log/myapp/*.log`

/var/log/myapp/*.log {

daily

rotate 7

compress

delaycompress

missingok

notifempty

create 644 root root

postrotate

systemctl reload myapp > /dev/null 2>&1 || true

endscript

}

解释一下参数:

- `daily`:每天轮转一次

- `rotate 7`:保留7个归档文件

- `compress`:压缩旧日志

- `delaycompress`:上上次的才压缩,上次的暂时不压(配合postrotate常用)

- `postrotate`:轮转后告诉服务重新打开日志文件

手动执行logrotate看效果:

logrotate -f /etc/logrotate.d/myapp

清理systemd journal日志

使用systemd的系统,journal会吃掉/var/log/journal目录几GB的空间。查看当前占用:

journalctl --disk-usage

限制日志最大体积为500MB

journalctl --vacuum-size=500M

或者只保留最近两周:

journalctl --vacuum-time=14d

想永久生效,修改`/etc/systemd/journald.conf`

SystemMaxUse=500M

MaxFileSec=14day

然后重启服务:

systemctl restart systemd-journald

清理Web服务器和数据库慢日志

这部分经常被忽略。以MySQL慢查询日志为例,路径一般在`/var/log/mysql/slow.log`

禁用或轮转慢日志配置(`/etc/mysql/my.cnf`):

slow_query_log = 1

slow_query_log_file = /var/log/mysql/slow.log

long_query_time = 2

log_queries_not_using_indexes = 0

清空后让MySQL重新打开文件:

mysqladmin flush-logs

Nginx访问日志如果不需要长期保留,可以直接关闭记录。编辑站点配置,把`access_log off;`加上。

安全注意事项

清理日志时有两个雷区要避开。

第一,不要在生产环境直接`rm -rf /var/log/*`。这会导致依赖日志目录的服务启动失败,而且某些服务会在目录不存在时停止写入。

第二,如果VPS是多人共用或者需要合规审计,日志保留期限可能需要遵守当地法律或行业规范。金融、医疗类业务通常要求至少保留180天。

第三,攻击者清理日志后通常会留下空文件。如果你发现某个日志文件大小为0,但修改时间却很新,这可能是入侵迹象。对比同时间段的其他服务器统计就能发现问题。

写一个清理脚本

把常用操作集成到一起,做成cron任务每周跑一次。

#!/bin/

# VPS日志清理脚本

# 清理syslog和auth日志

truncate -s 0 /var/log/syslog

truncate -s 0 /var/log/auth.log

# 清理7天前的apt历史日志

find /var/log/apt -name "*.log" -mtime +7 -delete

# 清理journal到300M

journalctl --vacuum-size=300M

# 重载rsyslog

systemctl reload rsyslog

echo "日志清理完成于 $(date)" >> /var/log/logclean.log

保存为`/usr/local/bin/cleanlogs.sh`,加执行权限。然后添加到crontab

0 3 * * 0 /usr/local/bin/cleanlogs.sh >/dev/null 2>&1

每周日凌晨3点自动运行。

日志清理不是删完就没事了。日常要养成两个习惯:一是用logrotate统一管理轮转策略,二是定期检查磁盘占用高的日志文件。对于敏感业务,考虑把日志通过rsyslog远程发送到另一台VPS保存,本地只保留少量。这样即使主服务器被攻击,日志证据还在。

相关内容
客服咨询
7*24小时技术支持
技术支持
渠道支持