Windows 10 上的 wsl2 Linux 上的 sudo 密码

Windows 10 上的 wsl2 Linux 上的 sudo 密码

我刚刚开始在 Windows 10 上使用 WSL2(ubuntu 20.04)。如果我想运行 makefile 或删除目录等基本操作,我会收到“您没有权限”的提示,然后我必须不断使用 sudo。我可以配置什么来避免这个问题?谢谢。

答案1

简短回答:

不要这样做。如果文件或目录位于用户没有权限访问的位置sudo,那么这样做是有充分理由的,普通用户不应该在不了解后果的情况下更改文件。

解释:

正如评论中提到的,你的普通用户应该不是有权访问“系统文件”,以尝试减少意外损坏系统以及故意损坏(来自恶意软件)的可能性。

如果命令需要sudo,那么很可能你所在的位置不是您可以安全地创建或删除文件或目录。

例如:

cd /
mkdir project

这需要sudo,因为系统的根文件夹是禁止访问的。是的,这与 Windows 不同,在 Windows 中,普通用户在驱动器的根级别创建目录。

Linux 系统认为普通用户可以安全地更改文件的地方很少:

  • 您的主目录,也称为~,通常为/home/<username>。您在此处拥有完全权限。

  • 在 中/tmp,您可以创建文件/目录。您的用户将是这些文件的所有者。然后您可以更改(包括删除)您拥有的文件。但是,您不能更改其他此目录中的用户文件。

    大多数情况下,文件是在/tmp目录中创建的应用程序(进程)需要临时文件(类似于C:\Users\<youruser>\AppData\Local\TempWindows)。您实际上不需要自己在那里创建文件。

除了这两个位置之外,WSL 还有其他位置可供普通 Ubuntu 用户更改。默认情况下,您的用户将拥有/mnt/c/WSL 为您创建的用于访问 Windows 驱动器的挂载(和其他驱动器)。

这意味着您可以(但可能不应该):

cd /mnt/c/
mkdir me_my_and_i

然而,你的 Ubuntu 用户Linux对此驱动器上的文件的权限并不意味着您可以无限制地访问。WSL 仍然是视窗应用程序,运行视窗用户权限。因此您不能(甚至sudo)更改(例如)C:\Windows\和其他敏感(系统)位置的文件。

这可以防止 Ubuntu 中的意外或恶意命令破坏您的 Windows 安装。 请注意你能行仍然会对你的 Windows 安装造成巨大损害即使有这些保护措施,系统仍然会崩溃。但至少系统仍可启动。


回到主题Ubuntu位置,你应该明白你sudo在你真正需要的地方创建新目录(使用一次)不应该然后将该目录的所有权授予您的普通用户。这样一来,您就创建了一个新位置,您的用户无需 即可在该位置更改文件sudo。例如:

# Not recommended, for example only
cd /

# won't work, permission denied:
mkdir me_myself_and_i

# Use sudo:
sudo mkdir me_myself_and_i
sudo chown <yourusername>:<yourusername> me_myself_and_i
ls -l
# Notice that the directory is owned by you - All others are owned by root

cd my_myself_and_i

# Works *without* sudo:
touch 123
rm 123

但是,如果你尝试:

cd /
rmdir me_myself_and_i

您将需要sudo。即使您拥有me_myself_and_i,删除它也会改变根/目录,而根目录root仍然拥有(并且应该拥有)。

相反,你甚至可以在自己的主目录中创建一个目录(或文件),供你的用户不能使用权:

cd ~
sudo mkdir me_myself_and_i
cd me_myself_and_i
touch 123

这将导致Permission denied,因为root拥有您刚刚创建的目录。

然而,你的普通用户删除新创建的(root-owned)目录(只要它是空的),因为您仍然拥有您的主(父)目录。

相关内容