禁用root远程登录并强制密钥认证需设PermitRootLogin no、PasswordAuthentication no、PubkeyAuthentication yes、MaxAuthTries 3,配合AllowUsers白名单及PAM密码复杂度策略,确保普通用户已配置密钥且加入sudo组,重启sshd后新终端验证。

禁用 root 远程登录并强制密钥认证
直接允许 root 通过 SSH 登录是高危行为,攻击者一旦爆破成功就获得完全控制权。必须关闭它,改用普通用户 + sudo 的组合。
编辑 /etc/ssh/sshd_config 或新建 /etc/ssh/sshd_config.d/99-hardening.conf:
PermitRootLogin no PasswordAuthentication no PubkeyAuthentication yes ChallengeResponseAuthentication no MaxAuthTries 3
注意:PasswordAuthentication no 必须配合已部署有效的公钥(~/.ssh/authorized_keys),否则会锁死自己;改完后务必执行 sudo systemctl restart sshd,并在新终端验证连接是否仍可用。
常见错误现象:
- 改完配置后 SSH 连不上 —— 多半是
PasswordAuthentication关太早,还没配好密钥 -
PermitRootLogin no生效但sudo报权限拒绝 —— 普通用户没加进sudo组,漏了usermod -aG sudo username
用 pam_pwquality.so 强制密码复杂度
仅靠 passwd 命令改密码,用户依然能设 123456 这类弱口令。真正起作用的是 PAM 模块 pam_pwquality.so,它在密码设置时实时拦截不合规输入。
编辑 /etc/pam.d/common-password(Debian/Ubuntu)或 /etc/pam.d/system-auth(RHEL/CentOS),找到含 pam_pwquality.so 的行,改成:
password requisite pam_pwquality.so try_first_pass retry=3 minlen=12 difok=3 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
关键参数含义:
-
minlen=12:最少 12 位,不是“建议”,是硬性门槛 -
ucredit=-1表示至少 1 个大写字母,负数才是“最少需要” -
difok=3指新旧密码至少 3 位不同,防用户只改末尾数字
容易踩的坑:
- 改完不测试:用
passwd尝试设一个 8 位纯数字密码,应立即报错 - 忽略
try_first_pass:若没加这个参数,用户改密码时会被要求输两次旧密码 - 和
pam_unix.so行顺序错乱:必须把pam_pwquality.so放在pam_unix.so之前,否则校验不生效
限制登录用户与来源 IP
光靠账号密码或密钥还不够,得从源头缩小可登录范围。生产环境绝不该让所有用户、所有 IP 都能连进来。
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
在 /etc/ssh/sshd_config 中添加:
AllowUsers deploy@192.168.10.0/24 admin@203.0.113.42 DenyUsers guest test
说明:
-
AllowUsers是白名单,只放行指定用户+IP 组合,多个条目空格分隔 - 支持 CIDR 写法(如
192.168.10.0/24),也支持单 IP(203.0.113.42) -
DenyUsers是黑名单,优先级低于AllowUsers,仅作补充
性能影响很小,但大幅降低暴力扫描成功率。注意:如果用跳板机或代理 IP 登录,@ 后面填的是你真实出口 IP,不是跳板机 IP。
检查并清理 UID=0 的非 root 账户
系统里出现第二个 UID=0 账户,等于开了后门。有些运维脚本或恶意程序会悄悄创建这种账户,表面看是普通用户,实则拥有 root 权限。
运行这行命令排查:
awk -F: '$3 == 0 && $1 != "root" {print}' /etc/passwd
如果输出任何结果,立刻处理:
- 确认是否为误操作创建(如手误执行了
useradd -u 0 backdoor) - 用
usermod -u 1001 backdoor修改 UID(不能直接设为 0) - 更稳妥的做法是删掉:
userdel -r backdoor
容易被忽略的点:某些容器镜像或自动化部署工具会在初始化时创建 UID=0 的服务账户,必须在上线前扫一遍,不能只依赖“没看到异常就不管”。










