risposta-alla-domanda-sullo-sviluppo-web-bd.com

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

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

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

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

Aggiornamento : I think può essere fatto con POSIX ACLs , usando l'ACL predefinito funzionalità, ma al momento è un po 'fuori di testa. Se qualcuno può spiegare come usare le ACL predefinite, probabilmente risponderebbe bene a questa domanda.

96
David Dean

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

chmod g+rwxs dirname

Ciò garantirà che i file creati nella directory appartengano al gruppo. Dovresti quindi assicurarti che tutti funzionino 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 di default.

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

73
Norman Ramsey

Ecco come farlo utilizzando ACL predefiniti, almeno in Linux.

Innanzitutto, potrebbe devi abilitare il supporto ACL sul tuo filesystem. Se si utilizza ext4, è già abilitato. Altri filesystem (ad esempio ext3) devono essere montati con l'opzione acl. In tal caso, aggiungi l'opzione al tuo /etc/fstab. Ad esempio, se la directory si trova sul 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 in /shared/directory ora dovrebbe ottenere le autorizzazioni desiderate. Naturalmente, 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 utility come cp, tar e rsync proveranno a preservare le autorizzazioni dei file di origine che maschereranno il tuo ACL predefinito se il file di origine non era gruppo-scrivibile.

Spero che sia di aiuto!

57
pelle

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

umask 022

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

4
user3270784

È brutto, ma puoi usare il comando setfacl per ottenere esattamente quello che vuoi.

Su una macchina Solaris, ho un file che contiene gli acls per utenti e gruppi. Sfortunatamente, devi elencare tutti gli utenti (almeno non potrei trovare un modo per farlo funzionare diversamente):

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 nomi utente reali anziché user_X.

Ora puoi impostare quegli acl nella tua directory emettendo il seguente comando:

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