首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
Linux密码破解与恢复:从shadow文件到弱口令防御
📅 2026/10/8 20:09:31
✍️ 爱科研究院
👁 阅读 3,247
前阵子给一台老服务器做安全巡检发现运维同事把 root 密码设成了Admin123这种一眼就能猜出来的组合。检查/etc/shadow的时候我顺手用 John the Ripper 跑了一下不到两分钟就解开了。这事其实挺常见——很多人以为 Linux 密码很安全但实际上如果 shadow 文件泄露给了攻击者弱口令就是一层窗户纸。今天这篇就围绕 Linux 密码破解与恢复这件事把原理、工具选型、实操流程和防御策略完整梳理一遍希望对做运维、搞安全审计、或者纯粹忘了自己 root 密码的同学都有帮助。文章会分成五块先讲清楚 Linux 密码体系是怎么回事再介绍常用工具和字典准备接着给出三类核心实操流程离线破解、在线测试、系统密码重置然后整理我踩过的坑和排查经验最后从防御视角聊聊怎么让密码更难被破解。整篇偏向实战命令都给全你可以直接照着在自己的测试环境里操作但务必记住所有破解操作必须针对自己拥有权限的系统或在获得书面授权的渗透测试中进行别拿这些手段去碰别人的机器。1. 先搞清楚目标Linux 密码体系与常见破解场景1.1 密码到底存在哪里很多人以为 Linux 密码存在/etc/passwd里这是十几年前的老黄历了。现在的 Linux 系统密码相关数据分两个文件存/etc/passwd存用户基本信息/etc/shadow存加密后的密码哈希后者只有 root 和 shadow 组才能读取。这就是为什么你拿到一个普通用户的 shell 后看不到别人的密码哈希——系统在设计上就把这部分数据保护起来了。/etc/shadow里每一行对应一个用户冒号分隔的字段很多最关键的是前几个。举个例子root:$6$samplesalt$9F5yK3Vb...:19000:0:99999:7:::从左到右分别是用户名、加密密码、最近修改时间、最小修改间隔、密码有效期、过期前警告天数等。第二段密码哈希里$6$表示使用 SHA-512 算法$samplesalt$是盐值后面的长串是哈希结果。$1$是 MD5$2a$或$2y$是 bcrypt$5$是 SHA-256还有$y$是 yescrypt新版 Debian、Ubuntu 已经默认用它了。盐值的作用是防止相同的密码产生相同的哈希。如果没有盐攻击者可以预先算好常见密码的哈希表就是彩虹表拿到哈希一对比就出来了。加了盐之后每一个用户的哈希都不同预计算表基本失效攻击者只能老老实实逐个跑。理解这一点对做破解非常关键破解工具的核心思路就是把字典里的每个候选词用同样的算法、同样的盐值算一遍哈希再和目标哈希比对。算法越慢破解时间越长。MD5 在 GPU 上每秒能跑几十亿次SHA-512 慢一些bcrypt 刻意设计得很慢所以用 bcrypt 加密的密码即使用弱口令破解成本也会高很多。1.2 哪些场景会用到密码破解我总结下来正经用途主要是三类。第一类是系统密码找回。服务器装完系统设了复杂密码结果几个月没用忘了或者员工离职没交接 root 密码这时候你不能重装系统只能通过单用户模式或者 live CD 重置密码。这类操作严格说不是“破解”而是“重置”但很多人搜“Linux 密码破解”其实要找的就是这个。第二类是安全审计和渗透测试。企业内部做等保、红蓝对抗安全团队会拿一份 hash 字典去测员工的密码强度。如果五分钟内就被跑出来的弱口令说明该用户需要强制改密码。这种场景必须走正式授权流程测试范围、时间、方式都要白纸黑字写清楚否则就是违法。第三类是取证分析。拿到一台被入侵的服务器攻击者可能创建了后门账号你需要尝试破解这些账号的密码来判断攻击路径和数据泄露范围。这种同样要确保自己有合法处置权。1.3 攻击面大致分三条路离线破解已经拿到了/etc/shadow内容比如通过漏洞拿到了 root 权限、或者备份文件泄露在本地用 John、hashcat 慢慢跑。优点是速度快、不产生网络流量缺点是前提是“你已经拿到 hash”。在线测试知道目标 IP有 SSH、RDP、Web 登录接口用 Hydra、Medusa 这类工具去试密码。优点是不需要提前拿 hash缺点是慢、容易被日志记录、可能触发 lockout 策略。物理重置有服务器或虚拟机的控制台权限直接进单用户模式改密码。这是运维救命的操作不需要猜密码只需要能重启机器。很多人把“破解”理解成“黑别人”其实在运维日常里前两类出现频率最高的反而是客户忘了密码、员工离职交接、以及内部弱口令检查。理清楚场景你才能选对方法。2. 工具选型与字典准备2.1 三款主力工具怎么选John the Ripper圈里叫 john老牌神器开源免费。它支持 CPU 多核能自动识别大部分 hash 类型用法简单。缺点是纯 CPU 跑效率不如 GPU 工具。我在排查问题、快速验证时用 john 最多因为它不需要额外配置装上就能跑而且自带小字典。hashcat号称世界上最快的密码恢复工具。它利用 GPUNVIDIA、AMD并行计算跑 MD5、NTLM 这类算法时速度能到每秒几百亿次。缺点是配置门槛高一点需要装显卡驱动和 OpenCL 运行时而且对 hash 格式要求比较严格需要知道具体算法类型。适合批量跑大字典、跑掩码、跑规则的高级玩法。Hydra在线密码测试工具支持 SSH、RDP、FTP、HTTP 表单、MySQL、PostgreSQL 等几十种协议。它的逻辑是对一个用户名反复尝试不同的密码去登录直到成功。速度受网络延迟限制但胜在覆盖面广。注意用 Hydra 测在线服务非常容易被目标系统记录失败次数多了还可能被封锁 IP所以一定要控制速度并且确认自己有权这么干。这三者的关系可以简单理解成john 是瑞士军刀什么都能干适合在地铁上用笔记本排查hashcat 是挖掘机功率大适合架好机器跑大规模任务Hydra 是钓鱼竿针对具体在线目标一根根试。2.2 字典破解的灵魂工具再强没有好字典等于白跑。密码破解的本质是“猜测”字典质量直接决定成功率。常见字典来源有这几种系统自带/usr/share/wordlists/Kali 里通常有 rockyou.txt 的压缩包解压后有 1400 万条真实泄露的密码命中率相当高。SecListsGitHub 上的安全测试字典集合包含用户名、密码、Web 路径各种分类是渗透测试必备。crunch可以按照你定义的规则生成字典比如指定 8 位纯数字、指定前缀加生日组合生成出来就是一个大文件。规则变形在字典基础上做替换、追加、首字母大写等变换。比如字典里有 password规则可以生成 Password、password1、Password1、password! 等。John 和 hashcat 都支持规则效果比单纯堆字典高一个量级。选字典有个窍门先跑一个小字典试水比如 Top10w如果命中了就皆大欢喜如果没有再上大字典加规则。一上来就跑 1400 万条的 rockyou 也不是不行但耗时可能翻好几倍。我自己的习惯是准备三层字典第一层是 Top10000 常见弱口令第二层是 rockyou 基础版第三层是根据目标定制的字典比如公司名、品牌名、域名、年份组合。最多的一次我在一次授权测试里用定制字典五分钟内解出了四个人的密码而标准大字典跑了半小时才中一个。2.3 Kali 环境准备做密码破解不一定要用 Kali任何发行版装 john 和 hashcat 都行但 Kali 的优势是预装了大量安全工具省去配置环境的时间。如果你没有合适的测试机器装个虚拟机是成本最低的方案。# 以 Ubuntu/Debian 为例安装 john sudo apt update sudo apt install john -y # hashcat 需要额外配置 GPU先用 CPU 模式测试 sudo apt install hashcat -y # Kali 里这些工具默认就有不用装记得给虚拟机至少两个 CPU 核心和 2G 以上内存破解是纯粹的计算密集型任务配置太低跑起来很煎熬。如果你用 hashcat 配合独显NVIDIA 需要装nvidia-driver和nvidia-cuda-toolkitAMD 需要rocm这一步最容易出错后面会讲排查方法。3. 核心实操三类破解/恢复流程3.1 离线破解 shadow 文件拿到/etc/shadow后第一步是把用户和哈希提取成 john 认识的格式。其实 john 自带脚本可以直接读 shadow 文件# 先看 hash 类型 sudo head -n 3 /etc/shadow # 直接用 john 读 shadow 文件 john --formatsha512crypt /etc/shadow # 也可以只破解指定用户 john --formatsha512crypt --userroot /etc/shadowjohn 默认使用/etc/john/john.conf里的规则和字典跑起来后会显示实时进度。如果跑完没出结果可以指定字典# 使用 rockyou 字典注意先解压 sudo gunzip /usr/share/wordlists/rockyou.txt.gz john --formatsha512crypt --wordlist/usr/share/wordlists/rockyou.txt /etc/shadow # 显示已破解的密码 john --show /etc/shadowhashcat 的命令稍微讲究一点需要把 hash 提出来加上 hash 类型标识。SHA-512 对应的 hashcat 模块号是 1800# 提取 root 用户 hash sudo grep ^root: /etc/shadow | cut -d: -f1,2 hash.txt # hashcat 跑 SHA-512指定 rockyou 字典 hashcat -m 1800 -a 0 hash.txt /usr/share/wordlists/rockyou.txt # -a 0 表示字典攻击模式-m 1800 表示 SHA-512 crypthashcat 成功破解后会输出明文密码状态栏会显示Cracked。它的输出比较“酷”新手容易看懵记住几个关键状态就行Status: Running表示在跑Cracked表示成功Exhausted表示字典跑完了但没命中。我在实操中发现一个细节john 对格式的容错性比 hashcat 好。有时候拿到的 shadow 文件来自不同的发行版算法标识是$y$yescryptjohn 能自动识别hashcat 则需要手动查模块号比如 yescrypt 是 20200。不确定的时候可以先用 john 跑john 识别不了再查 hashcat 的hashcat --example-hashes找到对应模块。3.2 在线服务口令测试在线测试我用得少因为风险高、容易被发现但作为一个运维人也应该知道怎么操作产品上线前自测自己的服务密码强度是合理需求。以测试本机 SSH 为例# 安装 hydra sudo apt install hydra -y # 测试 ssh 服务的 root 密码用户字典 u.txt密码字典 p.txt hydra -L u.txt -P p.txt ssh://192.168.1.100 # 控制并发和速度防止触发 lockout hydra -L u.txt -P p.txt -t 4 -w 5 ssh://192.168.1.100-t 4表示同时四个连接-w 5表示每次等待五秒再试下一个。在线测试的瓶颈在延迟和限流不是计算速度开太多线程只会把自己搞得很可疑还可能把目标机器的 SSH 服务拖挂。这里有个重要的提醒在线测试一定会留下日志。/var/log/auth.log里会记录来自哪个 IP、尝试了什么用户。所以如果是测试自己的服务器测完记得清理日志如果你是做了授权的渗透测试建议把测试时间和来源 IP 提前告知对方运维避免误判为攻击。3.3 忘记 root 密码单用户模式重置这是运维最常遇到的情况不涉及任何哈希破解而是直接绕过密码验证。原理是通过 GRUB 引导菜单进入单用户模式此时系统以 root 权限运行一个最小环境你可以直接修改密码或去掉密码字段。具体步骤# 1. 重启系统在 GRUB 启动菜单出现时选中内核行按 e 进入编辑 # 2. 找到以 linux 或 linux16 开头的行在末尾加上 init/bin/bash # 3. 按 Ctrl X 或 F10 启动系统会直接进入 bash shell # 4. 重新挂载根文件系统为可写状态 mount -o remount,rw / # 5. 修改密码 passwd root # 6. 如果只想清空密码也可以编辑 shadow 文件去掉第二个字段 # 注意清空密码有安全风险不建议这么干 # 7. 重启 exec /sbin/init如果服务器有系统加固措施比如 GRUB 设置了密码、或者使用了 SELinux 强制模式单用户模式的操作路径会复杂一些可能需要你先验证 GRUB 密码然后临时修改 SELinux 策略。不同的发行版细节有差别有的版本需要用rd.break配合 chroot 来改密码这个思路是相通的核心就是在根文件系统可写的情况下用passwd命令重置密码。UEFI 引导的主机如果在 GRUB 菜单里看不到内核编辑选项可能是 GRUB 菜单被隐藏了需要在启动时按住 Shift 或 Esc 强制显示。物理机有 IPMI/KVM 的话直接用虚拟控制台操作最方便虚拟机就在 vSphere 或 VirtualBox 的管理界面操作跟在现场一样。3.4 从 Live CD 重置密码如果单用户模式进不去比如磁盘加密LUKS被锁了、或者 GRUB 完全损坏最后一招是用安装盘或 live CD 启动挂载原系统根目录直接改 shadow 文件。# 1. 用 Ubuntu/Debian 安装盘启动选择“试用” # 2. 找到原系统的根分区比如 lsblk 查看假设是 /dev/sda2 sudo mount /dev/sda2 /mnt # 3. 挂载必要的文件系统 sudo mount --bind /dev /mnt/dev sudo mount --bind /proc /mnt/proc sudo mount --bind /sys /mnt/sys # 4. chroot 进原系统 sudo chroot /mnt # 5. 重设密码 passwd root # 6. 退出并重启 exit sudo reboot这个方法唯一的难点是搞清楚根分区是哪个。用lsblk -f能看到分区和文件系统类型有 LUKS 加密的先cryptsetup luksOpen /dev/sda2 crypto_root解密再挂载解密后的设备。如果你不太确定就多看几遍lsblk的输出别急着挂载挂错了地方改了半天发现没用白折腾。我客观说LUKS 全盘加密加 GRUB 密码加 SELinux 强制这套组合下来物理重置这条路基本就断了。如果你运维的就是这种高安全环境密码管理系统比如 Vault、pass必须提前做好否则忘密码就是重大事故。4. 常见问题与排查经验实录4.1 hash 类型识别错误这是新手最容易卡住的地方。拿到的 shadow 文件里第二段开头是$1$、$5$、$6$、$y$、$2y$这些标识对应不同的算法你指定了错误的格式john 和 hashcat 可能会直接报错或者疯狂跑但永远不匹配。我之前碰到一台客户发给我的 shadow 文件所有用户都是$y$开头我用 sha512crypt 跑了一晚上没结果后来发现是 yescrypt。DEBIAN 13 换源、新版系统默认算法常有变化最好先确认系统版本再决定格式。john 的优势是可以直接用默认模式自动识别所以我的建议是遇到不确定的先跑 john让它自己猜。4.2 性能瓶颈与进度判断CPU 跑 SHA-512 的效率很感人单核每秒大概几万次跑一个百万级字典要好几个小时。hashcat 用 GPU 之后每秒能到几千万甚至上亿次差距是千倍级别。如果条件允许强烈建议用 hashcat。判断破解进度不要只看刷新时间关键是看速度和剩余空间hashcat -m 1800 -a 0 hash.txt rockyou.txt --show # 或者用 --status 查看进度跑 Incremental增量模式时要小心8 位所有可打印字符的组合是天文数字就算 GPU 快也跑不完。实操里基本都是先跑字典字典跑不到再上规则和掩码掩码也设置合理的字符集比如?d?d?d?d?d?d表示六位纯数字范围一下就小多了。4.3 字典命中率为什么低很多人抱怨 rockyou 跑不出密码这不奇怪。rockyou 是 2009 年泄露的数据现在很多用户的密码早就不在里面了。破解效果好的组合不是纯靠字典而是“字典 规则”# john 使用规则 john --wordlistdict.txt --rulesAll /etc/shadow # hashcat 使用规则 hashcat -m 1800 -a 0 hash.txt dict.txt --rulesbest64.rule规则的本质是自动化变形。best64 规则里涵盖了最常见的 64 种变形方式比如p表示在密码尾部加1c表示首字母大写d表示加数字前缀。跑完基础字典再用规则变一次覆盖率能提升 30% 以上。还有一点自定义字典一定要结合目标信息比如公司域名、电话区号、关键产品名这是我实测最有效的超车方案。4.4 在线测试被大量错误日志淹没Hydra 跑的时候目标机器的/var/log/auth.log会被刷屏有些 sshd 配置里有MaxAuthTries参数超过次数端口会短时间封掉。我看过不少因为测试把自己 IP 封了的例子解决思路有两个一是放慢速度、调低并发二是换用--fallback机制让 hydra 在检测到 lockout 时等待一段时间。千万不要把并发拉满硬刚那样大概率什么都测不出来还搞得对方安全告警响半天。我把常见的失败原因整理成了一张速查表方便你定位问题。现象可能原因排查方向john 报 unknown ciphertext formathash 格式错误检查$6$、$y$标识改用自动识别hashcat 启动报 CL/OOMGPU 驱动没装好或显存不足重新安装 OpenCL 驱动更换小字典跑了一晚没结果算法慢 字典不匹配改用规则、掩码、定制字典Hydra 总是 Fail目标启用了锁账户策略放慢速度提前和对方沟通单用户模式找不到磁盘根文件系统是 LVM/LUKS用 lsblk 确认chroot 前挂载 /bootshadow 文件内容全是!或*该用户被锁定或禁用登录检查passwd -S状态4.5 小心 rate limiting 与并发陷阱在线测试的另一个隐藏坑是对端可能配置了速率限制。简单的fail2ban就能让你的 IP 被禁掉。我的建议永远是这样在线测试前先跑一个非常小的字典比如 3 到 5 个候选密码用合法账号自己登录一次确认服务正常再正式开跑。测试中定期看日志不要把所有宝押在一次全速爆破上测试本质上是慢工出细活的事。5. 防御视角怎么让密码更难被攻破5.1 从源头上提高密码强度破解难度的核心是熵足够。一个 6 位纯数字密码即使加了 bcrypt也有被擦中的概率而一个 16 位随机且包含大小写数字符号的密码破解成本高到让对方直接放弃。密码策略建议密码长度不少于 12 位越长越重要。长度增加一位破解时间呈指数级增长。避免用键盘序列、生日、手机号、公司名等可预测信息这些是定制字典的重点攻击目标。不同主机用不同密码尤其不要用同一个密码管所有服务器。能用密钥登录就不要用密码SSH 的密码登录默认可以关。5.2 利用 PAM 和系统策略控制口令生命周期Linux 原生就有 PAM可插拔认证模块可以通过配置限制密码复杂度、过期时间、重复使用次数。/etc/pam.d/common-password里可以加上密码强度检查规则/etc/login.defs里可以设置密码有效期。# 编辑 /etc/pam.d/common-password # 密码最短长度 12强制包含数字和特殊字符 password requisite pam_pwquality.so minlen12 dcredit-1 ocredit-1 # 登录失败策略连续 5 次失败锁定登录 15 分钟 auth required pam_faillock.so deny5 unlock_time900如果你刚上手建议先用pam_pwquality做基础强度校验同时用faillock做登录失败锁定。这样即使密码被猜测攻击者的尝试次数也会被限制跑在线破解的效率会大打折扣。5.3 弱口令自动化审计与其等攻击者来破解不如自己先扫一遍。思路是写一个脚本定期把/etc/shadow导出到安全环境用同样工具检查命中弱口令就强制用户改密码。这个方案在企业内部很有价值也是我目前做得最多的安全运维工作之一。#!/bin/bash # 简单的弱口令检查脚本配合 cron 每周跑一次 # 注意导出的 shadow 文件必须严格保管避免二次泄露 sudo cp /etc/shadow /tmp/audit_shadow sudo chmod 600 /tmp/audit_shadow john --formatsha512crypt --wordlist/usr/share/wordlists/rockyou.txt /tmp/audit_shadow john --show /tmp/audit_shadow # 把结果定向发送给安全负责人发现有弱口令再联系对应同事这里必须强调你自身写出来的这类脚本审计的对象是公司授权的服务器跑完的 hash 文件要及时删除不要留在临时目录里。安全审计的本质是控制风险自己却不能制造新的泄露点。5.4 服务层面的加固除了密码本身还要减少攻击面SSH 开启PermitRootLogin no用普通用户加 sudo 提权。配置 fail2ban 自动封禁恶意 IP。开启审计日志auditd记录关键命令执行。重要服务器尽量关闭密码登录改用 SSH 密钥或证书。我做过的安服项目里很多服务器不是被爆破了密码而是密码登录端口暴露到公网MySQL、Redis 等服务的弱口令被打穿。密码破解只是入口后续的横向移动、提权才是真正的威胁所以防守思路一定是纵深防御而不是指望密码不被猜中。最后再说点实际的做这一行久了我对“密码破解”这四个字的态度变得很复杂。它既是我帮客户找回系统、排查弱口令的日常工具也是每次做安全演练时最需要谨慎对待的能力。密码这种东西真正的风险往往不是算法不够强而是使用者嫌麻烦。我在实际运维中见过太多123456、Pssw0rd、Admin123甚至把密钥写在桌面文本文件里的。工具和命令只是手段你心里得有一杆秤——什么时候该用、能不能用、用了之后怎么处理数据这些问题比命令本身重要得多。最后分享一个小技巧如果你偶尔需要记忆大量服务器密码不要再用明文表格了改为用pass基于 GPG 的密码管理器配合团队共享不仅每个密码可以独立随机生成审计起来也清晰。破解和防护的攻防永远不会停但在工作中守住边界、把自己系统的“锁”做得比隔壁强一点就已经赢下了大多数场景。
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/10/8 20:09:31
用搜索API自动化挖掘电影信息:从查询词到结构化JSON
2026/10/8 20:04:31
不玩虚的!我是这样用TaoToken统一Key调ChatGPT做单元测试与CodeReview的
2026/10/8 20:04:31
用 Apache DolphinScheduler 编排可信可审计的对话式 Data Agent:TaoToken 统一 Key 接入实践
2026/10/8 21:00:19
Orca ADE 实战:多 Agent 并行调度与共享上下文的工程化方案
2026/10/8 21:00:19
多智能体持久化协作系统设计:从单体Agent到可落地编排架构
2026/10/8 21:00:19
AI 生成 UI 实战:前端开发如何摆脱重复拼装,提升设计还原度
2026/10/8 21:00:19
Agent上下文治理:从失焦到聚焦的工程实践
2026/10/8 21:00:19
DeepSeek Harness桌面端实操:插件、Skill与内网离线部署全解析
2026/10/8 20:49:48
GUI学习第二天:从事件驱动到布局管理,用Tkinter打造交互工具
2026/10/8 0:04:11
Agent Skills 完全指南:原理、写法、安装与实战避坑
2026/10/8 0:04:11
Agent Skills 实战:从 Genkit 定义到 GKE 部署与排查
2026/10/8 0:04:11
Agent Skills 实战:从设计到调试的完整指南
2026/10/8 5:02:14
Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化
2026/10/7 9:55:49
多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系
2026/10/7 14:02:03
hindsight:面向LLM应用的事后可观测性工程实践
2026/10/8 4:30:43
我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
2026/10/8 2:46:15
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026/10/8 4:32:33
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)