lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.5 LTS
Release: 20.04
Codename: focal
你好
我已经使用 Ubuntu 好几个月了。我运行的是 Windows 10 PC,并通过 Microsoft Store 安装了 Ubuntu。我在初始设置期间为自己创建了一个用户 - 从那时起,每当我从 Windows 打开 Ubuntu 终端时,它都会以该用户的身份加载。
周四,我加载了 Ubuntu,但它没有以我的用户身份加载,而是以 root 用户身份加载。我的用户仍然存在 - 我可以通过切换到我的用户,su
然后照常进行。这没有给我带来任何问题,但它确实存在异常行为,并且存在明显的安全隐患。
我已经运行sudo apt update
并sudo apt upgrade
确保一切都是最新的。我使用与以往相同的 Windows 帐户加载 Windows 10。我不知道有任何操作更改导致了此行为。
一个可能表明原因的因素是 - 我用code .
它来访问 Visual Studio Code。切换用户后,它不起作用,只有当我将它添加到用户的 $PATH 中时,它才再次起作用。
尝试用谷歌搜索这种情况,但谷歌假设我想以 root 身份登录,而实际上情况恰恰相反,这在某种程度上破坏了这一尝试。
有人能指出这里可能发生了什么,并提出解决办法吗?我并不反对把所有东西都拆掉,然后重新开始安装,但在考虑这个问题之前,我想知道一些简单的事情是否可能是一个问题。
谢谢
答案1
我加载了 Ubuntu,但它不是以我的用户身份加载,而是以 root 用户身份加载。
有人可以……建议解决办法吗?
通常这意味着告诉 WSL 默认用户的 UID 的注册表项已“丢失”。典型的解决方案是通过创建一个/etc/wsl.conf
(以 root 身份)来告诉 WSL 它应该使用哪个 UID,如下所示:
[user]
default=your_username
其他一些替代方案如下:这个答案。
有人能说出这里可能发生了什么事吗......?
我希望至少能推测出一个原因为什么这种情况确实发生了,但从我们在评论中的讨论来看,我仍然不确定。
对于 WSL 下的默认 Ubuntu 安装,默认 uid(通常为 1000)存储在注册表中。在以下情况下,该信息可能会丢失:
- 已编辑一个 WSL 发行版
--import
。 - 或者如果其他东西发生变化,会“断开”注册表项与发行版的连接。重命名默认的 Windows 用户文件夹会导致这种情况,但也会导致发行版本身“丢失”(事实并非如此)。
因此,这听起来不像是默认用户更改的原因。但是,如果 WSL 发行版没有设置默认用户,则将改用 uid 0(root)。这肯定就是您看到的。
您可以通过在 PowerShell 中运行以下命令来查看所有 WSL 发行版的注册表项:
Get-ChildItem HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss\
我猜想要么DefaultUid
是缺失了,要么是设置为了0
。但是我还是不太清楚这是怎么发生的。
我的用户仍然存在 - 我可以通过切换到我的用户
su
,然后正常继续。
这很好。至少我们应该能够告诉 WSL 再次将其用作默认值。
它没有给我带来任何问题,但它确实存在不寻常的行为,并且有明显的安全隐患。
您可能会想,但如上所述,默认为 root 是 WSL 中的预期行为。WSL 发行版中没有“登录”的概念——无论如何,您都可以使用wsl -u <username>
(例如)以任何用户身份登录。wsl -u root
这样做的理由是,即使是 WSL 中的 root 用户也受到视窗用户。无论您是否是 root 用户,您仍然无法删除或更改 中的二进制文件等C:\Windows\System32
。
答案2
我找到了解决方案https://github.com/microsoft/WSL/issues/4276#issuecomment-509338642
以管理员身份打开 PowerShell。粘贴命令:
ubuntu2004.exe config --default-user <username you wish to switch to>
注意:将发行版替换为您系统上的版本。对我来说,我安装的版本是 ubuntu20.04。之后,启动 Ubuntu。