在Linux系统中,锁定用户是一项常见的安全管理操作,通常用于临时或永久禁止用户访问系统,例如应对安全事件、员工离职、权限调整等场景,Linux提供了多种用户锁定方法,涵盖密码锁定、登录限制、SSH访问控制等多个维度,本文将详细介绍这些方法的具体操作、适用场景及注意事项。

通过passwd命令锁定用户密码
passwd命令是Linux中最基础的用户密码管理工具,支持直接锁定或解锁用户密码,操作简单且兼容所有主流发行版(如Ubuntu、CentOS、Debian等)。
操作步骤
-
锁定用户密码
以root权限或sudo执行以下命令,将用户username的密码字段锁定:passwd -l username
执行后,系统会修改
/etc/shadow文件中该用户密码字段的第一个字符为,
原始密码字段:$6$abc123$def456...
锁定后:!$6$abc123$def456...
此时用户无法通过密码、SSH(密码登录)、su等方式认证登录。 -
解锁用户密码
若需恢复用户密码登录权限,使用-u参数解锁:passwd -u username
解锁后,
/etc/shadow中的密码字段恢复原状,用户可使用原密码登录。
适用场景
- 临时禁止用户登录(如员工休假期间);
- 需快速锁定密码且无需修改其他登录方式时。
注意事项
- 仅锁定密码,不影响用户的其他权限(如sudo、cron任务);
- 若用户通过SSH密钥登录,此方法无效,需额外配置SSH访问控制。
通过usermod命令锁定用户账户
usermod命令是Linux用户账户管理的核心工具,支持通过-L(锁定)和-U(解锁)参数直接操作用户账户状态,本质与passwd -l/-u类似,但可与其他参数组合实现更灵活的控制。
操作步骤
-
锁定用户账户
usermod -L username
该命令会锁定用户密码(与
passwd -l效果一致),并在某些系统中可能修改/etc/shadow和/etc/passwd中的相关字段。 -
解锁用户账户
usermod -U username
解锁用户密码,恢复登录权限。
适用场景
- 需结合
usermod其他参数(如-s修改默认shell、-d修改家目录)进行账户管理时; - 与批量用户管理脚本配合使用,实现自动化锁定/解锁。
注意事项
- 不同发行版中
usermod -L的实现可能略有差异,建议结合passwd -l双重确认; - 锁定后,用户仍可能通过某些服务(如FTP、Samba)登录,需额外配置服务级访问控制。
通过chage命令设置密码过期锁定
chage命令用于修改用户密码过期策略,通过设置密码强制过期时间,可实现“临时锁定”效果——用户需在下次登录时修改密码,否则无法认证。
操作步骤
-
设置密码立即过期
chage -E 0 username
-E参数指定密码过期日期,0表示“已过期”,用户下次登录时会被要求修改密码,若不修改则无法登录。 -
设置密码过期时间(临时锁定)
设置用户密码在2024-12-31过期:
chage -E 2024-12-31 username
过期后用户需管理员手动解锁(
chage -E -1 username恢复无限制状态)或修改密码。 -
查看密码过期策略
chage -l username
输出包括密码过期日期、最小/最大使用天数等信息。
适用场景
- 临时限制用户登录(如试用期结束);
- 强制用户定期修改密码,配合密码策略增强安全性。
注意事项
- 密码过期后,用户仍可通过SSH密钥登录(若未禁用),需结合SSH访问控制;
- 解锁时需将
-E参数设置为-1(表示无过期限制)。
通过nologin文件禁止交互式登录
Linux系统允许通过创建/etc/nologin文件禁止所有非root用户进行交互式登录(包括本地登录和SSH远程登录),适用于系统维护或紧急场景。
操作步骤
-
创建nologin文件
以root权限创建文件并添加提示信息(可选):echo "System is under maintenance. Please try again later." > /etc/nologin ``` 会显示给尝试登录的用户,提升用户体验。
-
允许特定用户登录(可选)
若需允许root或特定用户登录,可在/etc/nologin文件中添加用户名(每行一个),但此方法依赖具体发行版支持,更推荐通过PAM模块实现精细控制。 -
删除nologin文件恢复登录
rm /etc/nologin
删除后所有用户可恢复正常交互式登录。
适用场景
- 系统维护期间禁止普通用户登录;
- 紧急情况下快速限制所有非特权用户访问。
注意事项
- 仅禁止交互式登录,不影响后台服务(如www-data用户运行的Web服务);
- root用户始终可绕过
/etc/nologin限制。
通过PAM模块实现基于失败次数的自动锁定
Linux可插认证模块(PAM)支持基于登录失败次数的自动锁定,可有效防止暴力破解攻击,需配置pam_tally2或pam_faillock模块(不同发行版默认模块不同)。
以CentOS(pam_tally2)为例
-
查看当前PAM配置
编辑/etc/pam.d/login文件(或对应服务的PAM配置文件,如sshd):vim /etc/pam.d/login
-
添加失败计数与锁定规则
在auth段落中添加以下两行(需放在pam_unix.so之前):auth required pam_tally2.so deny=5 unlock_time=1800 auth required pam_deny.so
参数说明:
deny=5:允许5次失败尝试,第6次触发锁定;unlock_time=1800:锁定30分钟后自动解锁(单位:秒,设置为0则需手动解锁)。
-
手动解锁用户(可选)
pam_tally2 -u username --reset
以Ubuntu(pam_faillock)为例
-
编辑PAM配置
在/etc/pam.d/common-auth中添加:
auth [success=1 default=ignore] pam_faillock.so authfail deny=5 unlock_time=1800 auth sufficient pam_unix.so nullok try_first_pass auth [default=die] pam_faillock.so authfail deny=5 unlock_time=1800
-
查看/解锁失败记录
pam_faillock --user username --reset
适用场景
- 防止暴力破解攻击;
- 对高风险用户账户实施自动安全管控。
注意事项
- 需确保PAM模块已安装(如
libpam_tally2或libpam-faillock); - 锁定后需检查
/var/log/auth.log确认失败记录,避免误锁。
通过SSH配置锁定远程登录
若仅需禁止用户通过SSH远程登录,可通过修改SSH配置或用户SSH密钥实现。
方法1:修改sshd_config配置
编辑/etc/ssh/sshd_config文件,添加以下行:
DenyUsers username
或针对特定用户组:
DenyGroup ssh-disabled
保存后重启SSH服务:
systemctl restart sshd
方法2:移除用户SSH密钥
删除用户家目录下的SSH授权密钥:
rm /home/username/.ssh/authorized_keys
若用户使用密钥认证,此操作可禁止其SSH登录。
适用场景
- 仅需禁止远程SSH访问,保留本地登录权限;
- 用户离职后清理远程访问权限。
注意事项
DenyUsers需重启SSH服务生效;- 移除密钥后,用户需重新上传密钥才能恢复SSH登录(若未禁用)。
用户锁定方法对比总结
| 方法 | 适用场景 | 核心命令 | 锁定效果 | 解锁方式 |
|---|---|---|---|---|
| passwd命令 | 快速锁定/解锁密码 | passwd -l/-u username |
禁止密码认证 | passwd -u username |
| usermod命令 | 账户状态管理(结合其他参数) | usermod -L/-U username |
锁定密码(与passwd一致) | usermod -U username |
| chage命令 | 密码过期策略控制 | chage -E 0 username |
密码过期需修改才能登录 | chage -E -1 username |
| nologin文件 | 系统维护时禁止交互登录 | echo "msg" > /etc/nologin |
禁止所有非root交互登录 | rm /etc/nologin |
| PAM模块(自动锁定) | 防暴力破解,基于失败次数锁定 | 配置pam_tally2.so/pam_faillock.so |
达到阈值自动锁定 | pam_tally2 --reset或pam_faillock --reset |
| SSH配置 | 仅禁止远程SSH登录 | DenyUsers username+重启sshd |
禁止SSH远程访问 | 修改sshd_config或恢复密钥 |
注意事项
-
验证锁定状态
锁定后需通过多种方式验证:尝试本地登录(su username)、SSH远程登录、检查/etc/shadow文件(密码字段是否为)、查看PAM模块日志(/var/log/auth.log)。 -
发行版差异
不同发行版的PAM模块默认配置可能不同(如CentOS用pam_tally2,Ubuntu用pam_faillock),需提前确认。 -
权限清理
锁定用户后,需检查其是否具有sudo权限、cron任务、服务账户权限等,必要时通过visudo修改sudoers文件或清理/etc/cron.d中的任务。 -
临时vs永久锁定
临时锁定(如chage -E 0、PAM自动解锁)适合短期场景,永久锁定(passwd -l、usermod -L)适合离职等长期场景,需根据需求选择。
相关问答FAQs
Q1:Linux用户锁定后,如何确认锁定是否成功?
A1:可通过以下方式确认:
- 检查
/etc/shadow文件:锁定后,对应用户的密码字段首字符应为(如!$6$abc123...); - 尝试登录:本地使用
su username切换用户,或通过SSH远程登录,若提示“Authentication failed”或“Permission denied”则锁定成功; - 查看PAM日志:执行
grep username /var/log/auth.log,若包含“failed password”或“account locked”等信息,则确认锁定。
Q2:锁定用户后,该用户是否还能通过SSH密钥登录?如何彻底禁止SSH登录?
A2:若仅通过passwd -l或usermod -L锁定密码,用户仍可能通过SSH密钥认证登录(若密钥已添加到~/.ssh/authorized_keys),彻底禁止SSH登录需结合以下方法:
- 方法1:修改SSH配置,在
/etc/ssh/sshd_config中添加DenyUsers username,保存后重启sshd服务; - 方法2:删除用户家目录下的SSH授权密钥:
rm /home/username/.ssh/authorized_keys; - 方法3:若用户使用密钥认证,可将其密钥从服务器端彻底移除,或通过
AuthorizedKeysCommand动态控制密钥列表。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/30902.html