共用方式為


WSL 的檔案許可權

此頁面詳細說明如何在適用於Linux的Windows子系統中解譯Linux檔案許可權,特別是在NT檔系統上存取Windows內的資源時。 本文件假設對 Linux檔案系統許可權結構和umask 命令有基本的瞭解。

從 WSL 存取 Windows 檔案時,檔案許可權是從 Windows 許可權計算,或是從 WSL 新增至檔案的元數據讀取。 預設不會啟用此元數據。

Windows 檔案上的 WSL 元數據

當元數據啟用為 WSL 中的掛接選項時,可以新增和解譯 Windows NT 檔案上的擴充屬性,以提供 Linux 檔系統許可權。

WSL 可以新增四個 NTFS 擴充屬性:

屬性名稱 說明
$LXUID 用戶擁有者標識碼
$LXGID 群組擁有者標識碼
$LXMOD 檔案模式 (檔案系統許可權八進位和類型,例如:0777)
$LXDEV 裝置,如果是裝置檔案

此外,任何不是一般檔案或目錄的檔案(例如符號連結、FIDO、封鎖裝置、unix 套接字和字元裝置)也有 NTFS 重新分析點。 這可讓您更快速地判斷指定目錄中的檔類型,而不需要查詢其擴充屬性。

檔案存取案例

以下是使用適用於Linux的 Windows 子系統以不同方式存取檔案時,如何決定許可權的描述。

從 Linux 存取 Windows 磁碟驅動器文件系統中的檔案 (DrvFS)

當您從 WSL 存取 Windows 檔案時,最可能透過 /mnt/c來存取 Windows 檔案時,就會發生這些情況。

從現有的 Windows 檔案讀取檔案許可權

結果取決於檔案是否已經有現有的元數據。

DrvFS 檔案沒有元資料 (預設值)

如果檔案沒有與其相關聯的元數據,則我們會將 Windows 使用者的有效許可權轉譯為讀取/寫入/執行位,並將其設定為與使用者、群組和其他相同的值。 例如,如果您的 Windows 使用者帳戶具有讀取和執行存取權,但無法寫入檔案,則這會顯示為 r-x 使用者、群組和其他。 如果檔案已在 Windows 中設定 「只讀」屬性,則我們不會在 Linux 中授與寫入許可權。

檔案具有元數據

如果檔案有元數據存在,我們只會使用這些元數據值,而不是翻譯 Windows 使用者的有效許可權。

使用 chmod 變更現有 Windows 檔案的檔案許可權

結果取決於檔案是否已經有現有的元數據。

chmod 檔案沒有元資料 (預設值)

Chmod 只會有一個效果,如果您移除檔案的所有寫入屬性,則會設定 Windows 檔案上的「只讀」屬性,因為這是 Linux 中 SMB(伺服器消息塊)用戶端的 CIFS (Common Internet File System) 相同的行為。

chmod 檔案具有元數據

Chmod 會根據檔案的現有元數據來變更或新增元數據。

請記住,即使元數據指出情況,您也無法提供比您在 Windows 上擁有的更多存取權。 例如,您可以將元數據設定為顯示您具有檔案 chmod 777的寫入許可權,但如果您嘗試存取該檔案,您仍然無法寫入該檔案。 這要歸功於互作性,因為 Windows 檔案的任何讀取或寫入命令都會透過您的 Windows 使用者許可權路由傳送。

在 DriveFS 中建立檔案

結果取決於是否啟用元數據。

中繼資料未啟用 (預設值)

新建立檔案的 Windows 許可權會與您在沒有特定安全性描述元的情況下在 Windows 中建立檔案相同,它會繼承父系的許可權。

已啟用元數據

檔案的許可權位會設定為遵循Linux umask,且檔案會以元數據儲存。

哪個 Linux 使用者和 Linux 群組擁有該檔案?

結果取決於檔案是否已經有現有的元數據。

使用者檔案沒有元資料(預設值)

在預設案例中,自動掛接 Windows 磁碟驅動器時,我們會指定任何檔案的使用者識別碼 (UID) 設定為 WSL 使用者的使用者識別碼,而群組識別碼 (GID) 會設定為 WSL 使用者的主要群組識別符。

用戶檔案具有元數據

元數據中指定的UID和 GID 會套用為檔案的用戶擁有者和群組擁有者。

使用 從 Windows 存取 Linux 檔案 \\wsl$

透過 \\wsl$ 存取 Linux 檔案將會使用 WSL 散發套件的預設使用者。 因此,任何存取 Linux 檔案的 Windows 應用程式都會擁有與預設使用者相同的許可權。

建立新檔案

從 Windows 建立 WSL 散發套件內的新檔案時,會套用預設的 umask。 默認的 umask 是 022,或者換句話說,它允許群組和其他群組的寫入許可權以外的所有許可權。

從 Linux 存取 Linux 根文件系統中的檔案

在 Linux 根文件系統中建立、修改或存取的任何檔案都遵循標準 Linux 慣例,例如將 umask 套用至新建立的檔案。

配置檔案許可權

您可以使用 wsl.conf 中的掛接選項,在 Windows 磁碟驅動器內設定檔案許可權。 掛接選項可讓您設定 umaskdmaskfmask 許可權遮罩。 umask會套用至所有檔案、dmask只會套用至目錄,而 fmask 只會套用至檔案。 套用至檔案時,這些許可權遮罩會透過邏輯 OR 作業來放置,例如:如果您有 umask 的值 023fmask 的值 022 ,則產生的檔案許可權遮罩會是 023

深入瞭解: 使用 wsl.conf 的每個散發組態選項