Linux系统安全加固:除了改密码,别忘了清理这些默认日志和命令历史(附脚本)
2026/6/8 2:46:14 网站建设 项目流程

Linux系统安全加固:从日志清理到历史记录管理的完整指南

刚拿到一台全新的云服务器时,大多数用户的第一反应是修改默认密码和SSH端口。这确实是基础的安全措施,但真正的系统安全远不止于此。那些被忽视的系统日志、命令历史、临时文件,都可能成为潜在的安全隐患。想象一下,当你的服务器被入侵时,攻击者首先查看的就是这些记录,它们像是一张详细的地图,指引着攻击者了解系统的使用情况和薄弱环节。

1. 为什么需要清理系统痕迹

每台Linux服务器都在默默记录着各种活动信息,这些数据本意是帮助管理员排查问题,但在安全领域却成了双刃剑。系统默认会记录用户登录信息、执行的命令、服务运行状态等,这些都可能暴露敏感信息。

常见的风险点包括:

  • 命令历史文件(.bash_history)可能包含敏感命令和参数
  • 系统日志(/var/log/)记录着用户登录、sudo使用等关键信息
  • 临时文件可能包含程序运行时泄露的数据
  • 软件包管理器保留了安装记录

我曾遇到过一位开发者,他在服务器上直接执行了包含数据库密码的命令,这个命令被完整记录在了历史中。后来服务器被入侵,攻击者正是通过翻查历史记录获得了数据库访问权限。

2. 关键日志文件定位与清理

Linux系统的日志文件主要集中在/var/log目录下,不同发行版可能略有差异。以下是最需要关注的日志文件:

日志文件记录内容查看命令
/var/log/auth.log认证相关日志(登录、sudo等)cat, less
/var/log/syslog系统活动综合日志cat, less
/var/log/btmp失败的登录尝试lastb
/var/log/wtmp登录和注销记录last
/var/log/lastlog用户最后登录时间lastlog
/var/log/secure安全相关日志(RHEL/CentOS)cat, less

安全清理脚本示例:

#!/bin/bash # 清理系统日志(保留最近7天) find /var/log -type f -name "*.log" -mtime +7 -exec rm -f {} \; # 清空但不删除日志文件 truncate -s 0 /var/log/syslog truncate -s 0 /var/log/auth.log truncate -s 0 /var/log/kern.log # 清理登录记录 echo "" > /var/log/btmp echo "" > /var/log/wtmp

注意:直接删除日志文件可能导致某些服务无法正常运行,建议使用truncate命令清空内容而非删除文件。

3. 命令历史记录管理

.bash_history文件是另一个需要重点关注的对象。它默认记录用户执行过的所有命令,包括那些带有敏感参数的。

历史记录安全设置方法:

  1. 即时清理特定命令
# 从历史中删除包含"password"的命令 history | grep "password" | awk '{print $1}' | xargs -I{} history -d {}
  1. 禁用历史记录(临时)
# 当前会话不记录历史 unset HISTFILE
  1. 永久性配置(推荐)在~/.bashrc中添加以下内容:
# 忽略特定命令 export HISTIGNORE="passwd:mysql -u*:ssh *@*" # 设置历史记录不保存敏感命令 export HISTCONTROL=ignorespace:ignoredups # 限制历史记录大小 export HISTSIZE=1000 export HISTFILESIZE=2000

实用技巧:

  • 在命令前加空格(需要HISTCONTROL包含ignorespace)可不记录该命令
  • 使用history -c清空当前会话历史,然后history -w立即写入文件

4. 临时文件与缓存清理

系统运行过程中会产生各种临时文件,这些也可能包含敏感信息。

需要清理的目录包括:

  • /tmp/ 和 /var/tmp/ - 系统临时文件
  • ~/.cache/ - 用户缓存文件
  • /var/cache/ - 系统缓存文件

自动化清理脚本:

#!/bin/bash # 清理用户缓存 rm -rf ~/.cache/* # 清理系统临时文件 find /tmp -type f -atime +1 -delete find /var/tmp -type f -atime +1 -delete # 清理旧的内核文件(Ubuntu) apt-get autoremove --purge -y

5. 系统加固综合脚本

以下是一个综合性的安全加固脚本,包含了上述所有关键点:

#!/bin/bash # Linux系统安全加固脚本 # 需要root权限执行 echo "[*] 开始系统安全加固..." # 1. 日志清理 echo "[+] 清理系统日志..." find /var/log -type f -name "*.log" -mtime +7 -exec rm -f {} \; truncate -s 0 /var/log/syslog truncate -s 0 /var/log/auth.log echo "" > /var/log/btmp echo "" > /var/log/wtmp # 2. 历史记录配置 echo "[+] 配置命令历史记录..." for user in /home/*; do if [ -d "$user" ]; then bashrc="$user/.bashrc" [ -f "$bashrc" ] && { grep -q "HISTCONTROL" $bashrc || echo "export HISTCONTROL=ignorespace:ignoredups" >> $bashrc grep -q "HISTIGNORE" $bashrc || echo "export HISTIGNORE=\"passwd:mysql -u*:ssh *@*\"" >> $bashrc chown $(stat -c "%U:%G" $user) $bashrc } fi done # 3. 清理临时文件 echo "[+] 清理临时文件..." find /tmp -type f -atime +1 -delete find /var/tmp -type f -atime +1 -delete rm -rf /root/.cache/* # 4. 系统更新 echo "[+] 更新系统软件..." apt-get update && apt-get upgrade -y echo "[*] 安全加固完成!"

提示:建议将此脚本保存为secure_clean.sh,添加执行权限(chmod +x),并定期运行。

6. 自动化与定时清理

手动执行清理固然有效,但建立自动化机制更为可靠。Linux的cron服务可以帮助我们实现定期自动清理。

设置每周自动清理:

  1. 创建清理脚本/etc/cron.weekly/secure_clean:
#!/bin/bash /path/to/secure_clean.sh > /dev/null 2>&1
  1. 添加执行权限:
chmod +x /etc/cron.weekly/secure_clean
  1. 如果需要更频繁的清理,可以在/etc/cron.daily/下放置脚本

日志轮转配置:修改/etc/logrotate.conf可以控制系统日志的保留策略:

# 保留7天的日志,压缩旧日志 rotate 7 compress

7. 安全加固的进阶技巧

除了基本的清理工作,还有一些进阶技巧可以进一步提升系统安全性:

1. 文件属性加固

# 使日志文件不可修改(需要时再取消) chattr +a /var/log/auth.log chattr +a /var/log/syslog # 取消只读属性 chattr -a /var/log/auth.log

2. 安全删除工具使用shred命令安全删除文件:

# 覆盖3次后删除文件 shred -u -z -n 3 sensitive_file.txt

3. 内核参数加固在/etc/sysctl.conf中添加:

# 防止SYN洪水攻击 net.ipv4.tcp_syncookies = 1 # 禁止ICMP重定向 net.ipv4.conf.all.accept_redirects = 0

执行sysctl -p使更改生效。

4. SSH加固配置编辑/etc/ssh/sshd_config:

# 禁用root登录 PermitRootLogin no # 限制登录尝试次数 MaxAuthTries 3 # 使用密钥认证 PasswordAuthentication no

记住每次修改SSH配置后要重启服务:systemctl restart sshd

在实际运维中,我发现很多安全问题都源于这些看似不起眼的细节。一台真正安全的服务器,不仅需要坚固的外部防御,还需要这种"内部清洁"。就像我们不仅要锁好门窗,还要定期清理家中可能暴露隐私的便签和文件一样。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询