如何在 Windows Subsystem for Linux 中重置 Linux 密码

如何在 Windows Subsystem for Linux 中重置 Linux 密码

我在 Windows 上安装了 Kali Linux 子系统。现在我忘记了 root 密码。只有 Kali Linux 的终端,没有其他东西。我该如何安全地重置密码?

注意:我同时安装了 Ubuntu 和 Kali Linux,但bash默认运行时会打开 Ubuntu。

答案1

我同时安装了 Ubuntu 和 Kali Linux 但是当我默认运行 bash 时它会打开 Ubuntu。

在新版 Windows 中,用户可以安装并运行多个 GNU/Linux 发行版。可以使用命令配置默认发行版(即随附的发行版wsl.exe) 。例如,要在首次运行时wslconfig /s <disrto_name>使用 打开 Kali ,请使用此命令或运行。wsl.exewslconfig /s kali-linuxkali.exe

我忘记了 Kali 中的 root 密码,只有 Kali Linux 终端,没有其他任何东西。我该如何安全地重置密码?

首先,我不知道这个过程是否安全。在撰写本文时,WSL 从DefaultUID注册表管理默认登录用户(将来可能会发生变化)。关闭任何打开的 WSL 实例。要编辑此注册表值,请打开注册表编辑器或regedit.exe从开始菜单或运行对话框。转到此注册表路径或在该窗口中使用Ctrl+键入此路径L

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss 

您可能会看到一个或多个子项(如子文件夹),其名称类似于{12345678-1234-1234-1234-123456789012}(称为 GUID)。双击它们以逐个打开,并将值DistributionName与您想要的发行版名称匹配,它将在这里kali-linux(见下文)。双击该DefaultUID值并将其更改为 ZERO。零代表 root 用户,或10000x3e8十六进制)代表普通用户。

在命令提示符中打开wsl.exe。提示符从 变为$#表示 root 用户)。passwd在 Kali 中运行命令,照常更改 root 密码。现在返回上一个注册表项,将零更改为上一个值(或3e8十六进制)。以下是注册表值的示例:

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss]
"DefaultDistribution"="{f029d4cd-b7ee-42bc-ae02-af8f2c97f495}"

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss\{f029d4cd-b7ee-42bc-ae02-af8f2c97f495}]
"State"=dword:00000001
"DistributionName"="kali-linux"
"Version"=dword:00000001
"BasePath"="C:\\MyFiles\\kali-linux"
"KernelCommandLine"="BOOT_IMAGE=/kernel init=/init ro"
"DefaultUid"=dword:000003e8
"Flags"=dword:00000007

更多细节:

答案2

我知道这是一个老问题,但我想根据微软的指导提供答案,因为我偶然发现了这个问题并且知道一定有更好的方法。

本文基于以下网址的文章:https://docs.microsoft.com/en-us/windows/wsl/user-support运行至少运行 Windows 10 1709(秋季创意者更新)的设备

  1. 确保 Kali 没有运行
  2. 打开命令提示符(cmd.exe
  3. 在命令提示符下运行kali config --default-user root
  4. 运行 Kali,你应该自动以 root 身份登录
  5. 在 Kali 中,运行passwd useruser ,其中 user 是你要重置密码的帐户的用户名,即passwd bob
  6. 按照提示重置密码,然后输入exit关闭Kali
  7. 在命令提示符下,运行kali config --default-user user用户,其中用户是您刚刚重置密码的用户名,即kali config --default-user bob

按照这些步骤,您应该能够在 WSL 上的 Kali 中重置您的帐户密码。

答案3

该解决方案由以下公式给出:比斯瓦普里约. 感谢他

Win + R 在 Windows 中按Type打开运行命令wsl.exe ,或者从 Windows 开始菜单打开 Bash 窗口。如果你正在运行 Bash 窗口,请按照以下步骤操作

如果您忘记了用户名

在那里输入cat /etc/passwd 你可以看到用户名

找回密码

再次打开运行命令并输入regedit

计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss

登錄。

查找注册表值DistributionName==Kali_Linux.

导出当前注册表,以防出现问题,您可以返回

改变defaultUID 注册表归零[但也要记住旧的价值]

打开Kali,输入passwd更改root密码。

下次为了避免在 kali 中使用 root 登录,请将 defaultUID 注册表更改为旧值

答案4

最初提出该问题时(或写出以前的答案时)无法使用以下方法,但wsl现在该命令可以比旧方法更容易(更安全)地处理这个问题。

请注意,以下内容适用于在 WSL 中安装的任何发行版的几乎任何 shell - Ubuntu、Kali 等。唯一的要求是命令passwd本身,它应该是通用的。

假设你只安装了一个 WSL 发行版,那么这一行命令应该可以在 PowerShell 中运行:

wsl -u root -e passwd (wsl -e bash -c 'echo $USER')

这本质上等同于:

wsl -u root passwd <your_username>

如果你安装了多个 WSL 发行版(例如 Kali 和 Ubuntu),那么:

wsl -l -v
# Confirm the correct distribution name
wsl -d <distroname> -u root -e passwd <your_username>

附注:-e passwd告诉 WSL 运行passwd命令直接地,而无需调用 shell。这非常适合于由于某种原因而无法访问默认 shell 的情况。

相关内容