ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Kali Linux忘记用户名?三种恢复方法详解,从GRUB到Live USB全攻略

Kali Linux忘记用户名?三种恢复方法详解,从GRUB到Live USB全攻略 1. 项目概述当Kali Linux的登录大门对你关闭时搞渗透测试或者安全研究的朋友手里多半都有一台Kali Linux。这系统用起来是爽各种工具开箱即用但不知道你有没有遇到过这种尴尬某天早上或者隔了几天没碰那台测试机打开虚拟机或者物理机准备输入用户名密码登录时脑子突然一片空白——用户名是什么来着是默认的kali还是自己当初手贱改了个hacker、pentester密码倒是记得几个常用组合可用户名对不上连尝试的机会都没有直接就被挡在了登录界面之外。这感觉就像你有一仓库的顶级装备但仓库的钥匙你给弄丢了连门都进不去。更别提如果你是在实体机上单跑Kali或者这是你唯一的主力测试环境那简直就是一场小型灾难。别慌这种情况在Linux世界里尤其是像我们这种经常折腾系统的人身上发生的概率并不低。好消息是Linux系统包括Kali其设计哲学里就包含了强大的恢复能力。忘记用户名听起来是个死局但实际上有好几条“后门”可以走。今天要聊的就是专门针对“Kali Linux忘记用户名”这个看似无解问题的实战恢复教程。我们不会只讲一种方法因为实际环境千差万别——你可能用的是图形界面GNOME也可能是纯命令行你的系统可能设置了GRUB密码也可能没有你甚至可能是在一个加密的磁盘上。我们将从最简单、最通用的方法开始逐步深入到更复杂的情况并解释每一步背后的原理。无论你是安全新手还是老鸟偶尔犯晕这篇指南都能帮你把那个“丢失”的用户名找回来重新夺回系统的控制权。核心的思路就是利用Linux的单用户模式或恢复模式直接以root权限介入系统然后查看或修改用户账户信息。2. 核心思路与恢复路径选择忘记用户名本质上是一个身份认证问题。Linux的登录流程无论是图形化的登录管理器如GDM、LightDM还是字符界面的login依赖于/etc/passwd和/etc/shadow这两个文件来验证用户身份。/etc/passwd存储了用户名、用户ID、组ID、家目录和默认shell等信息/etc/shadow则存储了加密后的密码。我们进不去系统是因为我们无法提供与/etc/passwd中任何一条记录匹配的用户名。因此恢复的核心思路非常直接绕过正常的认证流程直接获取系统的最高权限root然后去查看/etc/passwd文件。这个文件是明文存储的里面列出了系统上所有的用户名。一旦我们有了root权限查看它就是一瞬间的事。在Kali Linux以及大多数基于Debian/Ubuntu的发行版上实现这个目标主要有以下三种路径选择哪一种取决于你的系统引导配置和访问条件2.1 路径一通过GRUB引导菜单进入恢复模式最常用这是成功率最高、也最推荐首先尝试的方法。GRUB是大多数Linux系统的引导加载器。在开机时它通常会显示一个菜单让你选择要启动的操作系统或内核。在这个菜单里就隐藏着进入“恢复模式”的选项。原理恢复模式本质上就是引导系统进入一个特殊的运行级别通常是runlevel 1或single在这个级别下系统只会启动最核心的服务并且通常会直接给你一个root权限的shell而不需要密码。这正是我们需要的。前提条件你的GRUB菜单在启动时是可见的并且没有被设置密码保护。默认情况下Kali的GRUB菜单是可见的但可能会因为等待时间太短如1秒而一闪而过。这是我们需要处理的第一个小障碍。2.2 路径二修改GRUB内核启动参数进入单用户模式如果GRUB菜单里没有直接的“恢复模式”选项或者你想更深入地了解原理可以直接修改GRUB的内核启动参数。这通常在GRUB菜单编辑界面中完成。原理Linux内核在启动时可以接受一系列参数。其中single或init/bin/bash这样的参数可以告诉内核“别启动完整的系统服务了直接给我一个shell。”通过添加这些参数我们同样可以达到绕过正常登录、获取root shell的目的。前提条件同样需要能访问GRUB菜单并且有权限编辑启动参数。2.3 路径三使用Live CD/USB环境挂载系统盘如果上述两种方法都失败了例如GRUB被密码锁定或者系统根本无法正常引导到GRUB菜单那么我们就需要借助外部力量。这就是使用一个可启动的U盘或光盘比如另一个Kali Live镜像、Ubuntu Live镜像等来启动电脑。原理用Live系统启动后你的原系统硬盘就变成了一块“数据盘”。你可以手动挂载这块硬盘然后直接访问其文件系统包括/etc/passwd。你甚至可以chroot到那个环境里直接执行passwd命令来修改root密码如果连密码也忘了的话。前提条件你需要有另一个可启动的Kali或Linux Live介质并且你的电脑支持从USB或光盘启动。注意路径一和路径二是“在线”操作直接在原系统上进行。路径三是“离线”操作需要外部介质。对于单纯的“忘记用户名”路径一通常就足够了因为我们的目的只是“查看”。但如果后续需要修改密码或者系统损坏路径三就是终极武器。接下来我们将以最常用的路径一为例展开详细的、一步一步的操作指南。我会尽量模拟一个真实的恢复场景把可能遇到的坑和对应的解法都讲清楚。3. 详细操作步骤从GRUB到获取用户名假设你现在面对着一台忘记了用户名的Kali Linux机器它正在显示图形化登录界面或命令行login:提示符。我们开始操作。3.1 第一步重启系统并抓住GRUB菜单如果系统正在登录界面你需要先重启它。在图形界面通常可以点击电源图标选择重启在命令行如果还能按CtrlAltF1~F7切换到其他终端可以尝试用sudo reboot命令当然这需要密码我们可能没有。最直接的方法是强制重启按下物理机的重启按钮或者如果在虚拟机里如VMware、VirtualBox使用虚拟机的重启功能。重启后屏幕开始出现BIOS/UEFI信息然后是GRUB引导加载器的界面。关键就在这里GRUB菜单通常只显示几秒钟Kali默认可能只有1秒。你必须在这几秒钟内迅速按下键盘上的Esc键有时也可能是Shift键。这个操作会中断GRUB的自动倒计时让菜单停留在屏幕上允许你进行操作。如果错过了系统会继续启动进入登录界面那就需要再重启一次手速要快。实操心得在一些虚拟机环境中键盘捕获可能不太灵敏多试几次。如果是UEFI系统GRUB的界面可能比较简洁但逻辑相同。如果按Esc没反应试试Shift键。3.2 第二步在GRUB菜单中选择恢复模式成功拦截GRUB后你会看到一个菜单。通常第一项是“Kali GNU/Linux”启动最新内核的正常模式下面可能还有一项“Advanced options for Kali GNU/Linux”。我们需要的“恢复模式”选项很可能就在“Advanced options”里面。使用键盘的上下方向键高亮选中“Advanced options for Kali GNU/Linux”然后按Enter键。进入子菜单后你会看到多个内核版本选项例如5.15.0-kali3-amd64。每个内核版本通常对应两个条目一个是普通启动另一个就是恢复模式。恢复模式的条目末尾会明确标注(recovery mode)。使用方向键高亮选中带有(recovery mode)的那一行然后按Enter键。注意事项不同版本或自定义安装的KaliGRUB菜单可能略有差异。但“恢复模式”或“Recovery Mode”这个关键词是固定的。如果你的菜单里直接就有“Kali GNU/Linux (recovery mode)”这一项那就直接选它跳过进入“Advanced options”的步骤。3.3 第三步在恢复模式菜单中选择Root Shell系统开始以恢复模式启动。这个过程会跳过大部分服务屏幕上会滚动很多启动信息。最终它会呈现给你一个恢复菜单Recovery Menu。这个菜单是蓝底白字的文本界面提供了几个选项例如resume恢复正常启动clean尝试清理磁盘空间dpkg修复损坏的包fsck检查文件系统grub更新GRUB引导器network启用网络rootDrop to root shell prompt这就是我们需要的system-summary系统摘要使用方向键将高亮条移动到root- Drop to root shell prompt这一项上然后按Enter键。核心原理选择这个选项后系统会给你一个具有root权限的命令行终端。此时你已经绕过了所有身份验证直接成为了系统的超级用户。这是恢复操作的关键一步。3.4 第四步查看系统用户列表现在你面对的是一个以root身份登录的Shell提示符通常是rootkali:~#。这里的~代表root用户的家目录/root。在这个终端里你可以执行任何命令。要查看系统上所有的用户名我们只需要查看/etc/passwd文件。这个文件的每一行代表一个用户格式是username:x:UID:GID:description:home_directory:shell。我们只关心第一列的username。执行以下命令cat /etc/passwd或者为了更清晰地只显示用户名可以使用cut命令cut -d: -f1 /etc/passwd-d:指定冒号为分隔符-f1表示取第一列。输出分析你会看到一长串列表。除了你创建的用户还有很多系统用户如rootdaemonbin等。你需要从中找出那个用于登录的“普通用户”或“非系统用户”。通常它的UID用户ID大于等于1000在Debian/Ubuntu系中普通用户的UID通常从1000开始。你可以用这个命令筛选awk -F: $3 1000 {print $1} /etc/passwd这个命令会列出所有UID大于等于1000的用户这很可能就包含了你的那个登录用户名。常见情况如果你从未修改过Kali Linux 2020.x及以后版本的默认用户名就是kali密码也是kali。如果你修改过那么列表里除了kali应该还会有另一个用户名比如yourname、pentest等。那个就是你要找的。记下这个用户名。至此“忘记用户名”的问题已经解决。3.5 第五步可选重置用户密码既然已经拿到了root权限如果你连密码也一并忘记了或者想顺便重置一下现在就是最佳时机。在同一个root shell中你可以为任何用户修改密码包括你自己。使用passwd命令后面跟上你刚刚找到或想修改的用户名。例如为用户kali重置密码passwd kali系统会提示你输入新的密码并确认一次。输入时屏幕上不会有任何显示星号都没有这是正常的盲输即可。New password: Retype new password: passwd: password updated successfully看到successfully的提示就说明密码修改成功了。重要警告如果你修改的是root用户自己的密码请务必牢记新密码。同时如果你修改了其他用户的密码最好通知该用户。3.6 第六步退出并重启系统所有操作完成后你需要退出这个root shell并重启系统以正常登录。在root shell提示符下输入exit这会让你返回到之前的恢复菜单界面。在恢复菜单中现在选择第一项resume- Resume normal boot然后按Enter。系统将继续正常的启动过程最终会再次到达图形化或命令行登录界面。现在使用你刚刚找到的用户名以及你知道的或刚刚重置的密码就可以正常登录系统了。4. 进阶场景与问题排查上面的步骤覆盖了90%的常见情况。但现实总是更复杂一些。下面我们针对一些可能遇到的“异常”场景提供解决方案。4.1 场景一GRUB菜单不出现或一闪而过问题开机时根本看不到GRUB菜单或者它出现的时间极短如0.1秒来不及按Esc。原因与解决GRUB超时时间设置为0这是最常见的原因。GRUB配置文件中GRUB_TIMEOUT0会导致菜单直接跳过。我们需要在恢复模式下修改这个配置。按照上述步骤进入恢复模式的root shell。编辑GRUB配置文件nano /etc/default/grub也可以用vi。找到GRUB_TIMEOUT0这一行将其修改为一个合理的值例如GRUB_TIMEOUT5表示显示5秒。按CtrlX然后按Y再按Enter保存退出。更新GRUB配置update-grub。重启后你就会有5秒时间来操作GRUB菜单了。GRUB_HIDDEN_TIMEOUT有些配置可能使用了隐藏超时。确保GRUB_HIDDEN_TIMEOUT被注释掉行首加#或删除。UEFI快速启动某些主板/UEFI设置中的“快速启动”功能可能会跳过某些启动阶段。可以尝试进入BIOS/UEFI设置暂时关闭“Fast Boot”选项。4.2 场景二GRUB菜单被密码保护问题在GRUB菜单界面当你尝试按e编辑启动项或进入高级选项时系统要求输入密码。原因系统管理员为了安全给GRUB设置了密码。这增加了难度但并非无解。解决此时路径一和路径二可能行不通了。我们必须使用路径三Live CD/USB。用Kali Live USB启动电脑。进入Live桌面后打开终端。识别你的原系统硬盘分区sudo fdisk -l或lsblk。通常你的原系统会安装在类似/dev/sda2或/dev/nvme0n1p2的分区上具体取决于你的磁盘和分区方案。挂载原系统根分区。假设你的根分区是/dev/sda2sudo mkdir /mnt/kali_root sudo mount /dev/sda2 /mnt/kali_root现在原系统的文件就在/mnt/kali_root下了。直接查看用户文件sudo cat /mnt/kali_root/etc/passwd或者如果你想直接修改GRUB密码需要chroot# 挂载必要的虚拟文件系统 sudo mount --bind /dev /mnt/kali_root/dev sudo mount --bind /proc /mnt/kali_root/proc sudo mount --bind /sys /mnt/kali_root/sys # Chroot到原系统环境 sudo chroot /mnt/kali_root # 现在你已经在原系统的“壳”里了可以编辑GRUB配置 # 例如编辑/etc/default/grub删除或注释掉GRUB密码相关行 # 然后运行 update-grub # 完成后输入 exit 退出chroot exit # 卸载分区 sudo umount /mnt/kali_root/{dev,proc,sys} sudo umount /mnt/kali_root重启从硬盘启动GRUB密码应该已被移除。4.3 场景三系统使用全盘加密LUKS问题安装Kali时选择了加密磁盘。在启动初期就会要求输入密码来解密磁盘。如果忘记了这个加密密码那么任何基于操作系统的恢复方法都将失效因为数据盘根本打不开。解决没有后门。LUKS全盘加密的安全性正在于此。你必须回忆起加密密码。唯一的办法是尝试所有可能的密码组合如果你有线索的话。因此对于加密系统务必妥善保管加密密码可以考虑使用密码管理器。如果只是忘记用户名但记得加密密码那么流程是启动时输入LUKS加密密码解密磁盘。之后的步骤就和普通系统一样了你可以通过GRUB恢复模式来查看用户名。4.4 场景四恢复模式下的Root Shell也需要密码问题极少数情况下特别是在一些高度定制的或旧版系统中恢复模式下的root shell可能仍然要求输入root密码。解决这通常意味着系统的/etc/shadow文件中root用户的密码字段是有效的而不是*或!。此时我们可以通过修改内核启动参数来获得一个更“原始”的shell。在GRUB菜单选中正常启动的条目不是恢复模式然后按e键进入编辑模式。找到以linux或linuxefi开头的那一行。这行包含了内核启动参数。在这行参数的末尾在quiet和splash之后如果有的话添加init/bin/bash。注意要加一个空格与前面的参数隔开。例如原来是linux /boot/vmlinuz-... rootUUID... ro quiet splash修改为linux /boot/vmlinuz-... rootUUID... ro quiet splash init/bin/bash按CtrlX或F10用这些参数启动。系统会直接引导到一个bashshell并且拥有root权限。但此时根文件系统是以**只读ro**方式挂载的。我们需要先将其重新挂载为可写mount -o remount,rw /现在你就可以自由地查看/etc/passwd或运行passwd命令了。操作完成后重启系统exec /sbin/init或直接reboot -f。5. 安全加固与预防措施通过恢复模式获取root权限虽然方便了恢复但也意味着如果你的机器物理上被他人接触他们也可以用同样的方法绕过你的登录密码。因此在找回访问权限后有必要考虑一些安全加固措施。5.1 为GRUB设置密码这是防止他人轻易进入恢复模式或单用户模式的最有效方法。生成一个加密的密码哈希。在终端执行grub-mkpasswd-pbkdf2输入你想为GRUB设置的密码程序会输出一段类似grub.pbkdf2...的哈希值。复制它。编辑GRUB配置文件sudo nano /etc/grub.d/40_custom在文件末尾添加将your_hash_here替换为你刚才复制的哈希set superusersroot password_pbkdf2 root your_hash_here保存文件然后更新GRUB配置sudo update-grub重启后在GRUB菜单界面进行任何编辑操作按e或进入恢复模式都需要输入你刚才设置的密码。权衡设置GRUB密码提高了安全性但也意味着如果你自己忘记了GRUB密码下次遇到问题时恢复会变得非常困难只能通过Live USB重置。务必妥善保管这个密码。5.2 禁用root用户登录Kali Linux默认禁用了root用户的图形界面登录和SSH登录root密码是随机的。这是一个好习惯。日常操作应该使用一个普通用户需要root权限时通过sudo来提权。这可以避免很多因误操作导致的系统损坏。5.3 使用强密码并定期更新无论是用户密码还是GRUB密码都应使用足够长度和复杂度的密码并考虑定期更换。可以使用密码短语一串随机的单词组合来平衡安全性和可记忆性。5.4 记录关键信息将重要的用户名、加密密码、GRUB密码如果设置了记录在一个安全的离线位置比如密码管理器或加密的笔记中。不要依赖记忆。5.5 定期备份系统对于重要的测试环境或配置定期进行系统备份例如使用rsync或克隆整个虚拟机磁盘。这样即使系统完全崩溃也能快速恢复到一个可用的状态。忘记Kali Linux用户名虽然令人头疼但绝非世界末日。Linux系统设计的灵活性和可恢复性在此刻得到了充分体现。掌握从GRUB恢复模式到Live USB救援的整套方法就像是为你自己的系统买了一份“保险”。平时做好安全加固和备份就能在享受Linux强大功能的同时将这类意外带来的风险降到最低。下次再遇到登录界面大脑空白的时刻你就能从容应对了。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进