2010-06-12 04:06:50 +0000 2010-06-12 04:06:50 +0000
86
86

Come fare in modo che i permessi dei nuovi file ereditino dalla directory madre?

Ho una directory chiamata data. Poi sto eseguendo uno script sotto l'id utente ‘robot’. robot scrive nella directory data e aggiorna i file all'interno. L'idea è che data sia aperto sia per me che per il robot per aggiornare.

Quindi ho impostato il permesso e il gruppo proprietario come questo

drwxrwxr-x 2 me robot-grp 4096 Jun 11 20:50 data

dove sia io che il robot apparteniamo al ‘robot-grp’. Cambio il permesso e il gruppo proprietario in modo ricorsivo come la directory madre.

Carico regolarmente nuovi file nella directory data usando rsync. Sfortunatamente, i nuovi file caricati non ereditano il permesso della directory madre come spero. Invece appare così

-rw-r--r-- 1 me users 6 Jun 11 20:50 new-file.txt

Quando il robot cerca di aggiornare new-file.txt, fallisce a causa della mancanza di permessi per i file.

Non sono sicuro che impostare umask aiuti. In ogni caso il nuovo file non lo segue davvero.

$ umask -S
u=rwx,g=rx,o=rx

Sono spesso confuso dai permessi dei file Unix. Ho almeno un piano giusto? Sto usando Debian Lenny.

Risposte (4)

53
53
53
2010-06-13 02:10:58 +0000

Non volete cambiare la umask di default del vostro sistema, è un rischio per la sicurezza. L'opzione sticky bit funzionerà fino ad un certo punto, ma usare le ACL è il modo migliore di procedere. Questo è più facile di quanto si pensi. Il problema con le ACL di base è che non sono ricorsive per default. Se si imposta un ACL su una directory, solo i file all'interno di quella directory ereditano l'ACL. Se si crea una sottodirectory, questa non riceve l'ACL dei genitori, a meno che l'ACL non sia impostata in modo ricorsivo.

Per prima cosa, assicurati che le ACL siano abilitate per il volume in cui si trova la directory. Se hai tune2fs, puoi eseguire quanto segue:

# tune2fs -l /dev/sda1 | grep acl
Default mount options: user_xattr acl

Se non hai tune2fs, allora esamina fstabs:

# cat /etc/fstab 
/dev/system/root / ext3 defaults 1 1
/dev/system/home /home ext3 defaults 1 2
/dev/storage/data /data ext3 defaults 1 2
LABEL=/boot /boot ext3 defaults 1 2

La quarta colonna che dice “defaults” significa che sul mio sistema (CentOS 5.5), le ACL sono attive. In caso di dubbio, lasciatele come predefinite. Se cercate di impostare l'ACL e vi da errore, tornate indietro e aggiungete l'opzione acl a /etc/fstab subito dopo defaults: defaults,acl.

Da quello che ho capito, volete che tutti nel gruppo utenti abbiano accesso in scrittura alla directory dei dati. Questo si ottiene con quanto segue:

setfacl -Rm g:users:rwX,d:g:users:rwX data/
32
32
32
2010-06-12 04:13:24 +0000

Marcare una directory setgid (g+s) farà sì che i nuovi file ereditino la proprietà del gruppo della directory, ma l'opzione -g di rsync tenterà di sovrascrivere questo.

4
4
4
2015-09-03 15:36:56 +0000

Altre risposte si applicano in un caso generale, ma dato che menzioni che rsync è una fonte del problema, potresti aver bisogno di sintonizzare la sua invocazione.

Per cominciare, il popolare flag -a fa sì che rsync copi i permessi; usa -r invece di -a o aggiungi -no-p (per non sincronizzare i permessi) e -no-g (per non sincronizzare i gruppi). Anche rsync supporta il flag --chmod per alterare i permessi sui file appena creati.

3
3
3
2010-06-12 04:43:45 +0000

La tua umask è sbagliata per i permessi che vuoi. Vuoi una umask di 002. Attualmente hai una umask di 022. Inoltre, il commento sul rendere la directory setgid è corretto, ma non sono sicuro che la proprietà del gruppo di file sia qualcosa che vuoi cambiare o no.

I permessi dei file Unix sono in realtà un modello molto semplice. Io stesso trovo le ACL completamente confuse :-)