WSL 上的 Kali Linux 升级后崩溃

WSL 上的 Kali Linux 升级后崩溃

所以我的问题如下。我从 wsl 商店安装 Kali Linux,使用 $wsl --install -d kali-linux.以下已安装

PRETTY_NAME="Kali GNU/Linux Rolling"
NAME="Kali GNU/Linux"
ID=kali
VERSION="2019.2"
VERSION_ID="2019.2"
ID_LIKE=debian
ANSI_COLOR="1;31"
HOME_URL="https://www.kali.org/"
SUPPORT_URL="https://forums.kali.org/"
BUG_REPORT_URL="https://bugs.kali.org/"

如果我这样做$sudo apt-get update,我会收到以下错误

Get:1 http://kali.download/kali kali-rolling InRelease [30.6 kB]
Err:1 http://kali.download/kali kali-rolling InRelease
  The following signatures were invalid: EXPKEYSIG ED444FF07D8D0BF6 Kali Linux Repository <[email protected]>
Fetched 30.6 kB in 1s (40.9 kB/s)
Reading package lists... Done
W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: http://kali.download/kali kali-rolling InRelease: The following signatures were invalid: EXPKEYSIG ED444FF07D8D0BF6 Kali Linux Repository <[email protected]>
W: Failed to fetch http://http.kali.org/kali/dists/kali-rolling/InRelease  The following signatures were invalid: EXPKEYSIG ED444FF07D8D0BF6 Kali Linux Repository <[email protected]>
W: Some index files failed to download. They have been ignored, or old ones used instead.

然后我手动安装kali-archive-keyring_2020.2_all.deb然后$sudo dpkg -i kali-archive-keyring_2020.2_all.deb 我就这样做了$sudo apt-get update,它会按预期更新存储库。

然后我就这样做了$sudo apt-get upgrade 到目前为止它有效我将我的卡利升级到

PRETTY_NAME="Kali GNU/Linux Rolling"
NAME="Kali GNU/Linux"
ID=kali
VERSION="2021.4"
VERSION_ID="2021.4"
VERSION_CODENAME="kali-rolling"
ID_LIKE=debian
ANSI_COLOR="1;31"
HOME_URL="https://www.kali.org/"
SUPPORT_URL="https://forums.kali.org/"
BUG_REPORT_URL="https://bugs.kali.org/"

现在,当我执行命令时,$sudo apt-get upgrade它说有软件包被保留。

Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
  apt apt-utils bind9-host bsdmainutils bsdutils coreutils cron curl dnsutils dpkg e2fsprogs fdisk findutils iproute2
  iptables isc-dhcp-client libbind9-161 libbsd0 libc-bin libc6 libcryptsetup12 libcurl4 libdevmapper1.02.1 libext2fs2
  libgnutls30 libiptc0 libirs161 libisccc161 libisccfg163 libldap-2.4-2 liblocale-gettext-perl liblwres161 libmount1
  libp11-kit0 libpam-modules libpam-modules-bin librtmp1 libselinux1 libsemanage-common libslang2 libstdc++6
  libsystemd0 libtext-charwidth-perl libtext-iconv-perl libudev1 libxml2 libxtables12 login logrotate mawk mlocate
  mount net-tools passwd perl-base procps rsyslog sed sudo systemd tar udev util-linux vim-common vim-tiny wget whois
0 upgraded, 0 newly installed, 0 to remove and 67 not upgraded.

从这一点来看,无论我尝试安装什么,它总是会导致以下错误,并且 kali 已损坏,我无法进一步使用操作系统。

/usr/bin/perl: error while loading shared libraries: libcrypt.so.1: cannot open shared object file: No such file or directory
dpkg: error processing package libc6:amd64 (--configure):
 installed libc6:amd64 package post-installation script subprocess returned error exit status 127
Errors were encountered while processing:
 libc6:amd64
E: Sub-process /usr/bin/dpkg returned an error code (1)

例如,如果我$sudo apt-get update事后尝试,结果会是 sudo: account validation failure, is your account locked?

我查找了错误,但我并不幸运地找到任何合理的解决方案。对于这个问题的任何帮助,我将不胜感激。提前致谢!

答案1

我可以重现这一点,我真的很惊讶他们竟然漏掉了这一点。问题,如所描述的这个答案遗憾的是 Kali 文件对于手动安装版本。

可悲的是,看起来这个位置正是我们wsl --install为 Kali 所做的事情所使用的。

更新密钥环(正如您尝试的那样)曾经足以解决它,但不再是了。现在更多的签名和/或包已经过时了。

我们可能也找到修复它们的方法,但目前最简单的解决方案是使用 Microsoft Store 安装,而不是命令wsl --install。我从 Microsoft Store 在 WSL 中安装了 Kali,并且立即安装为 2021.3。

wsl --unregister kali-linux请注意,在安装 Microsoft Store 版本之前,您应该先执行另一次操作。

备择方案

如果您无法从 Microsoft Store 安装(并且根据评论,由于公司政策,您不能安装),那么还有一些替代方案。所有这些都涉及获取 Kali tarball,然后wsl --import对其进行编译。

我亲自用 Kali 成功测试了这些:

  • 选项 1:从另一台可以访问 Microsoft Store 的计算机复制 WSL Kali

    如果它适合您,这可能是最可靠的方法。您不会在工作计算机上安装任何 Store 软件包,因此它不应违反至少是政策。

    • 使用另一台非工作 PC(假设您有访问权限)从应用商店安装 WSL 和 Kali。

    • 使用您的用户名和密码(您最终想要在工作计算机上使用的用户名和密码 - 无论它是否存在于该计算机上的 Windows 中)进行配置。

    • (可选)继续并sudo apt get update && sudo apt get upgrade.

    • 退出卡利

    • 从 PowerShell 或 CMD:

      wsl --export kali-linux kali_clean.tar`
      
    • 使用 USB 驱动器将生成的 tarball 传输到您的工作计算机(假设政策允许)。如果不允许 USB,则将生成的 tarball 放在您可以访问的云中的某个位置,并将其下载到您的工作计算机。如果您无论如何都要安装虚拟机作为替代方案,那么在我看来,这与该过程一样安全(并且符合策略)。最终,您将下载某物在您的工作计算机上安装 Kali(或任何其他发行版)。

    • 现在在您的工作计算机上...

    • 跳到下面“从 tarball 安装和配置 Kali”的说明...


  • 选项 2:从 Kali WSL 构建脚本构建

    • Kali 是我见过的少数几个实现 WSL 构建过程的发行版之一非常容易找到。它直接列在获取卡利页。

    • 您首先需要一个单独的 WSL 实例。因为我们知道 Ubuntu 从 开始工作wsl --install -d Ubuntu,所以就从它开始吧。完成后您可以将其删除。

    • 在Ubuntu中...

      sudo apt install -y debootstrap
      git clone https://gitlab.com/kalilinux/build-scripts/kali-wsl-chroot.git
      cd kali-wsl-chroot
      sudo ./build_chroot.sh
      # The build should complete for x64 but fail for ARM.  That's okay as long as `./x64/install.tar.gz` is created.
      sudo mv ./x64/install.tar.gz /mnt/c/somewhere/on/c/kali.install.tar.gz`
      
    • 退出Ubuntu

    • wsl --unregister Ubuntu如果需要,请卸载 Ubuntu 发行版 ( )。

    • 跳到下面“从 tarball 安装和配置 Kali”的说明...


  • 选项 3:使用 Kali Docker 映像创建 tarball

    • 微软提供说明这里关于如何手动导入几乎所有发行版。您需要:

    • 首先安装另一个发行版,例如 Ubuntu(wsl --install当然,通过 可以正常工作)

    • 安装 Docker Desktop(如果政策和许可证允许)。请注意,Docker Desktop 现在需要企业使用的付费许可证,具体取决于您公司的规模。作为替代方案,您可以在 Ubuntu 发行版中安装 Docker 引擎(它仍然是免费的/OSS)。

    • docker pull kalilinux/kalidocker pull kalilinux/kali-rolling(参见Kali Docker 镜像

    • 运行图像 ( docker run kalilinux/kali:latest)

    • 获取图像的名称docker ps -a

    • 将容器导出为 tarballdocker export <name_or_id_from_above> kali.tar

    • 继续下面的说明“从 tarball 安装和配置 Kali”...


从 tarball 安装和配置 Kali

  • 在 Windows 中为 Kali 创建一个目录。我倾向于使用像%userprofile%\WSL\instances\kali我自己这样的东西。

  • cd到 PowerShell 中的该目录。

  • wsl --import Kali . path\to\kali.tar --version 2(或kali.tar.gz选项 2)

  • 这将使用 tarball 创建一个 Kali 实例,然后可以使用 启动它wsl -d kali

  • 您还可以使用 将其设置为默认值wsl --set-default kali

  • 对于第二个(构建脚本)和第三个(Docker 映像)选项,您需要adduserWSL 用户并设置其密码:

    adduser <username>
    usermod <username> -aG adm,cdrom,sudo,dip,plugdev
    
  • 对于所有这些,WSL 都会以root用户身份自动启动。这可以通过创建/etc/wsl.confper来改变这位超级用户的回答

答案2

我会这样说你错过了使用apt dist-upgrade而不只是apt upgrade.不幸的是,我认为你可能已经破坏了你的 Kali,所以你必须擦除并重新安装。

答案3

这是滚动发布发行版的一个常见问题:如果您或多或少不经常跟上他们的更新,在长时间不更新后尝试“赶上”将导致更新失败。

到目前为止,还没有滚动发布发行版声称可以提供从任何过去版本到当前最新状态的可更新性。这样做需要真的很严格变更管理会减慢新功能的引入并消除旧错误,或者使用依赖于它的每个包的每个过去版本以及包本身所依赖的每个新包来测试每个新包,并相应地设置依赖项元数据。后者需要大量工作,并且每次新更新的工作量可能呈指数级增长。

因此,在实践中总是存在一些“滑动窗口”的时间来更新滚动发布发行版。如果你错过了这个窗口,出现问题的可能性就会增加。

Kali 的文档说:(强调我的)

你应该什么时候更新 Kali?

如果您默认安装了 Kali,您应该每隔几周检查一次更新。如果您需要新版本的工具,或者听说安全更新,这可能会加快时间表。但是,一个好的做法是确保所有工具在参与之前都能正常工作,并且在参与期间不应更新。由于 Kali 是一个滚动版本,偶尔会出现问题,并可能破坏所需的工具。

如果您使用的是last-snapshot,则在我们发布当年的下一版本 Kali 之前,您将不会收到更新。因此,关注 Kali Twitter,或者每隔几个月查看一下 Kali 网站是个好主意。 Kali 每年发布四次,并遵循宽松的季度时间表。

因此,即使您使用该last-snapshot版本而不是该rolling版本,每季度发布也意味着从 2019.2 跳转到 2021.4 将跳过它们之间总共 9 个其他版本。即使使用apt dist-upgrade,我也不敢打赌它会成功。

如果 Microsoft 在 2021 年 12 月今天为 WSL 提供 Kali 2019.2,那么此时您应该认为它完全冻结且不可升级。如果它符合您的要求,您可以按原样使用它。如果您需要 WSL 的较新版本,则必须找到专门为 WSL 打包的较新版本。

答案4

这对我来说很有效:

wsl --unregister kali-linux
wsl --install kali-linux --web-download

此处,--web-download表示从 Internet 而不是 Microsoft Store 下载发行版。

相关内容