Come fare in modo che i nuovi file ereditino la directory principale?


85

Ho una directory chiamata data. Quindi eseguo uno script con l'id utente "robot". il robot scrive nella datadirectory e aggiorna i file all'interno. L'idea è dataaperta sia per me che per il robot da aggiornare.

Quindi ho impostato l'autorizzazione e il gruppo proprietario in questo modo

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

dove sia io che robot apparteniamo al "robot-grp". Cambio l'autorizzazione e il gruppo di proprietari ricorsivamente come la directory principale.

Carico regolarmente nuovi file nella datadirectory utilizzando rsync. Sfortunatamente, i nuovi file caricati non ereditano l'autorizzazione della directory principale come spero. Invece sembra così

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

Quando il robot tenta di aggiornare new-file.txt, non riesce a causa della mancanza dell'autorizzazione del file.

Non sono sicuro che l'impostazione di umask sia di aiuto. In ogni caso i nuovi file non lo seguono davvero.

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

Sono spesso confuso dal permesso del file Unix. Ho anche un piano giusto? Sto usando Debian Lenny.

Risposte:


53

Non vuoi cambiare la umask di default del tuo sistema, questo è un rischio per la sicurezza. L'opzione sticky bit funzionerà in una certa misura, ma usare gli ACL è il modo migliore di procedere. Questo è più facile di quanto pensi. Il problema con gli ACL di base è che non sono ricorsivi per impostazione predefinita. Se si imposta un ACL su una directory, solo i file all'interno di quella directory ereditano l'ACL. Se si crea una sottodirectory, non ottiene l'ACL principale a meno che l'ACL non sia impostato per la ricorrenza.

Innanzitutto, assicurati che gli ACL siano abilitati per il volume in cui si trova la directory. In tal caso tune2fs, è possibile eseguire le seguenti operazioni:

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

Se non lo hai tune2fs, 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 "valori predefiniti" significa sul mio sistema (CentOS 5.5), gli ACL sono attivi. In caso di dubbio, lasciarlo come impostazione predefinita. Se si tenta di impostare l'ACL e esso errori fuori, tornare indietro e aggiungere l'opzione acl al file / etc / fstab subito dopo le impostazioni predefinite: defaults,acl.

Da quello che ho capito, vuoi che tutti nel gruppo utenti abbiano accesso in scrittura alla directory dei dati. Ciò è ottenuto da quanto segue:

setfacl -Rm g:users:rwX,d:g:users:rwX data/

Ho usato questo comando ma non ha risolto il mio problema, come posso annullare questo comando per favore?
Itai Ganot,

Ha fatto il trucco su Ubuntu con sudo setfacl -Rm g:users:rwX,d:g:users:rwX /var/www/logs_or_something. Si è verificato un problema con i test PHPUnit. Dopo aver creato i file di registro durante l'esecuzione dei test, l'utente di Apache www-datanon è stato in grado di scriverli / leggerli.
s3m3n,

2
@Itai Ganot - secondo la setfaclpagina man , -bo --remove-allrimuove gli ACL estesi.
JWW

Quindi, aggiungeresti setfacl -Rm g:users:rwX,d:g:users:rwX data/alla fine di /etc/fstab?
425nesp

@ piña no. l'unica modifica apportata a / etc / fstab è di cambiare defaultsa defaults,acl. setfaclè un comando che dovresti eseguire dal terminale. data/dovrebbe essere sostituito dal percorso della directory che si desidera modificare.
Segfault,

32

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


11
Il bit setgid fa sì che i file creati ereditino il gruppo / if / la persona che crea il nuovo file è un membro di quel gruppo; se l'utente che crea è il proprietario ma non è un membro del gruppo o la directory è scrivibile dal mondo, il bit setgid non farà nulla. E l'umask per tutti gli utenti che creano file deve ancora essere impostato per consentire l'accesso al gruppo appropriato.
dannysauer,

1
@dannysauer "se l'utente che crea è il proprietario ma non un membro del gruppo ... il bit setgid non farà nulla" - grazie. Ha senso ora - ma senza feedback da rsync, mi chiedevo perché non funzionasse.
user12345

4

Altre risposte si applicano in un caso generale, ma poiché dici che rsync è una fonte del problema, potresti dover solo regolare la sua invocazione.

Per cominciare, il popolare -aflag concede le autorizzazioni di copia rsync; use -risead of -aor add -no-p(per nessuna sincronizzazione di autorizzazioni) e -no-g(per nessuna sincronizzazione di gruppo). Inoltre rsync supporta --chmodflag per modificare le autorizzazioni sui file appena creati.


3

La tua umask è sbagliata per le autorizzazioni che desideri. Vuoi un umask di 002. Attualmente hai un umask di 022. Inoltre, il commento su come impostare la directory setgid è corretto, ma non sono sicuro che la proprietà del gruppo di file sia qualcosa che vuoi cambiare o meno.

Le autorizzazioni per i file Unix sono in realtà un modello molto semplice. Trovo che gli ACL mi confondano completamente. :-)


4
"Le autorizzazioni per i file Unix sono in realtà un modello molto semplice. Trovo che gli ACL mi confondano completamente." - Sento il contrario (ma comunque +1). Gli ACL (e Consenti / Nega ACE) sono semplici e le autorizzazioni Unix non hanno senso. Ma questo proviene da un ragazzo che soffre di un'installazione Postfix / Dovecot / Clam / SpamAssassin.
dal
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.