Linux

文件的意外訪問權限

  • January 30, 2021

我在 windows 中使用 linux 作為子系統。

通過 bash 終端創建文件時確實有問題。如果我執行命令touch foo.txt,那麼ls -l foo.txt. 所有訪問權限都將被啟動且無法更改。

-rwxrwxrwx foo.txt

有解決方案嗎?

還嘗試編寫一個 C 程序來創建一個具有 0750 權限的文件,但仍然存在同樣的問題:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>

int main() {
 umask(0);
 int fd = open("foo.txt", O_RDONLY | O_CREAT | O_EXCL, 0750);
 if(fd < 0) perror("foo.txt");
 close(fd);
}

編譯程序後:

-rwxrwxrwx foo.txt

順便說一句,在虛擬機上使用 linux 時它可以正常工作

有關 Windows 驅動器和 WSL 之間的權限映射方式的資訊,請參閱此 WSL 文件。預設情況下,文件的 Windows 權限就是您所看到的,而 chmod 確實沒有太大作用。

但是可以使用元數據支持裝載驅動器,然後 WSL 將應用在元數據中找到的權限,而不是 Windows 權限。這允許 WSL 將 Linux 權限映射到 Windows 驅動器上的文件。

使用元數據支持自動掛載 Windows 驅動器:

  • /etc/wsl.conf在您的 WSL 實例中編輯或創建
  • 添加以下行:
[automount]
enabled = true
options = "metadata,umask=22,fmask=11"
  • 退出您的 WSL 實例
  • wsl --terminate <distroname>使用PowerShell 或 cmd終止 WSL 實例。
  • 重啟 WSL 實例

然後,您應該會發現 atouch結果為.rw-r--r--,並且您的程式碼結果為預期的.rwxr-x---(750)。

至少在我的 WSL2 / Ubuntu 20.04 實例上測試並確認(包括您的測試應用程序)。

另請注意,與 WSL1 相比,Windows 驅動器上的 WSL2 性能非常糟糕。如果您要在該驅動器上執行任何文件密集型操作,請盡可能使用 WSL1 實例。或者只是堅持 WSL2 上的 ext4 fs。

引用自:https://unix.stackexchange.com/questions/631541