Linux: perdita della proprietà di gruppo dei file


8

Ho un progetto con un numero di file che ho creato in Linux.

E avevo bisogno di autorizzare un altro utente a scrivere su di loro. Così ho creato un gruppo "dev" di cui lui e io siamo membri e abbiamo cambiato la proprietà dei file in questo gruppo.

Un file tipico ora ha queste autorizzazioni:

-rw-rw-r--  1 phil dev   5617 Jul 14 15:45 profile.html

Tuttavia, quando modifico il file profile.html, questo mi ritorna in questo modo e il mio collega perde la possibilità di modificarlo.

-rw-rw-r--  1 phil phil  5617 Jul 14 15:45 profile.html

Come posso evitare che si ripristini in questo modo? Cambiare la proprietà era la cosa sbagliata da fare? O è stato fatto con le opzioni sbagliate? O questo ha a che fare con la mia configurazione dell'editor (emacs)?

Risposte:


17

Nella cartella contenente vorrai cambiare il gruppo in dev e quindi usare mark it set-gid.

chgrp dev <containing-folder>
chmod g+ws <containing-folder>

Il bit set gid crea i file creati in quella cartella per ereditare il gruppo della cartella e per contrassegnare il bit setgid su tutte le nuove cartelle. Ti consigliamo di fare attenzione quando sposti i file nella directory in modo da preservare le loro autorizzazioni esistenti.


solo un rimedio (vedi la mia risposta)
asdmin,


7

Puoi anche montare il filesystem (supponendo ext2 / 3) con l'opzione mount di grpid che lo renderà così ogni volta che crei un nuovo file in una directory, renderà il proprietario del gruppo uguale alla directory principale. Quindi lo faresti in modo che la directory in cui sono presenti questi file appartenga al gruppo 'dev'.

Per rimontarlo se è la partizione di root (esempio):

sudo mount -o remount,grpid,rw,relatime,errors=remount-ro /

Da 'man mount 8':

grpid or bsdgroups / nogrpid or sysvgroups
These options define what group id a newly created file gets.

Quando grpid è impostato, prende l'id del gruppo della directory in cui è stato creato; altrimenti (impostazione predefinita) accetta fsgid del processo corrente, a meno che la directory non abbia impostato il bit setgid, nel qual caso prende il gid dalla directory padre e ottiene anche il bit setgid impostato se è una directory stessa.


Bocconcino molto utile da conoscere +1
Frenchie,

Ciò manterrà anche l'autorizzazione di scrittura del gruppo se si crea o copia un file?
KB

1

Il comportamento predefinito per emacs è creare il file di backup rinominandolo. Dal manuale di emacs:

Emacs può rinominare il file originale in modo che diventi un file di backup, quindi scrivere il buffer che viene salvato in un nuovo file. Dopo questa procedura, tutti gli altri nomi (ad es. Collegamenti reali) del file originale ora fanno riferimento al file di backup. Il nuovo file è di proprietà dell'utente che esegue la modifica e il suo gruppo è l'impostazione predefinita per i nuovi file scritti dall'utente in quella directory. Dall'utente in quella directory.

Esistono diversi modi per cambiarlo.

  • Imposta il gruppo e la parte adesiva, come altri descrivono.
  • Esegui "newgrp dev" prima di modificare il file, in modo che il gruppo predefinito sia dev.

O emacs specifici:

  • Imposta file-precious-flag in emacs, che modifica il comportamento per preservare il gruppo, ma ha altri effetti collaterali.
  • Imposta backup-by-copying-when-mismatch in emacs, che utilizza la copia anziché la ridenominazione quando ciò comporterebbe la modifica del proprietario o del gruppo.

Quindi, aggiungi al tuo .emacs:

(setq backup-by-copying-when-mismatch 't)

La mia preferenza è in realtà 'newgrp dev', in quanto si tratta di un passaggio esplicito dalla modalità "personale" (i file che modifico sono solo miei), alla modalità dev gruppo (i file che ora modifico sono condivisi tra il gruppo).


questa è la migliore risposta qui.
Christopher Neylan,
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.