Autorizzazioni dei file per WSL

Questa pagina descrive in che modo le autorizzazioni dei file di Linux vengono interpretate nel sottosistema Windows per Linux, soprattutto quando si accede alle risorse all'interno di Windows sul file system NT. In questa documentazione si presuppone una conoscenza di base della struttura delle autorizzazioni del file system di Linux e del comando umask.

Quando accedi ai file di Windows da WSL, le autorizzazioni dei file vengono calcolate dalle autorizzazioni di Windows o lette dai metadati aggiunti al file da WSL. I metadati non sono abilitati per impostazione predefinita.

Metadati di WSL nei file di Windows

Quando i metadati sono abilitati come opzione di montaggio in WSL, puoi aggiungere e interpretare attributi estesi nei file NT di Windows per fornire le autorizzazioni del file system di Linux.

WSL può aggiungere quattro attributi estesi NTFS:

Nome attributo Description
$LXUID ID del proprietario dell'utente
$LXGID ID del proprietario del gruppo
$LXMOD Modalità file (tipo e ottali dell'autorizzazione del file system, ad esempio 0777)
$LXDEV Dispositivo, se è un file dispositivo

Inoltre, qualsiasi file che non sia un file o una directory normale (ad esempio, collegamenti simbolici, FIFO, dispositivi a blocchi, socket Unix e dispositivi a caratteri) dispone anche di un reparse point NTFS. Ciò consente di determinare il tipo di file in una directory specifica molto più rapidamente, senza dover eseguire query sugli attributi estesi.

Scenari di accesso ai file

Di seguito è riportata una descrizione del modo in cui vengono determinate le autorizzazioni quando si accede ai file in modi diversi usando il sottosistema Windows per Linux.

Accesso ai file nel file system dell'unità Windows (DrvFS) da Linux

Questi scenari si verificano quando si accede ai file di Windows da WSL, molto probabilmente tramite /mnt/c.

Lettura delle autorizzazioni dei file da un file di Windows esistente

Il risultato dipende dall'eventualità che il file disponga già di metadati esistenti.

Il file DrvFS non contiene metadati (impostazione predefinita)

Se al file non sono associati metadati, convertiamo le autorizzazioni valide dell'utente di Windows, in modo da leggere/scrivere/eseguire bit e impostarle sullo stesso valore per utenti, gruppi e altri elementi. Se, ad esempio, l'account utente di Windows dispone dell'accesso in lettura ed esecuzione ma non di accesso in scrittura al file, verrà visualizzato come r-x per utenti, gruppi e altri elementi. Se per il file è impostato l'attributo "Sola lettura" in Windows, l'accesso in scrittura non verrà concesso in Linux.

Il file contiene metadati

Se il file contiene metadati, è sufficiente usare i valori dei metadati anziché convertire le autorizzazioni valide dell'utente di Windows.

Modifica delle autorizzazioni dei file da un file di Windows esistente tramite chmod

Il risultato dipende dall'eventualità che il file disponga già di metadati esistenti.

Il file chmod non contiene metadati (impostazione predefinita)

Chmod avrà un solo effetto, se rimuovi tutti gli attributi di scrittura di un file, verrà impostato l'attributo "Sola lettura" nel file di Windows, poiché si tratta dello stesso comportamento di CIFS (Common Internet file System), ovvero il client SMB (Server Message Block) in Linux.

Il file chmod contiene metadati

Chmod modificherà o aggiungerà metadati a seconda dei metadati già esistenti del file.

Tieni presente che non puoi concederti un accesso maggiore rispetto a quello di Windows, anche se i metadati lo consentirebbero. Ad esempio, puoi impostare i metadati in modo da visualizzare che disponi di autorizzazioni di scrittura per un file usando chmod 777, ma se tenti di accedere a tale file, non potrai ancora scrivervi. Ciò è grazie all'interoperabilità, in quanto tutti i comandi di lettura o scrittura Windows file vengono instradati tramite le Windows utente.

Creazione di un file in DriveFS

Il risultato dipende dall'eventualità che i metadati siano abilitati.

I metadati non sono abilitati (impostazione predefinita)

Le autorizzazioni di Windows del file appena creato saranno le stesse che avrebbe il file se fosse stato creato in Windows senza un descrittore di sicurezza specifico, erediterà le autorizzazioni dell'elemento padre.

I metadati sono abilitati

I bit di autorizzazione del file sono impostati per seguire il comando umask di Linux e il file verrà salvato con i metadati.

Quale utente e gruppo Linux è proprietario del file?

Il risultato dipende dall'eventualità che il file disponga già di metadati esistenti.

Il file utente non contiene metadati (impostazione predefinita)

Nello scenario predefinito, quando si esegue il montaggio automatico delle unità Windows, si specifica che l'ID utente (UID) per qualsiasi file è impostato sull'ID utente dell'utente WSL e l'ID gruppo (GID) è impostato sull'ID gruppo principale dell'utente WSL.

Il file utente contiene metadati

L'ID utente e l'ID gruppo specificati nei metadati vengono applicati come proprietario dell'utente e proprietario del gruppo del file.

Accesso ai file Linux da Windows tramite \\wsl$

L'accesso ai file Linux tramite \\wsl$ userà l'utente predefinito della distribuzione di WSL. Qualsiasi app di Windows che accede ai file Linux avrà quindi le stesse autorizzazioni dell'utente predefinito.

Creazione di un nuovo file

Il valore predefinito di umask viene applicato quando si crea un nuovo file all'interno di una distribuzione di WSL da Windows. Il valore predefinito di umask è 022, consente quindi tutte le autorizzazioni eccetto quelle di scrittura per gruppi e altri elementi.

Accesso ai file nel file system radice di Linux da Linux

Tutti i file creati, modificati o a cui si accede nel file system radice di Linux seguono le convenzioni standard di Linux, ad esempio l'applicazione di umask a un file appena creato.

Configurazione delle autorizzazioni per i file

Puoi ora configurare le autorizzazioni per i file all'interno delle unità Windows usando le opzioni di montaggio in wsl.conf. Le opzioni di montaggio consentono di impostare le maschere delle autorizzazioni umask, dmask e fmask. umask viene applicato a tutti i file, dmask viene applicato solo alle directory e fmask viene applicato solo ai file. Le maschere delle autorizzazioni vengono sottoposte a un'operazione OR logica quando vengono applicate ai file, ad esempio: Se disponi di un valore umask di 023 e di un valore fmask di 022, le maschere delle autorizzazioni risultanti per i file saranno 023.

Altre informazioni: Per distribution configuration options with wsl.conf (Opzioni di configurazione per distribuzione con wsl.conf).