我刚刚开始在 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\Temp
Windows)。您实际上不需要自己在那里创建文件。
除了这两个位置之外,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)目录(只要它是空的),因为您仍然拥有您的主(父)目录。