WSL 上的 Kali Linux 升级后崩溃

re1*_*1gn 3 upgrade kali-linux windows-subsystem-for-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/"
Run Code Online (Sandbox Code Playgroud)

如果我这样做$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 <devel@kali.org>
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 <devel@kali.org>
W: Failed to fetch http://http.kali.org/kali/dists/kali-rolling/InRelease  The following signatures were invalid: EXPKEYSIG ED444FF07D8D0BF6 Kali Linux Repository <devel@kali.org>
W: Some index files failed to download. They have been ignored, or old ones used instead.
Run Code Online (Sandbox Code Playgroud)

然后我使用“Then I do”手动安装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/"
Run Code Online (Sandbox Code Playgroud)

现在,当我执行命令时,$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.
Run Code Online (Sandbox Code Playgroud)

从这一点来看,无论我尝试安装什么,它总是会导致以下错误,并且 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)
Run Code Online (Sandbox Code Playgroud)

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

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

Not*_*1ds 6

我可以重现这一点,我真的很惊讶他们竟然漏掉了这一点。正如此答案中所述,问题在于 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

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

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

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

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

    • 退出卡利

    • 从 PowerShell 或 CMD:

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

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

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


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

    • Kali 是我见过的少数几个可以轻松找到 WSL 构建过程的发行版之一。它直接列在获取 Kali页面上。

    • 您首先需要一个单独的 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`
      
      Run Code Online (Sandbox Code Playgroud)
    • 退出Ubuntu

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

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


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

    • Microsoft在此提供了有关如何手动导入几乎所有发行版的说明。您需要:

    • 首先安装另一个发行版,例如 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
    
    Run Code Online (Sandbox Code Playgroud)
  • 对于所有这些,WSL 都会以root用户身份自动启动。/etc/wsl.conf这可以通过根据此超级用户答案创建来更改。