适用场景

Linux 服务器出事故,多半不是内核问题,而是规范问题:所有人用 root、句柄数不够、时间不同步、cron 里躺着三年前的脚本。把规范和巡检做成清单,问题能少一大半。

配置步骤(账号与 sudo 治理)

# 1) 账号清单(含最后登录时间)
awk -F: '($3>=1000){print $1, $3, $6, $7}' /etc/passwd
lastlog | head -20

# 2) 有 sudo 权限的账号
getent group sudo
ls -l /etc/sudoers.d/
grep -rn 'NOPASSWD' /etc/sudoers /etc/sudoers.d/ 2>/dev/null

# 3) 公钥审计(哪些账号有免密登录)
for h in /root /home/*; do
  [ -f "$h/.ssh/authorized_keys" ] && echo "== $h" && cut -d' ' -f3 "$h/.ssh/authorized_keys"
done

# 4) SSH 基线
grep -E '^(PermitRootLogin|PasswordAuthentication|Port)' /etc/ssh/sshd_config

# 5) 离职处置
usermod -L olduser && usermod -s /sbin/nologin olduser
# 并清理其 authorized_keys

关键参数与建议

  • 账号治理:一人一号,禁止共享 root;离职当天禁用账号并清理密钥
  • sudo 授权:按需授权具体命令,禁止 NOPASSWD ALL
  • 密钥管理:authorized_keys 定期审计,禁止遗留测试公钥
  • 句柄与进程数:按业务设 nofile/nproc(systemd 里设,改 limits.conf 对本机 systemd 服务无效)
  • 时间同步:统一 chrony 指向内网 NTP,偏差超 100ms 要查
  • 定时任务:cron 统一登记(谁建、干什么、失败怎么办),禁用来源不明脚本
  • 日志:syslog 集中收集,本机日志轮转保留 30 天以上
  • 基线:最小化安装、关闭不必要服务、SSH 禁用密码与 root 直登

容易踩的坑

  • 全公司共用一个 root 密码,出事无法定位到人
  • sudo 配 NOPASSWD ALL,等于人人都是 root
  • 离职只改密码,公钥还在,照样能登
  • 测试期建的账号没人清理,几年后还在
  • SSH 允许密码登录,被暴力破解
  • 账号有了但没有审计留痕,操作无法追溯

验证与巡检

# 巡检项
awk -F: '($3>=1000){print $1}' /etc/passwd | sort
lastlog | grep -v 'Nie' | head
getent group sudo
ls -l /etc/sudoers.d/
grep -c '' /root/.ssh/authorized_keys

# SSH 配置
grep -E '^(PermitRootLogin|PasswordAuthentication)' /etc/ssh/sshd_config
  • 巡检:无共享账号、sudo 按需授权、公钥数量可控、SSH 禁 root 禁密码、离职账号已清理

小结

Linux 规范验收:随便挑一台服务器,能说清谁能登、谁有 sudo、有哪些定时任务、时间偏差多少。四项都能查到,规范才算落地。

> 说明:文中命令为通用写法,不同型号/版本可能略有差异,落地前请对照设备实际版本的官方文档;带外管理与安全设备变更建议先在测试设备验证。