适用场景
Linux 服务器出事故,多半不是内核问题,而是规范问题:所有人用 root、句柄数不够、时间不同步、cron 里躺着三年前的脚本。把规范和巡检做成清单,问题能少一大半。
配置步骤(定时任务与日志治理)
# 1) 定时任务清单(root 与所有用户)
crontab -l
for u in $(cut -d: -f1 /etc/passwd); do c=$(crontab -u $u -l 2>/dev/null); [ -n "$c" ] && echo "== $u" && echo "$c"; done
ls -l /etc/cron.d/ /etc/cron.daily/ 2>/dev/null
# 2) 分类:备份 / 清理 / 同步 / 报表 / 不明来源
# 3) 加固
# - 统一加日志重定向(>> /var/log/cron-jobs/xxx.log 2>&1)
# - 加锁避免重叠执行(flock)
# - 失败告警(脚本失败写监控或发告警)
flock -n /var/lock/backup.lock -c '/opt/scripts/backup.sh'
# 4) 日志轮转
cat > /etc/logrotate.d/app <<'EOF'
/var/log/app/*.log {
daily
rotate 30
compress
missingok
notifempty
copytruncate
}
EOF
关键参数与建议
- 账号治理:一人一号,禁止共享 root;离职当天禁用账号并清理密钥
- sudo 授权:按需授权具体命令,禁止 NOPASSWD ALL
- 密钥管理:authorized_keys 定期审计,禁止遗留测试公钥
- 句柄与进程数:按业务设 nofile/nproc(systemd 里设,改 limits.conf 对本机 systemd 服务无效)
- 时间同步:统一 chrony 指向内网 NTP,偏差超 100ms 要查
- 定时任务:cron 统一登记(谁建、干什么、失败怎么办),禁用来源不明脚本
- 日志:syslog 集中收集,本机日志轮转保留 30 天以上
- 基线:最小化安装、关闭不必要服务、SSH 禁用密码与 root 直登
容易踩的坑
- cron 里躺着重名脚本,重复执行导致数据错乱
- 任务没有日志,失败几个月没人知道
- 没有 flock,上轮没跑完下轮又启动
- 日志不轮转,/var 被写满导致服务异常
- 任务用 root 跑且脚本可被普通用户改写,提权风险
- 备份任务与业务高峰重叠,影响性能
验证与巡检
# 任务与日志
crontab -l | wc -l
ls -l /var/log/cron-jobs/ 2>/dev/null | tail
journalctl -u cron --since '1 day ago' | grep -i -E 'error|fail' | head
# 日志占用
du -sh /var/log && df -h /var
- 巡检:任务清单齐全、每个任务有日志与失败告警、flock 已加、日志保留 ≥30 天、磁盘水位正常
小结
Linux 规范验收:随便挑一台服务器,能说清谁能登、谁有 sudo、有哪些定时任务、时间偏差多少。四项都能查到,规范才算落地。
> 说明:文中命令为通用写法,不同型号/版本可能略有差异,落地前请对照设备实际版本的官方文档;带外管理与安全设备变更建议先在测试设备验证。