每日自动化安全巡检脚本住宅Linux服务器

为什么住宅Linux服务器也需要每日安全巡检

很多住在公寓或家里的朋友,喜欢用一台旧电脑或树莓派跑 Linux 服务器,用来挂博客、存文件或者跑服务。
但住宅服务器暴露在公网后,经常会被扫描和试探。每日自动化安全巡检脚本能帮你每天定期检查登录日志、开放端口、可疑进程和系统更新,异常时直接推送通知。
这套方案不需要你懂多深的安全知识,跟着流程走就能搭好。

动手前的准备工作

确认你的服务器已经安装了以下基础工具(大部分发行版自带):

  • bash(默认 Shell)
  • cron(定时任务管理)
  • mailxmsmtp(可选,用于发送邮件报告)
  • lsofnetstat(查看端口和连接)
  • fail2ban(可选检测暴力破解)

如果缺某个工具,用包管理器安装,例如 Debian/Ubuntu 执行:

sudo apt update
sudo apt install cron mailutils lsof net-tools

一步步搭建巡检脚本

创建一个脚本文件 /usr/local/bin/security_check.sh

sudo nano /usr/local/bin/security_check.sh

粘贴以下内容(根据你的实际需求可以增减检查项):

#!/bin/bash
REPORT="/var/log/security_daily_report.txt"
SERVER_NAME=$(hostname)
DATE=$(date '+%Y-%m-%d %H:%M:%S')
echo "======== $SERVER_NAME 每日安全巡检报告 $DATE ========" > $REPORT

# 1. 检查最近10条登录失败的记录
echo "" >> $REPORT
echo "## 最近登录失败记录(前10条)" >> $REPORT
sudo lastb | head -10 >> $REPORT 2>/dev/null || echo "无登录失败记录" >> $REPORT

# 2. 检查当前监听端口(IPv4)
echo "" >> $REPORT
echo "## 当前监听端口 (TCP/UDP)" >> $REPORT
sudo netstat -tulpn4 | grep LISTEN >> $REPORT 2>/dev/null || echo "无监听端口" >> $REPORT

# 3. 检查CPU/内存/磁盘使用
echo "" >> $REPORT
echo "## 系统负载与磁盘" >> $REPORT
uptime >> $REPORT
df -h / | tail -1 >> $REPORT
free -h >> $REPORT

# 4. 检查是否需要更新(Debian/Ubuntu)
echo "" >> $REPORT
echo "## 可更新软件包数量" >> $REPORT
sudo apt list --upgradable 2>/dev/null | grep -v "列出" | wc -l >> $REPORT

# 5. 检查可疑进程(占用过高CPU的进程)
echo "" >> $REPORT
echo "## CPU占用最高的5个进程" >> $REPORT
ps aux --sort=-%cpu | head -6 >> $REPORT

echo "" >> $REPORT
echo "报告生成时间: $DATE" >> $REPORT

保存后赋予执行权限:

sudo chmod +x /usr/local/bin/security_check.sh

先手动跑一次,确认没有报错:

sudo /usr/local/bin/security_check.sh
cat /var/log/security_daily_report.txt

如果想让结果发送到邮箱,在脚本末尾加入:

mail -s "$SERVER_NAME 每日安全巡检报告" your_email@example.com < $REPORT

容易踩的坑

  • cron环境变量不足:脚本里用到的命令(如 netstat、apt)默认不在cron的PATH里,脚本中一定要写绝对路径,或者开头加入 PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
  • sudo权限问题:cron任务如果用普通用户执行,脚本内有 sudo 会提示密码,可以用 visudo 给该用户添加免密执行权限,比如:username ALL=(ALL) NOPASSWD: /usr/local/bin/security_check.sh
  • 日志文件权限/var/log/security_daily_report.txt 需要普通用户可写,或者使用 sudo 写入。建议脚本内部用 sudo tee 或直接使用 >> 时先创建好文件并授权。
  • mail命令未配置:如果没安装邮件传输代理,发邮件部分会报错。可以先注释掉,只保留本地日志。

设置cron定时任务

crontab -e 添加一行,例如每天早上8点执行:

0 8 * * * /usr/local/bin/security_check.sh

如果希望输出日志到文件以便查看cron是否执行成功,可改为:

0 8 * * * /usr/local/bin/security_check.sh >> /var/log/cron_security.log 2>&1

保存后检查cron服务状态:

sudo systemctl status cron

确认脚本正常运行

等几分钟后,查看日志是否生成:

ls -l /var/log/security_daily_report.txt
cat /var/log/security_daily_report.txt

也可以手动触发一次,用 sudo /usr/local/bin/security_check.sh 验证。
如果你想测试cron任务是否真的跑了,可以临时改成一个更近的时间(比如每分钟一次),等一分钟后再看日志。记得测试完改回正常频率

高频问题解答

Q:脚本执行后报告里没有内容,只有空行?
A:很可能脚本里的命令需要root权限,但cron里执行的环境没有sudo免密。检查visudo配置,或者直接在cron里使用 * * * * * root /usr/local/bin/security_check.sh(需写入 /etc/crontab)。

Q:我怎么收到邮件报告?
A:安装 postfixmsmtp 并配置好发信后,脚本里保留 mail 命令即可。如果不熟悉邮件配置,建议先只用本地文件,后续再优化。

Q:我想增加检查项目,比如fail2ban状态或者Docker容器状态,怎么改?
A:在脚本相应位置加入类似 sudo fail2ban-client status sshd >> $REPORT 的命令即可,注意命令的路径和权限。

如果你正在处理每日自动化安全巡检脚本住宅Linux服务器,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。

分享到:
上一篇
站内整改清单解决谷歌收录缓慢不抓取问题:站内整改清单
下一篇
Ollama远程访问FRP内网穿透完整配置教程
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意