Posso ignorare il mio umask usando gli ACL per rendere leggibili tutti i file creati in un determinato mondo di directory?


11

Supponiamo che la mia umask sia 0077.

Ho una directory, a foocui voglio applicare autorizzazioni speciali. Tutti i file che creo foodovrebbero essere leggibili in tutto il mondo e tutte le directory dovrebbero essere leggibili ed eseguibili in tutto il mondo.

Attualmente, se creo un file, sarà 0600 e una directory sarà 0700:

$ cd foo/
$ touch file
$ mkdir directory
$ ls -l
drwx------ 2 nfm nfm 4096 2012-01-12 16:16 directory
-rw------- 1 nfm nfm    0 2012-01-12 16:15 file

Voglio che il file sia 0644 e la directory 0755, indipendentemente dalla mia umask:

drwxr-xr-x 2 nfm nfm 4096 2012-01-12 16:16 directory
-rw-r--r-- 1 nfm nfm    0 2012-01-12 16:15 file

Come posso raggiungere questo obiettivo?


Non hai provato a cercare su Google "umask per directory", vero? Se avessi i permessi, ti farei un voto negativo per questo, perché il terzo colpo è un hack bash per fare esattamente quello che vuoi (concesso, solo per TE, non per altri utenti.)
Brett Dikeman,

3
@BeeDee L'ho visto. Sono interessante in altri modi per farlo, spero di usare gli ACL. Preferirei non controllare / cambiare la mia umask su ogni cd o sovrascrivere le funzioni bash.
stickmangum dal

Risposte:


14

Sì, acl può farlo.

  1. Assicurati che il tuo filesystem sia montato con acl. Per verificare ciò, digitare mount. Potresti vedere 'acl' elencato tra le altre autorizzazioni, ad esempio:

    /dev/sda1 on / type ext4 (rw,errors=remount-ro,acl)
    

    Se non è montato con acl, apri / etc / fstab e aggiungi 'acl' all'elenco di opzioni:

    # /etc/fstab: static file system information.
    #
    # <file system> <mount point>   <type>   <options>       <dump>  <pass>
    /dev/sda1       /          ext3     noatime,errors=remount-ro,acl 0       1
    

    Ora ricollega il filesystem in esecuzione con le nuove opzioni:

    mount -v -o remount /
    
  2. Installa le utility acl. Su ubuntu / debian, questo è:

    sudo apt-get install acl
    
  3. I tuoi nuovi amici sono setfacle getfacl. Utilizzare setfaclper modificare l'acl predefinito per una directory:

    setfacl -d -m o:r foo
    

    -dimposta il valore predefinito, -mmodifica acl e o:rconcede "altro" il diritto alla lettura. L'impostazione di default su una directory equivale all'incirca all'impostazione di setgid su una directory, ma invece di file appena creati che ereditano il gruppo, ereditano acl. Insieme, setgid e acl possono essere potenti, perché è possibile concedere autorizzazioni predefinite a un gruppo e ottenere i file appena creati per appartenere a quel gruppo, per un umask per directory efficace basato su gruppo.

  4. Controlla il tuo lavoro: ls -lora dovrebbe mostrare un "+" in più che indica la presenza di acl oltre alle autorizzazioni standard per i file.

    % ls -la foo/
    drwxr--r--+
    

    Puoi ottenere informazioni dettagliate sull'acl usando getfacl.

    % getfacl foo
    # file: foo
    # owner: you
    # group: you
    user::rwx
    group::r--
    other::r--
    default:user::rwx
    default:group::---
    default:other::r--
    

1
Questo non sembra funzionare per me. setfacle getfaclstanno restituendo l'output previsto, ma solo le directory (non i file) all'interno della directory padre ereditano acl, e anche allora la mia umask ha la precedenza sul valore predefinito (se non sono leggibili dal mondo, default:other::r--non consente a un altro utente accedervi). Ho perso qualcosa di ovvio?
stickmangum dal

Una cosa che ho trovato (forse questo è il problema): il facl sembra usare il primo di (utente, gruppo, altro) a cui l'utente corrente corrisponde. Cioè, se appartieni al gruppo per il file, verrà elaborato l'acl per il gruppo, non l'acl per l'altro. L'acl dovrebbe comunque essere ereditato se hai applicato la directory con -d, però ....
user67641

Hm, ho appena provato di nuovo e tutto ha funzionato bene. Scusa, non sono sicuro di cosa ho fatto di sbagliato la prima volta! Grazie :)
stickmangum dal

2

Puoi anche forzare un umask per la directory impostando la maschera ACL-proprietà in questo modo:

setfacl -d -m mask:07 .

-4

Basta installare OnDir e configurarlo correttamente in base alle proprie esigenze. Ho risposto a un problema simile che si trova qui .


La domanda non menziona nulla sull'attraversamento delle directory con un terminale, motivo per cui è OnDir.
Yarin,
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.