• Linux
  • 安全
  • 运维

Linux 服务器安全基线:七项检查与对应命令

不做一次性脚本,而是按 SSH、账户、防火墙、补丁、审计、暴露面、日志七项逐条核对,附可直接执行的检查命令。

安全基线不是装一个脚本就完事。下面七项按“能被远程利用的程度”排序,每项都给出检查命令;建议先在测试机跑一遍,再动生产。

检查项重点常用命令
SSH密钥登录、禁用密码sshd -t
账户空密码、sudo 范围getent passwd
防火墙只开必要端口ss -tulpn
补丁安全更新、重启窗口dnf update --security
登录审计失败尝试、封禁lastb
审计敏感文件变更auditctl -l
日志与时间容量、chronytimedatectl

一、SSH:先保住自己的登录方式

改 SSH 配置最怕把自己关在门外。顺序应该是:先确认密钥登录可用,再开新会话验证,最后才关闭密码登录。配置写在 /etc/ssh/sshd_config.d/ 下的独立文件里,避免覆盖发行版默认值:

PermitRootLogin prohibit-password
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
LoginGraceTime 20

改完先 sshd -t 校验语法,再 systemctl reload sshd。reload 不会断开现有会话,这是你的安全绳。确认新开的密钥会话能登录后,再关闭旧会话。

二、账户与 sudo

日常用普通账户加 sudo,不要所有操作都用 root。检查空密码账户和可登录 shell:

awk -F: '($2 == "") { print $1 }' /etc/shadow
getent passwd | awk -F: '($7 !~ /(nologin|false)$/) { print $1 }'
sudo -l -U deploy

离职账户、测试账户、默认服务账户都要清理或锁定。sudo 规则用 visudo 编辑,保存时会做语法检查;不要直接改 /etc/sudoers,一次手误就可能让所有人失去提权能力。

三、防火墙与安全组

云主机有两层:云平台安全组和系统防火墙。只开业务需要的端口,SSH 尽量限制来源 IP。改防火墙之前,先确认当前 SSH 来源已被放行,再重载规则;云安全组同理,先放行新规则再保存,避免把自己锁在外面。检查本机监听:

ss -tulpn
firewall-cmd --list-all
nft list ruleset

看到 0.0.0.0:2375 这类 Docker API 端口要立刻处理:它等于把 root 权限暴露在公网上。数据库、Redis 只监听 127.0.0.1 或内网地址,不要图省事开公网。

四、补丁与内核

Alibaba Cloud Linux 3 使用 dnf,安全更新可以每天自动安装,但内核更新需要安排重启窗口:

dnf check-update --security
dnf update --security
dnf install -y dnf-automatic
systemctl enable --now dnf-automatic.timer

自动更新只装安全补丁,不要开全量自动升级,避免业务组件被意外升级。重启前确认服务有开机自启,并尽量安排在低峰期。

五、暴力尝试与登录审计

公网 SSH 每天都会收到大量尝试,这是常态。除了禁用密码登录,可以用 fail2ban 对多次失败的来源做短期封禁;封禁时间不要设太长,避免误伤自己。查看失败记录:

lastb | head -20
journalctl -u sshd --since "24 hours ago" | grep -i "failed"

如果某个 IP 持续尝试,直接在安全组层面封掉更彻底。不要把 fail2ban 当成唯一防线,密钥认证才是根本。

六、审计与关键文件权限

auditd 可以记录对敏感文件的修改。最小规则集先覆盖账户和 sudo:

-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/sudoers -p wa -k sudoers
-w /etc/sudoers.d/ -p wa -k sudoers

权限方面:/etc/shadow 应为 000 或 640,~/.ssh 为 700,authorized_keys 为 600。权限过宽时 sshd 会直接拒绝密钥登录,这也是常见的“密钥没问题却登不上”的原因。

七、日志、时间与暴露面

最后三项经常被忽略:chrony 保证时间同步,否则日志时间线和证书校验都会出问题;journald 设置容量上限,避免日志把磁盘写满;定期检查新增的监听端口和 systemd 服务,确认没有多余组件被装上来。

timedatectl
journalctl --disk-usage
systemctl list-unit-files --state=enabled

安全基线是持续动作:每次上线新服务,都重新过一遍监听端口和防火墙;每次人员变动,都复查账户和密钥。把它写成清单,比写成一次性脚本更可靠。建议每季度完整复查一次,并在变更记录里写清楚改了哪一项、为什么改、如何回滚。

本文基于公开文档与本地实验整理,示例命令请在测试环境验证后再用于生产。

  • Linux
  • 安全
  • 运维