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.

    
posta Jeremy Hicks 16.11.2011 - 15:39
fonte

5 risposte

31

In primo luogo, un po 'di background per spiegare cosa sta succedendo: i file in OS X possono avere due diversi tipi di impostazioni di autorizzazione applicate a loro: 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; devi creare un ACE nella cartella che specifica il gruppo desiderato, i tipi di accesso che desideri 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 da qualche altra parte e quindi spostati nella cartella. Puoi applicarlo ai contenuti esistenti usando -R ( chmod -R +a ... ). Non conosco un modo (eccetto gli strumenti di amministrazione del server di Apple) per forzare l'ereditarietà degli elementi spostati nella cartella.

    
risposta data 16.11.2011 - 17:32
fonte
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

L'opzione -R sarà (come notato qui ):

Recurse: Change the mode of file hierarchies rooted in the files instead of just the files themselves.

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

Puoi anche consultare questo post Apple.SE , che copre una situazione in qualche modo simile alla tua (eccetto che riguarda una directory condivisa), che ha richiesto un sudo virato in primo piano.

    
risposta data 16.11.2011 - 18:22
fonte
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 policy.

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

    
risposta data 17.10.2012 - 17:51
fonte
1

chmod + ai, i = eredita le regole acl

    
risposta data 14.07.2017 - 13:24
fonte
0

Su un Mac prova a utilizzare PathFinder , semplifica l'impostazione di ACL e POSIX. Se stai ospitando WordPress su un Mac Server dovrai anche impostare define('FS_METHOD', 'direct'); nel file 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.

    
risposta data 04.10.2016 - 18:08
fonte

Leggi altre domande sui tag