Come mantenere la proprietà di un file dopo la modifica?


11

La mia domanda è simile a questa , tranne per il fatto che si chiede dei file appena creati.

Nella mia casella Unix, gli utenti Alice , Bob e Tomcat fanno parte del gruppo Tomcat .

I file di configurazione del server Tomcat sono di proprietà dell'utente tomcat e del gruppo tomcat.

Ho modificato le autorizzazioni di questo file in leggibile e scrivibile per gruppo in modo che Alice e Bob possano modificare i file.

Tuttavia, ho notato che dopo la modifica, il file diventa di proprietà dell'ultimo utente che lo ha modificato.

D: È possibile modificare le autorizzazioni in modo che Alice e Bob possano modificare i file, senza cambiarne la proprietà?

In che modo la modifica di un file cambia comunque la sua proprietà?


Il tuo obiettivo è garantire che Tomcat continui a essere il proprietario dei file o è garantire che: il server Tomcat continui a funzionare; alice e bob possono entrambi continuare a modificare i file e quella sicurezza è mantenuta?
ctrl-alt-delor

1
Suppongo che il servizio Tomcat sia eseguito sotto l'utente "Tomcat", in base al modo in cui la tua domanda è formulata. Questo probabilmente non è desiderabile poiché un exploit di tomcat potrebbe comportare la riscrittura della propria configurazione per esporre bit del server che non si intende. Dovresti considerare l'utilizzo di un gruppo diverso che può scrivere la configurazione, mentre il gruppo Tomcat può leggere, ma non scrivere.
Ed Neville,

Risposte:


17

L'utente risultante del file dipende da ciò che fa l'editor. Alcuni editor salvano il file troncandolo e scrivendo sul file (senza cambiare l'inode). E alcuni editor rinominano il file con un altro nome (come fileal file~solito) e creano un nuovo file con il nome dell'originale. La modifica del file originale mantiene lo stesso proprietario, la creazione di uno nuovo rende il nuovo file di proprietà dell'UID del processo di creazione.

Degli editor che ho su Debian, nanoe joeanche nvie vim(la versione minima in vim-tiny) sembrano sovrascrivere sul posto. Anche se suppongo vimche Emacs sia probabilmente configurabile in quello che fanno.


Stephen commenta gli aggiornamenti atomici . Il problema con la ricostruzione sul posto è che il file viene troncato a lunghezza zero, quindi scritto. Un altro processo potrebbe aprirlo e leggerlo prima che tutti i dati vengano scritti.

Un aggiornamento atomica sarebbe stato fatto con la creazione della nuova versione, come ad esempio file.new, rinominando file.newa file. Lasciando un file di backup, si potrebbe creare file.new, collegamento filea file~e quindi rinominare file.newa file. La ridenominazione è atomica in quanto qualsiasi processo che accede al file per nome ottiene la vecchia o la nuova versione, non nulla in mezzo. Ovviamente qualsiasi handle di file aperto rimanderà al file che è stato tenuto aperto, offrendo una visione coerente del file.


Dal punto di vista delle autorizzazioni dei file , il salvataggio sullo stesso file (inode) richiede l'accesso in scrittura al file stesso (ma non alla directory), rinominandolo e creandone uno nuovo richiede l'accesso in scrittura alla directory (ma non al file originale ).

(Rinominare e ricreare è anche un modo per inciso di correggere i permessi dei file nel caso in cui qualcuno crei o modifichi un file in una directory condivisa, ma si dimentica di dare accesso in scrittura al gruppo.)


6
La creazione e la ridenominazione è anche l'unico modo per garantire che il file venga aggiornato atomicamente utilizzando la semantica POSIX.
Stephen Kitt,

bella spiegazione.
Mian Asbat Ahmad,

13

Come spiegato da ilkkachu , se l'editor in uso crea un nuovo file durante il salvataggio, non c'è modo di controllare il proprietario del file. Ciò che probabilmente ti interessa davvero è garantire che i file rimangano leggibili da Tomcat; puoi farlo assicurandoti che il loro gruppo sia tomcat(e che siano leggibili dal loro gruppo), e che possa essere applicato su nuovi file impostando il setgidbit nella directory principale :

chmod g+s .

Pertanto, se bobmodifica un file utilizzando un editor che ricrea il file, il file modificato finirà per essere di proprietà bob:tomcate Tomcat sarà ancora in grado di leggerlo ( umaskalmeno con un tipico ). Finché la directory principale è scrivibile dal tomcatgruppo, qualsiasi utente in quel gruppo sarà in grado di modificare i file nella directory (anche solo ricreandoli).

Consiglierei comunque cercando di cambiare i tuoi processi; probabilmente non dovresti modificare i file direttamente nella posizione da cui sono stati letti da Tomcat. Idealmente, i file verrebbero mantenuti in un VCS di qualche tipo e distribuiti da un processo separato (possibilmente automatizzato). In questo modo eviti tutti questi problemi di proprietà ...


bella soluzione !!
Mian Asbat Ahmad,
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.