我忘记了 WSL 中的 Ubuntu 用户密码,但我可以通过以下方式重置它:
- 打开 CMD shell
wsl -u root
,然后(在 Ubuntu 中),passwd my_username
我可以更改密码而无需提供旧密码。这有效,但这在安全方面不是一个漏洞吗?我实际上是 Linux/Unix 新手,所以这个问题浮现在我的脑海中...
答案1
这是个好问题——无论你是新手还是有经验,评估系统的安全性都是一项有价值的练习,在我看来。
我个人曾经多次思考过这个(以及这个稍微不同的形式)特定问题,但我还没有找到可以利用此功能的明确攻击媒介。
这里有几点需要注意:
您的 WSL 实例与您的一起运行视窗用户的权限。
即使在 Ubuntu 中运行
root
,你也无法更改视窗这是普通 Windows 用户无法做到的。例如:- 你能
/mnt/c/<your_Windows_user>/Documents
通过 WSL删除或修改文件(以root
普通用户身份) - 你不能修改系统文件或可执行文件
/mnt/c/Windows/gdi32.dll
,因为除非您在管理会话中运行,否则即使通过文件资源管理器您也无法执行此操作(不要这样做!)。
再说一遍,这与普通 Windows 用户可以(和不能)做的事情没有什么不同。
- 你能
您的 Windows 用户可以完全控制 WSL(以及任何其他发行版)中的 Ubuntu。
这类似于虚拟机或任何容器技术的运作方式。由于您是视窗运行 WSL 的用户,您已经可以执行以下操作:
- 在 WSL 中安装新的 Ubuntu 实例,设置用户名等。
- 通过命令删除 Ubuntu 实例
wsl --unregister
(不要这样做!) - 对虚拟驱动器有完全访问权限(
.vhdx
),可以将其复制到另一台机器,检查它,修改它等。 - 而且,正如您所发现的,通过以...身份运行可以更改用户密码
root
(无需密码)。
因为您是运行 WSL 的 Windows 用户,所以您已经可以用它做任何您想做的事情。 WSL 根本没有理由要求您使用密码“登录”Ubuntu。
即使在“纯 Ubuntu”中也存在其他类似的情况——运行 Docker 或 Podman(或其他)容器可让您完全控制该容器。您可以在该容器内创建用户、创建或删除文件等。启动 Ubuntu Docker 容器时不需要密码,就像在
root
Docker 内部一样;就像在 WSL 上启动 Ubuntu 时不需要密码一样root
。
事实是,如果攻击者获得足够的系统访问权限,以 Windows 用户身份运行任意代码,那么无论他们是否能够访问其中运行的 Ubuntu,他们就已经“赢了”。root
在这种情况下,强迫您使用密码在 WSL 中“登录”Ubuntu(无论是以 Windows 用户身份还是其他用户身份)都不会增加任何额外的防御。