最近在工作闲暇之余,重新回顾了《鸟哥的私房菜》,看到 Linux 登录文件这方面,还是忍不住自己总结的想法(毕竟摸鱼的时间有点多)。相信每一位接触Linux的同学,无论是刚学会敲第一个ls命令的萌新,还是每天要管理成百上千台服务器的后端开发与SRE,都绕不开一个最基础的动作——登录。
“‘登录’有啥好讲的?不就是输个账号密码、SSH一怼就进去了吗?” 很多新人是这么想的。可一旦你深入下去就会发现,一个看似简单的登录,背后牵扯着一整套极其精密、环环相扣的配置文件体系。用户为什么能登录?密码是怎么校验的?密码策略是谁规定的?登录日志记到了哪里?被暴力破解时我们应该看哪些文件锁IP?
这些问题都藏在/etc/passwd、/etc/shadow、/etc/group、/etc/login.defs、/etc/pam.d/*、/var/log/wtmp…… 这些核心文件之中。
毫不夸张地说,吃透 Linux 登录核心文件,是你从“命令行使用者”迈向“系统管理者”最重要的一步。 否则,当有一天用户突然无法登录,或者你察觉到服务器被陌生人半夜摸进来“逛了一圈”,你却连从哪排查都不知道——这绝对不是一名合格工程师该有的样子。
今天这篇超长干货,我希望能帮你彻底打通 Linux 登录的任督二脉。我会用”原理先行→文件逐字段拆解→实操命令→生产禁忌→排错案例”的思路,把每一个文件掰开揉碎讲清楚。适配 CentOS 7/8/9 及 Ubuntu 18.04/20.04/22.04 主流环境,所有差异点都会标注。文末还为你准备了可以直接打印贴在工位上的运维速查清单,让你在日常工作中遇到登录问题时,30秒内快速定位并执行正确命令。那我们,开始吧。
在学习配置文件之前,我们必须先弄懂 Linux 登录的完整流程。否则你就相当于拿着一堆零件,却不知道图纸长啥样。Linux 所有登录行为,绝非简单的“输入密码校验”,而是一套配置文件定义规则 + PAM模块认证校验 + 日志全程记录的闭环体系。
无论是站在物理机前用键盘登录(本地终端 tty),还是通过 SSH 从别处远程连入,Linux 的登录验证最终校验的核心文件一致,但调用流程略有区别:
/etc/pam.d/login 认证规则,读取 passwd / shadow / login.defs 全局规则,完成本地账号校验。/etc/pam.d/sshd 认证规则,优先复用系统登录核心配置,同时叠加SSH服务专属拦截规则。任何用户登录Linux系统,都会严格遵循以下8步流程,所有登录报错、权限异常、登录失败都能在这个流程中精准定位根源:
/etc/passwd,校验账号是否存在、是否为可登录用户;/etc/shadow,校验密码密文、账号有效期、锁定状态;/etc/login.defs,匹配全局登录规则、密码策略、UID/GID权限规范;/etc/group、/etc/gshadow,加载用户所属用户组权限;wtmp / btmp / lastlog 日志,记录登录成功/失败行为,用于后续审计排错。关键词:不管是本地还是远程,核心的用户属性、密码、组信息、登录日志几乎来自同一套文件,只是调用的 PAM 服务名称不同(login vs sshd)。这意味着你在
/etc/pam.d/里的策略会直接影响两种登录方式。
基于这套完整流程,本文将四大类登录核心文件逐一对标拆解:账号文件、组文件、权限规则文件、日志记录文件,做到知原理、懂字段、会实操、避风险。
/etc/passwd 是 Linux 系统里最基础的用户信息库,它记录了系统中所有用户(包括系统用户和普通用户)的账号基本信息。它的可读性很高,理论上你可以直接用 cat 看个通透。
文件基础属性速览:
/etc/passwd但请注意:它虽然名字里带 “passwd”,但其实早已不存放真正的密码了,密码早已被挪到了 /etc/shadow 里,这里用一个占位符代替。
: 分隔)我们随便挑一行看看:
展开代码root:x:0:0:root:/root:/bin/bash
把它切成七段:
| 字段序号 | 字段值示例 | 含义 | 详解 |
|---|---|---|---|
| 1 | root | 用户名 | 用户登录时输入的字符串,唯一标识,不允许重复。 |
| 2 | x | 密码占位符 | 历史上的密码散列存放于此,现在统一用 x 代替,真实密码在 /etc/shadow。如果你看到 ! 或 *,说明该账号密码已被禁用。绝对不要把普通系统用户的 x 直接删掉留空,否则可能导致免密登录! |
| 3 | 0 | UID | User ID,系统内核只认数字。0 是 root 专属,权限最大。CentOS 一般普通用户从 1000 开始,Ubuntu 也是 1000。1-999 为系统内置用户,自定义服务账户通常分配 500-999 的系统 UID。 |
| 4 | 0 | GID | 用户的主组 ID,必须对应 /etc/group 中一个组的 GID。用户创建文件时,默认归属组就是这个主组。 |
| 5 | root | 用户描述信息 | GECOS 字段,可以随意填写,一般用来记录全名、办公室电话等。用 usermod -c "张三" zhangsan 修改的就是这个字段。 |
| 6 | /root | 家目录 | 用户登录后的默认工作目录。普通用户一般在 /home/用户名,root 为 /root。若是 /sbin/nologin 这类用户,家目录仍会存在但可能用不上。 |
| 7 | /bin/bash | 登录 Shell | 用户登录后启动的程序。这是控制用户能否登录的关键! 如果设为 /sbin/nologin 或 /bin/false,则即使密码正确也无法获得终端 Shell,常用于服务账户。 |
日常不建议直接 vim 去浏览,而是用这些安全命令:
展开代码# 查看所有系统用户 cat /etc/passwd # 查看某一个用户的信息 getent passwd root # 或者 grep ^root /etc/passwd # 筛选所有可登录用户(shell为/bin/bash) grep "/bin/bash" /etc/passwd # 筛选所有禁止登录的系统用户 grep "/sbin/nologin" /etc/passwd # 仅查看有哪些系统 UID 小于 1000 的“早期用户” awk -F: '$3 < 1000 {print $1, $3}' /etc/passwd
你会发现 /etc/passwd 里不仅有你创建的 zhangsan,还有一大堆诸如 bin、daemon、nobody 的用户,它们的 Shell 基本都是 /sbin/nologin。
这些系统用户是为了“进程所有权分离”。比如 nginx 用户跑 Nginx 进程,一旦进程被攻破,黑客拿到的只是一个没有 Shell 的受限账户,无法直接登陆系统,极大降低了风险。禁止随意删除系统内置用户,会导致系统服务启动失败。
生产禁忌一:严禁直接 vi /etc/passwd 随意增删改!
原因:
su、sudo、登录)都可能直接挂掉。正确修改方式:
修改用户信息:使用 usermod。例如改注释:usermod -c "zhang san" zhangsan
如果实在需要手动编辑(批量替换),必须使用系统提供的 vipw 命令,它会锁定文件、编辑结束后校验格式。
展开代码vipw # 编辑 /etc/passwd vipw -s # 编辑 /etc/shadow(直接进入带锁的安全编辑)
早年间,加密后的密码直接塞在 passwd 第二位,但 passwd 文件对所有用户可读(需要有读权限才能让 ls -l 正确显示属主名),这就给了恶意者暴力破解的机会。后来大家才想出把密码挪到只有 root 才能读的 shadow 文件中。passwd 的 x 其实就是在对你说:密码在我兄弟那,我没密码,别找我。
文件基础属性速览:
/etc/shadowshadow 文件固定9个字段,管控密码所有安全规则,登录密码错误、账号过期、锁定无法登录,全部由该文件控制。
我们看一行 shadow 记录:
展开代码root:$6$xyz...hashtext:19000:0:99999:7:14::
| 字段序号 | 字段值示例 | 含义 | 生产关注点 |
|---|---|---|---|
| 1 | root | 用户名 | 必须和 passwd 里一致,一一对应,唯一匹配。 |
| 2 | $6$... | 加密后的密码 | 核心字段:$6$代表 SHA-512 加密。如果为空,表示没有密码,登录时直接回车即可(极其危险)。如果值为 ! 或 !!,表示密码被锁定,用户无法用密码登录,但可用 SSH key。* 代表账号被禁用。各种状态区别后面细讲。 |
| 3 | 19000 | 上次改密码的日期 | 从 1970年1月1日到修改日期的天数。chage -l user 可直观查看。设为 0 会强制用户下次登录必须修改密码。 |
| 4 | 0 | 密码最小使用天数 | 两次改密码之间至少间隔几天。0 表示随时可改。如果设为 7,用户今天改了密码明天又想改,系统会拒绝。可防用户频繁修改再改回老密码。 |
| 5 | 99999 | 密码最大使用天数 | 超过这个天数密码就过期,登录后会强制修改。安全策略一般设为 90 天,默认 99999 表示永久有效。 |
| 6 | 7 | 密码过期前警告天数 | 密码快过期了,提前几天每天给用户弹提醒,默认 7 天。 |
| 7 | 14 | 密码过期后宽限天数 | 密码过期后,用户还能登录的“死缓”天数,但必须立即修改密码。如果这个天数也过了,账户被彻底锁定,需管理员解锁。 |
| 8 | (空) | 账户过期日期 | 从 1970 年 1 月 1 日起的天数。超过这个日期,账户直接失效,无论密码是否过期。常用于临时工/合作方账户管控。 |
| 9 | (空) | 保留字段 | 系统预留,暂无实际作用。 |
第二字段如果是一串 $id$salt$hash 的形式,$id$ 标识了算法:
$1$ 表示 MD5 (不安全,不推荐)$5$ 表示 SHA-256$6$ 表示 SHA-512 (CentOS 7~9 默认,Ubuntu 18.04 默认)$y$ 表示 yescrypt (Ubuntu 20.04 之后的新默认算法,比 SHA-512 更抗破解)你可以通过 /etc/login.defs 中的 ENCRYPT_METHOD 控制新密码的加密算法。
防破解机制:Linux 默认采用 SHA-512 加盐加密,每个用户密码随机加盐,即使两个用户密码相同,密文也完全不同。密文不可逆解密,只能暴力碰撞。生产环境搭配密码复杂度、登录次数限制,可杜绝绝大多数破解行为。
展开代码chage -d 0 zhangsan # 直接将最后修改日置为 0 # 或者 passwd -e zhangsan # 同样效果,过期密码
展开代码chage -l zhangsan
展开代码chage -M 90 -W 7 -I 14 zhangsan
锁定:在 shadow 密码字段前加 !! 或 !,用户无法用密码登录,但 SSH 密钥不受影响。
展开代码passwd -l zhangsan # 锁定 passwd -u zhangsan # 解锁
等价于 usermod -L 和 usermod -U。
完全禁止用户登录(包含密钥等方式):可以改 shell 为 /sbin/nologin,或将账户过期日期设为 1。
展开代码usermod -s /sbin/nologin zhangsan # 或 chage -E 1970-01-01 zhangsan
绝对禁止手动 vi 编辑 shadow 文件,一旦密文格式错乱,用户直接永久无法登录,且无法修复。统一使用 usermod、passwd、chage 等系统命令自动写入。
用户组用于批量管控用户权限,决定用户对系统文件、命令、服务的访问权限。
文件作用:记录系统所有用户组名称、GID、组内成员,区分主组和附属组,是权限批量管控的核心。
字段格式:组名:密码占位符:GID:成员列表
展开代码develop:x:1001:zhangsan,lisi,wangwu
四字段解析:
x,真密码在 /etc/gshadow 里,但组密码几乎无人使用。主组与附属组的区别:
用户在 /etc/passwd 第4字段的 GID 对应的组就是他的主组,用 id 命令可以看到 gid=... 后面那个。而 /etc/group 里成员列表里的则是附属组。用户创建的文件默认属组就是主组;如果他需要同时属于多个组拥有交叉权限,那就靠附属组。
展开代码id zhangsan # uid=1000(zhangsan) gid=1001(develop) groups=1001(develop),27(sudo)
这里主组就是 develop,同时还属于 sudo 附属组。
修改命令:
展开代码# 改变用户主组 usermod -g ops zhangsan # 添加附属组 usermod -aG docker zhangsan # 编辑组文件推荐 vigr # 带锁编辑 /etc/group vigr -s # 编辑 /etc/gshadow
文件作用:存储用户组密码、组管理员信息,权限极高,默认 600 权限。
格式:组名:加密密码:组管理员:成员名单
绝大多数情况下,组密码是 ! 或 *,即禁用。它的作用在于:当一个非组成员临时想切换到该组访问文件时,他可以使用 newgrp 组名 命令,然后输入组密码来临时获取该组权限。不过在生产环境,我们更倾向于通过 sudo 或直接将用户加入附属组来实现,很少启用组密码。
企业运维使用规范:
!、!! 均代表无组密码,禁止随意配置组密码,避免权限泄露。/etc/login.defs 这个文件非常有意思,它就像是系统的**“用户创建与密码策略的默认模具”**。它是 Linux 系统登录、密码策略、用户创建规则的全局总开关,所有新建用户、登录校验全部遵循该文件规则。
重点:它对已有用户完全没影响,只控制 useradd、groupadd 等命令创建新用户/组时的默认值,同时定义了一系列全局的安全限制。
我们截取几个核心配置项:
展开代码# 用户的邮件目录 MAIL_DIR /var/spool/mail # 密码最大天数(新用户) PASS_MAX_DAYS 99999 # 密码最小天数 PASS_MIN_DAYS 0 # 密码最小长度 PASS_MIN_LEN 5 # 注意:PAM 模块可能会覆盖这个限制 # 密码过期前警告天数 PASS_WARN_AGE 7 # 普通用户 UID 起止范围 UID_MIN 1000 UID_MAX 60000 # 系统用户 UID 起止范围 SYS_UID_MIN 201 SYS_UID_MAX 999 # 普通用户 GID 范围 GID_MIN 1000 GID_MAX 60000 # 创建用户时是否自动创建家目录 CREATE_HOME yes # 用户家目录默认 umask (022 对应 755 目录权限) UMASK 077 # Ubuntu 默认可能是 022,CentOS 默认 077 更多?CentOS 7 默认为 077 # 是否删除用户时一并删除其主组(如果组内无其他人) USERGROUPS_ENAB yes # 新密码加密算法 ENCRYPT_METHOD SHA512 # CentOS 7/8/9默认;Ubuntu 20.04后为 YESCRYPT
生产修改规范:
LOGIN_MAX 限制最大登录数,防止恶意批量登录占用资源。展开代码# 强制新用户密码最长90天必须更换 PASS_MAX_DAYS 90 PASS_MIN_DAYS 1 PASS_WARN_AGE 10
修改后重启生效,这些修改仅对之后创建的用户生效,不影响已存在的用户。要批量修改已存在用户的密码策略,需要结合 chage 命令。
PAM(Pluggable Authentication Modules) 是一套可插拔认证模块,是 Linux 登录的动态校验网关。它把登录认证的逻辑从应用程序中抽离出来。不论是 login、sshd、sudo、passwd,它们要做身份检查时,都会调用自己对应的 PAM 配置文件(通常在 /etc/pam.d/ 下),再由这些配置文件依次调用 pam_unix.so、pam_faillock.so 等模块完成校验。
这就意味着:我们只要修改 /etc/pam.d/sshd,就能改变所有 SSH 登录的认证行为,而无需改动 sshd 源码。
核心认证文件:
/etc/pam.d/login:管控本地终端登录认证规则/etc/pam.d/sshd:管控远程 SSH 登录认证规则以一行 pam_unix.so 为例:
展开代码auth required pam_unix.so nullok try_first_pass
第一列
:功能类型。四种:
auth : 用户认证(验证你是谁)account: 账户状态检查(过期没?允许登录吗?)password: 修改密码相关session: 登录前后要做的事(挂载家目录、打印提示信息、记录日志)第二列
:控制标记。决定该模块验证成功/失败后如何继续:
required: 失败则整个认证最终失败,但继续运行下一模块,不立刻告诉用户(防信息泄露)。requisite: 失败立刻返回,直接断掉。sufficient: 如果成功,且之前没有失败,则直接通过;失败则忽略继续。optional: 成败不影响全局。第三列:模块路径,通常写库名。
第四列:模块参数。
CentOS 8 / 9 使用 pam_faillock.so
编辑 /etc/pam.d/system-auth 和 /etc/pam.d/password-auth,在 auth 段中加入:
展开代码auth required pam_faillock.so preauth silent audit deny=5 unlock_time=1800
并在 auth 段尾部加入:
展开代码auth [default=die] pam_faillock.so authfail audit deny=5 unlock_time=1800 auth sufficient pam_faillock.so authsucc audit deny=5 unlock_time=1800
解释:连续 5 次密码错误锁定 1800 秒(30分钟)。deny=5 失败次数,unlock_time 解锁时间秒数。
CentOS 7 使用 pam_tally2
展开代码auth required pam_tally2.so deny=5 unlock_time=1800 even_deny_root root_unlock_time=600
even_deny_root 表示连 root 也锁,省得被人无限撞库。
Ubuntu 20.04 / 22.04
Ubuntu 同样使用 pam_faillock,但配置在 /etc/pam.d/common-auth 中。编辑:
展开代码auth required pam_faillock.so preauth silent audit deny=5 unlock_time=1800 auth [default=die] pam_faillock.so authfail audit deny=5 unlock_time=1800 auth sufficient pam_faillock.so authsucc audit deny=5 unlock_time=1800
配置完后,可以通过 faillock --user zhangsan --reset 手动解锁用户。
⚠️ 禁忌:编辑 PAM 文件前,务必另开一个 root 终端作为备份会话,避免配置错误自己把自己锁在外面!重启 sshd 服务后生效,但不要断开当前连接,先测试新建连接。
任何一次登录,无论成功还是失败,Linux 都会留下痕迹。三条核心日志文件构成了我们排查入侵、故障回溯的基础,也是排查异常登录、暴力破解的唯一依据。
展开代码# 查看所有用户最后一次登录时间和来源 lastlog # 查看特定用户 lastlog -u zhangsan # 只显示最近一周内登录过的用户 lastlog -t 7
输出示例:
展开代码Username Port From Latest root pts/0 192.168.1.100 Mon Jan 15 09:15:32 +0800 2024 zhangsan pts/1 10.0.0.5 Fri Jan 12 18:23:45 +0800 2024
如果某个账户突然出现来自陌生 IP 的最后登录,就需要高度警惕了。
last 命令数据全部来源于该文件展开代码# 查看最近的所有登录记录 last # 查看某个用户的登录记录 last zhangsan # 根据终端 pts/0 筛选 last pts/0 # 如果不指定文件,默认读取 /var/log/wtmp;也可以指定之前轮转过的日志 last -f /var/log/wtmp.1
输出会显示用户、终端、来源 IP、登录时间、退出时间、持续时间等。
排障用法:
last | grep -v 'reboot' | head 一看便知。lastb展开代码# 查看所有失败记录 lastb # 查看最近 20 条 lastb -n 20 # 实时查看看失败记录中的 IP 分布,找出可疑 IP lastb | awk '{print $3}' | sort | uniq -c | sort -nr | head
你可能会看到大量来自某个 IP 的 root 登录失败记录,大概率是被人扫了。
结合 /var/log/auth.log(Ubuntu)或 /var/log/secure(CentOS)
这些明文日志记录了更详细的 PAM 认证过程,比如“pam_unix(sshd: auth): authentication failure”,我们可以精确定位时间、用户、来源 IP、端口等。
展开代码grep "Failed password" /var/log/secure | grep -oP 'from \K\S+' | sort | uniq -c | sort -nr
如果你不小心把 /var/log/btmp 删了,lastb 会报错无文件。可以这样恢复:
展开代码touch /var/log/btmp chmod 600 /var/log/btmp chown root:utmp /var/log/btmp # 注意属组可能是utmp或root,视系统而定
同样适用于 wtmp 和 lastlog:
展开代码touch /var/log/wtmp /var/log/lastlog chmod 664 /var/log/wtmp /var/log/lastlog chown root:utmp /var/log/wtmp /var/log/lastlog
last 和 lastlog 就会恢复正常,只是历史数据没了而已。
生产注意事项:
/etc/logrotate.conf 和相关配置是否包含了 wtmp 和 btmp 的轮转规则。展开代码# 方式1:锁定密码(shadow密码字段加!!,禁止密码登录,但SSH key仍可登录) passwd -l xiaozhang # 方式2:修改shell为nologin,完全禁止登录(含SSH key) usermod -s /sbin/nologin xiaozhang # 方式3:设置账户过期日期,彻底禁用 chage -E 1970-01-01 xiaozhang # 解锁恢复登录 passwd -u xiaozhang usermod -s /bin/bash xiaozhang
展开代码# 修改 login.defs 设置新用户默认 90 天过期 vim /etc/login.defs # 对已有用户 zhangsan 应用 90 天策略 chage -M 90 -m 1 -W 7 -I 14 zhangsan # 批量:例如所有 UID>=1000 的用户 for u in $(awk -F: '($3>=1000 && $1!="nobody"){print $1}' /etc/passwd); do chage -M 90 -W 7 -I 14 "$u" done
展开代码# 查看所有登录失败记录 lastb # 统计爆破IP排行(高频排查命令) lastb | awk '{print $3}' | sort | uniq -c | sort -nr | head -10 # 从安全日志中提取失败密码的IP grep "Failed password" /var/log/secure | grep -oP 'from \K\S+' | sort | uniq -c | sort -nr
假设发现 112.xxx.xxx.xxx 有过百次失败尝试,立刻拉黑:
展开代码# 临时使用 iptables iptables -A INPUT -s 112.xxx.xxx.xxx -j DROP # 或使用 fail2ban 自动封禁
账号无法登录时,遵循以下排查链路:
grep 用户名 /etc/passwdpasswd -S 用户名 或 chage -l 用户名/var/log/secure 是否有 PAM 拒绝记录lastb 查看失败记录中的具体原因展开代码# 查看失败记录 faillock --user zhangsan # 重置 faillock --user zhangsan --reset
如果用的还是 pam_tally2:
展开代码pam_tally2 --user zhangsan --reset
前面已经强调,风险点在于:
唯一正确的文本编辑方式:
vipw —— 编辑 passwd,保存时自动检查并同步 shadowvigr —— 编辑 group,同时可能带 -s 编辑 gshadowuseradd、usermod、chage、passwd 等系统命令自动写入。| 字段样子 | 含义 | 能直接用密码登录吗? | 能通过 SSH key 登录吗? |
|---|---|---|---|
:: 或 : :(空) | 没有密码。本地登录直接给 Shell,生产高危漏洞 | 是(无密码) | 是 |
:! | 密码被锁定(如 passwd -l) | 否 | 是(如果密钥允许) |
:!! | 同上,不同发行版标记 | 否 | 是 |
:* | 账户被认为“禁用”,常见于系统账户 | 否 | 一般否(视 PAM 配置,常拒绝) |
正常密码哈希 $6$... | 有密码 | 是 | 是 |
重要结论: 要想完全禁止某个用户的所有登录方式(包括密钥),最稳妥的方法是直接把 Shell 改成 /sbin/nologin 或设置账户过期日期。很多新手把锁定当成“删号”,结果用户用 SSH key 照样溜达进来,务必注意。
chage -M 控制的期限。用户登录时会被强制要求换密码,还能进系统。chage -E 设置固定日期,过了这天无论密码多正确都不能登录。passwd -l,只是密码不能用,其他方式仍可能登入。Linux 登录体系是一套 规则定义 → 权限匹配 → 认证校验 → 日志审计 的闭环体系。所有登录故障、安全漏洞、权限异常,都可以通过上述四大类文件精准定位。掌握底层文件原理,才能摆脱“只会敲命令不懂原理”的新手阶段,具备生产环境故障排错、安全加固的核心能力。
| 分类 | 文件 | 核心作用 |
|---|---|---|
| 账号类文件 | /etc/passwd | 用户基础信息(UID/GID/Shell/家目录) |
/etc/shadow | 密码安全规则(密文/有效期/锁定状态) | |
| 组权限文件 | /etc/group | 组信息、主组/附属组成员 |
/etc/gshadow | 组安全配置(极少使用) | |
| 全局规则文件 | /etc/login.defs | 全局登录策略、新用户默认参数 |
/etc/pam.d/* | 登录认证拦截、密码复杂度、失败锁定 | |
| 日志审计文件 | /var/log/lastlog | 每个用户最后一次登录 |
/var/log/wtmp | 全部成功登录/注销记录 | |
/var/log/btmp | 全部失败登录/暴力破解记录 |
| 任务 | 命令 / 文件 |
|---|---|
| 查看用户信息 | getent passwd 用户名 或 grep ^用户名 /etc/passwd |
| 查看所有可登录用户 | grep "/bin/bash" /etc/passwd |
| 查看禁止登录用户 | grep "/sbin/nologin" /etc/passwd |
| 安全编辑 passwd | vipw |
| 查看密码安全配置 | cat /etc/shadow |
| 查看密码策略 | chage -l 用户名 |
| 强制用户下次登录改密码 | chage -d 0 用户名 或 passwd -e 用户名 |
| 锁定用户密码 | passwd -l 用户名 或 usermod -L 用户名 |
| 解锁用户密码 | passwd -u 用户名 或 usermod -U 用户名 |
| 修改 Shell 禁止登录 | usermod -s /sbin/nologin 用户名 |
| 设定账户失效日期 | chage -E "2025-12-31" 用户名 |
| 查看全局登录策略 | cat /etc/login.defs |
| 查看所有成功登录 | last |
| 查看某用户成功登录 | last 用户名 |
| 查看失败登录记录 | lastb |
| 实时分析暴力破解 IP | `lastb |
| 查看用户最后登录 | lastlog -u 用户名 |
| 检查并修改全局密码默认 | vim /etc/login.defs |
| 重置用户失败计数(faillock) | faillock --user 用户名 --reset(CentOS 8+ / Ubuntu) |
| 修改用户密码 | passwd 用户名 |
| PAM 防爆破配置 | 在 system-auth 或 common-auth 中加入 pam_faillock.so deny=5 unlock_time=1800 |
本文作者:zzz
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!