Impostazione delle autorizzazioni predefinite per i file e le sottodirectory appena creati in una directory in Linux?


99

Ho un sacco di script e applicazioni di lunga durata che memorizzano i risultati di output in una directory condivisa tra pochi utenti. Vorrei un modo per assicurarmi che ogni file e directory creati in questa directory condivisa dispongano automaticamente delle u=rwxg=rwxo=rautorizzazioni.

So che potrei usare umask 006in testa i miei vari script, ma non mi piace questo approccio poiché molti utenti scrivono i propri script e potrebbero dimenticare di impostare l'umask da soli.

Voglio solo che il filesystem imposti file e directory appena creati con una certa autorizzazione se si trova in una determinata cartella. È possibile?

Aggiornamento : penso che possa essere fatto con POSIX ACL , utilizzando la funzionalità ACL predefinita, ma al momento è tutto un po 'sopra la mia testa. Se qualcuno può spiegare come utilizzare gli ACL predefiniti, probabilmente risponderebbe bene a questa domanda.


1
Gli ACL POSIX sono carini, tuttavia un buon 60% delle macchine che incontri non li avrà attivati ​​per determinati file system, a seconda della distribuzione. Ecco un'introduzione ed un esempio molto buoni: suse.de/~agruen/acl/linux-acls/online
Tim Post

1
Intendi lo stesso documento che ho collegato :) Non ho ancora avuto modifiche per leggerlo, ma grazie per la testa sul problema di disponibilità.
David Dean

1
Il collegamento nel commento di Tim Post sembra essere morto, ma grazie a Internet Archive, ho potuto visualizzarlo e verificare che vanemery.com/Linux/ACL/POSIX_ACL_on_Linux.html contenga lo stesso identico documento. Modificherò la domanda per aggiornare il collegamento.
rmunn

Risposte:


78

Per ottenere la giusta proprietà, è possibile impostare il bit setuid di gruppo nella directory con

chmod g+rwxs dirname

Ciò garantirà che i file creati nella directory siano di proprietà del gruppo. Dovresti quindi assicurarti che tutti girino con umask 002 o 007 o qualcosa del genere --- questo è il motivo per cui Debian e molti altri sistemi Linux sono configurati con gruppi per utente per impostazione predefinita.

Non conosco un modo per forzare i permessi che desideri se l'umask dell'utente è troppo forte.


23
Questo in realtà non fornisce una soluzione: sta chiedendo autorizzazioni non proprietà e l'unico modo per farlo è con gli ACL
Yarin

3
"... assicurati che tutti corrano con umask 002 o 007 o qualcosa del genere" - è un po 'troppo difficile .... Come si fa a fare tutto questo con Postfix, Dovecot, Clam e Spam Assassin?
jww

2
Cosa fa la +sparte? Grazie.
tommy.carstensen

1
In questo caso significa impostare l'ID del gruppo. Vale a dire che usiamo g + s per impostare il bit SGID. Dico "in questo caso" perché + s è stato combinato con g per gruppo. + s può essere utilizzato anche per impostare il bit SUID (setuid).
Bastion

57

Ecco come farlo utilizzando gli ACL predefiniti, almeno sotto Linux.

Innanzitutto, potresti dover abilitare il supporto ACL sul tuo filesystem. Se stai usando ext4, allora è già abilitato. Altri filesystem (ad esempio ext3) devono essere montati con l' aclopzione. In tal caso, aggiungi l'opzione al tuo file /etc/fstab. Ad esempio, se la directory si trova sul tuo filesystem di root:

/dev/mapper/qz-root   /    ext3    errors=remount-ro,acl   0  1

Quindi rimontalo:

mount -oremount /

Ora, usa il seguente comando per impostare l'ACL predefinito:

setfacl -dm u::rwx,g::rwx,o::r /shared/directory

Tutti i nuovi file /shared/directorydovrebbero ora ottenere le autorizzazioni desiderate. Ovviamente dipende anche dall'applicazione che crea il file. Ad esempio, la maggior parte dei file non sarà eseguibile da nessuno dall'inizio (a seconda dell'argomento mode della chiamata open (2) o creat (2)), proprio come quando si usa umask. Alcune utilità come cp, tare rsynccercheranno di preservare i permessi dei file di origine che maschereranno il tuo ACL predefinito se il file di origine non era scrivibile dal gruppo.

Spero che questo ti aiuti!


Sembra che questo richieda ancora un corretto umaskper tutti gli utenti. = / unix.stackexchange.com/questions/71743/…
anatoly techtonik

1
@techtonik Come ho scritto, dipende dall'applicazione che crea il file. Ad esempio, se lo usi cp, proverà a copiare i permessi del file sorgente. Non umaskaiuta nemmeno durante l'utilizzo cp. Ho visto lo stesso problema con tar. Vedi questa domanda .
pelle

@techtonik ho aggiunto una frase su questo nella mia risposta ora.
pelle

1
sì, sembra che il problema fosse nell'applicazione impostando con forza i diritti su 644 quando la mia configurazione corretta di ACL e POSIX era tutta per 664. Sarebbe bello chiarire questo meccanismo di fallback per le persone che risolvono il problema. Molti non lo sanno nemmeno umask.
anatoly techtonik

Voglio dire, ho perso un po 'di tempo cercando di vedere se non ho i flag di montaggio impostati correttamente (e su ext4 non possono essere impostati, perché sembra che funzionino automaticamente). Non ci sono informazioni su come verificare se setfacl works correctly- presumo che dovrebbe fallire, ma non ne sono sicuro, perché la risposta manca quel punto.
anatoly techtonik

4

È brutto, ma puoi usare il comando setfacl per ottenere esattamente ciò che desideri.

Su una macchina Solaris, ho un file che contiene gli ACL per utenti e gruppi. Sfortunatamente, devi elencare tutti gli utenti (almeno non sono riuscito a trovare un modo per farlo funzionare altrimenti):

user::rwx
user:user_a:rwx
user:user_b:rwx
...
group::rwx
mask:rwx
other:r-x
default:user:user_a:rwx
default:user:user_b:rwx
....
default:group::rwx
default:user::rwx
default:mask:rwx
default:other:r-x

Assegna un nome al file acl.lst e inserisci i tuoi veri nomi utente invece di user_X.

Ora puoi impostare quegli ACL sulla tua directory immettendo il seguente comando:

setfacl -f acl.lst /your/dir/here

puoi lasciare l'elenco degli utenti se sono tutti membri dello stesso gruppo e utilizzare solo i permessi del gruppo?
David Dean

Mi stavo facendo la stessa domanda. È passato un po 'di tempo da quando l'ho impostato. Ma ogni volta che ricevo un nuovo utente (nello stesso gruppo degli altri), dimentico di aggiornare l'elenco e ricevo reclami per il nuovo utente che non è in grado di scrivere / eliminare file. Quindi la risposta è: no, non puoi.
innaM

4

nel tuo script di shell (o .bashrc) puoi usare qualcosa come:

umask 022

umask è un comando che determina le impostazioni di una maschera che controlla come vengono impostati i permessi dei file per i file appena creati.


1
Questo non è corretto perché umask limita i permessi e non può aggiungere permessi
ACV

@ACV puoi elaborare? Questo funziona per me, i file appena creati ora consentono ai membri del gruppo di avere autorizzazioni rw quando lo faccio umask 002nel mio .bashrc.
Arthur Dent

3
@ArthurDent umask 002limita l'accesso ad altri, lasciando il gruppo invariato. Ricorda, è ugo- questo è il gruppo di utenti altri. Ricorda anche che umask fondamentalmente significa sottrarre dai valori predefiniti. Per i file: 666 - 002significherebbe 664 che significa che il gruppo non è interessato.
ACV
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.