You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何禁止MySQL用户空密码登录及创建待激活不可登录用户?

嘿,这个问题我碰到过好多次了,给你梳理两个核心需求的解决办法:

一、禁止所有用户使用空密码登录

要彻底堵住空密码登录的漏洞,需要从两个层面下手:

1. 系统PAM认证层面(覆盖本地登录、su等场景)

Linux系统的登录认证由PAM(Pluggable Authentication Modules)管控,我们需要修改对应的配置文件禁用空密码允许:

  • 对于Debian/Ubuntu系列,编辑/etc/pam.d/common-auth;对于RHEL/CentOS系列,编辑/etc/pam.d/system-auth
  • 找到包含pam_unix.so的认证行,确保没有nullok参数(这个参数就是允许空密码登录的开关)。修改后类似:
    auth    required    pam_unix.so    sha512
    

2. SSH服务层面(远程登录场景)

如果用户需要通过SSH登录,还要单独配置SSHD:

  • 编辑/etc/ssh/sshd_config,找到PermitEmptyPasswords选项,设置为:
    PermitEmptyPasswords no
    
  • 重启SSHD服务生效:
    # Systemd系统(如Ubuntu 16.04+/CentOS 7+)
    systemctl restart sshd
    
    # SysVinit系统(老版本发行版)
    service sshd restart
    
二、创建更新密码前无法登录的用户

有几种可靠的方式实现这个需求,选哪种看你的习惯:

方法1:创建时直接设置无效密码哈希

在useradd命令里用-p参数指定一个无效的密码值(比如*或!,这些值在/etc/shadow里会被系统判定为密码无效):

useradd -p '*' restricted_user

这样用户既不能用空密码登录,也无法用任何有效密码登录,必须重置密码后才能访问。

方法2:创建后立即锁定账号

先创建用户,再用passwd -l锁定账号:

useradd restricted_user
passwd -l restricted_user

锁定后用户登录会被直接拒绝,后续解锁并设置密码可以用:

passwd -u restricted_user
# 然后跟着提示设置新密码

方法3:修改现有用户为无法登录状态

如果是已经存在的用户,用usermod修改密码字段为无效值:

usermod -p '*' existing_user

内容的提问来源于stack exchange,提问作者SystemParadox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:17:10