Come posso usare chmod su un Mac per fare in modo che i nuovi file ereditino le autorizzazioni della directory principale?


21

Sono su Mac. Voglio fare in modo che tutti i nuovi file / cartelle che vengono creati all'interno di una cartella specifica abbiano le stesse autorizzazioni (non di gruppo, che sono già state prese in considerazione) come quelle della directory superiore. Su Linux, normalmente userei setfacl, ma sembra che chmod su Mac potrebbe essere in grado di fare quello che sto cercando. Ho letto la pagina man di chmod ma non riesco ancora a capire come formattare correttamente il comando per ottenere quello che voglio.


Voglio che i nuovi file / cartelle siano leggibili e scrivibili in gruppo.

Risposte:


31

Per prima cosa, un po 'di background per spiegare cosa sta succedendo: i file in OS X possono avere due tipi di impostazioni di autorizzazione molto diversi: POSIX e ACL.

I file sempre (beh, quasi sempre) hanno le autorizzazioni POSIX applicate, costituite da un proprietario, un gruppo e altri (con una combinazione di lettura, scrittura ed esecuzione per ognuno di questi). Non c'è modo di controllare l'ereditarietà delle autorizzazioni POSIX: i nuovi elementi sono sempre di proprietà di qualunque utente li abbia creati, l'assegnazione del gruppo viene ereditata dalla cartella in cui si trovano e l'accesso è determinato dalla umask (che è praticamente sempre: il proprietario ha accesso completo, gruppo e altri solo lettura + esecuzione per cartelle). Quindi le autorizzazioni POSIX non funzioneranno per quello che stai cercando di fare.

I file possono anche avere un elenco di controllo di accesso (ACL) applicato. Questo è un elenco di voci di controllo di accesso (ACE), ognuna delle quali si applica a un utente o un gruppo, specifica i tipi di accesso (in grande dettaglio), se sono autorizzati o negati e se l'ACE deve essere copiato anche in elementi creati all'interno della cartella. Quest'ultima parte è la parte che rende questo utile per te; è necessario creare un ACE nella cartella che specifica il gruppo desiderato, i tipi di accesso che si desidera e l'ereditarietà completa.

chmod su OS X può manipolare gli ACE con le opzioni di autorizzazione + a, -a, ecc. Se capisco cosa vuoi, lo userai (con il nome del tuo gruppo e il percorso della cartella sostituito) per creare l'ACE:

chmod +a "group:examplegroup allow list,add_file,search,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit" /path/to/folder

Si noti che l'ereditarietà non è "live", vale a dire che non si applica agli elementi creati prima dell'assegnazione dell'ACE e non si applica agli elementi creati altrove e quindi spostati nella cartella. Puoi applicarlo ai contenuti esistenti usando -R ( chmod -R +a ... ). Non conosco un modo (ad eccezione degli strumenti di amministrazione del server di Apple) per forzare l'ereditarietà degli elementi spostati nella cartella.


Grazie per l'ottima spiegazione. L'ho appena provato e comunque ha appena creato un nuovo file con l'utente di lettura / scrittura, tutti gli altri hanno letto le autorizzazioni. La cartella genitore (esterna) è impostata su 775 permessi con il mio utente (jhicks) come proprietario e _www come gruppo. Mi sono aggiunto al gruppo _www. drwxrwxr-x + 13 jhicks _www 442B Nov 16 09:47 all'aperto Ho eseguito il comando come segue: chmod + a "gruppo: _www consenti lista, add_file, cerca, add_subdirectory, delete_child, readattr, writeattr, readextattr, writeextattr, readsecurity, file_inherit, directory_inherit "all'esterno
Jeremy Hicks

ls -l mostra solo i permessi POSIX (anche se il "+" dopo le autorizzazioni indica che è presente un ACL). Uso ls -le per mostrare ACL pure.
Gordon Davisson

Se il nome del gruppo ha uno spazio al suo interno, puoi usare: come delimitatore. Ad esempio, "gruppo: il mio gruppo con uno spazio: consenti"
Doug Richardson

Seguito il chmod +a ... comando, poi ho creato un abc.txt nella cartella. Passato a un altro utente e modificato con TextEdit, il file è indicato come Bloccato e non è modificabile.
ohho

Ho giocato un po 'con questo, penso che tu costringa l'ereditarietà con + ai
Robin

4

Prova ad aggiungere -R al comando di @ gordon, in questo modo:

chmod -R +a "group:_www allow list,add_file,search,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit" outdoors

Il -R l'opzione sarà (come notato Qui ):

Recurse: modifica la modalità delle gerarchie di file radicate nei file   invece dei soli file.

Cambiare le gerarchie dei file sembra essere quello che stai cercando (per nuovi file, directory, ecc.).

Puoi anche dare un'occhiata a questo Post Apple.SE , che copre una situazione in qualche modo simile alla tua (eccetto che riguarda una directory condivisa), che richiedeva a sudo attaccato sul davanti.


4

Questo (-R) non è ciò che la maggior parte delle persone cerca di fare; la maggior parte delle volte preferirebbe cambiare l'ACL nella directory più in alto e fare qualcosa di magico per forzare tutti gli oggetti contenuti ad ereditare i flag in base all'ACL che hanno specificato nella radice di tale sottoalbero. Questo è molto più elegante in quanto gli ACL sugli oggetti selezioneranno questi ACE ereditati in base alla politica.

E sì, ho dovuto scrivere uno script python per fare questo, non ho trovato nulla di appropriato neanche.


2
Ti interessa condividere (ad es. Su a nocciolo ? Se non ti dispiace, penso che sia stato un bel gesto.
myhd


0

Su un Mac prova a usare PathFinder , semplifica l'impostazione di ACL e POSIX. Se stai ospitando WordPress su un Mac Server devi anche impostare define('FS_METHOD', 'direct'); nel wp-config.php in modo che l'installazione di plug-in e l'aggiornamento non ti chiedano i dettagli FTP.

Quindi in pratica mantieni le autorizzazioni POSIX predefinite e aggiungi l'utente _www (non il gruppo) all'ACL, quindi fai clic su Propaga autorizzazione nella finestra ACL.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.