麒麟v10中需用getent和passwd筛选uid≥1000且shell非/usr/sbin/nologin或/bin/false的可登录用户;再用chage检查密码过期与锁定状态;faillog识别pam自动锁定账户;loginctl查看当前活跃会话。

您需要在麒麟V10系统中确认哪些用户账户当前处于启用状态、是否被锁定、密码是否过期或已禁用,避免因账户异常导致登录失败或权限失控。
用 getent 和 passwd 检查账户基础状态
先获取系统中所有本地用户记录,过滤掉系统账户(UID
执行命令:getent passwd | awk -F: '$3 >= 1000 && $7 != "/usr/sbin/nologin" && $7 != "/bin/false" {print $1}'
该命令输出的是具备交互式登录能力的普通用户列表。若某用户shell为/usr/sbin/nologin或/bin/false,表示该账户被显式禁止登录,即使密码正确也无法通过SSH或图形界面登录。
注意:此方法不反映账户是否被PAM策略临时锁定,仅说明账户在/etc/passwd层面是否允许登录。
用 chage 查看各账户密码有效期与锁定状态
chage命令能直接读取shadow数据库中的密码策略字段,是判断账户是否“活动”的关键依据:
① 列出所有本地用户的密码状态摘要:sudo chage -l $(cut -d: -f1 /etc/passwd | grep -E '^[a-z]' | head -20 | xargs | tr ' ' '\n' | grep -v '^root$' | xargs -I{} sh -c 'echo "=== {} ==="; chage -l {} 2>/dev/null')
② 单独检查某个用户(如kylin)是否被锁定:sudo chage -l kylin | grep "Password locked",若返回Password locked: yes,说明该账户已被passwd -l锁定,无法登录。
③ 查看密码最近修改时间与到期日:sudo chage -l kylin | grep -E "(Last password change|Password expires)"。若“Password expires”显示为never且“Last password change”日期早于2026年,需警惕该账户是否长期未维护。
用 faillog 快速识别被PAM自动锁定的账户
当用户连续输错密码达到/etc/pam.d/common-auth中设定的deny=3阈值后,PAM会通过faillog机制冻结账户,此时账户仍存在于passwd中,但无法认证通过:
一款AI工具,主要用于使用 OpenAI Codex CLI 处理编码任务。触发词:codex、code review、fix CI、refactor code、implement feature、coding agent、gpt-5-codex。Clawdbot 可将编码工作委托给 Codex CLI 作为子代理或直接工具,适合需要提升相关任务效率的用户。
运行:sudo faillog -a
输出中Failures列大于0且Last时间非空的账户,说明该账户近期存在失败登录尝试;若Failures值达到锁定阈值(通常是3或5),且Lock Time字段有时间戳,则该账户已被PAM自动锁定,必须用sudo faillog -r -u 用户名手动重置计数器才能恢复。
【重要前提】该功能依赖pam_faildelay.so和pam_tally2.so模块启用,若sudo faillog -a报错“no such file or directory”,请先确认/var/log/faillog是否存在且非空。
用 loginctl 列出当前活跃的用户会话
loginctl是systemd-logind提供的会话管理工具,可实时反映哪些账户正在以何种方式保持登录状态:
执行:loginctl list-users
该命令只显示当前有活跃会话(包括图形界面、SSH、TTY)的用户,不显示纯系统账户或已登出用户。输出中每行第一个字段为UID,第二个为用户名,第三个为状态(online/idle/lingering)。
若某用户出现在getent passwd结果中,但未出现在loginctl list-users输出里,说明该账户目前无任何活跃会话,但仍可能随时登录——这属于“待激活”而非“非活动”状态。
进一步查看某用户所有会话详情:loginctl list-sessions | grep 用户名,可确认其登录终端类型(如session-1、tty1、seat0)及启动时间。










