Linux: perte de la propriété collective des fichiers

8

J'ai un projet avec un certain nombre de fichiers que j'ai créés sous Linux.

Et je devais donner à un autre utilisateur une autorisation d'écriture sur eux. J'ai donc créé un groupe "dev" dont lui et moi sommes membres et changé la propriété des fichiers pour ce groupe.

Un fichier typique dispose désormais de ces autorisations:

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

Cependant, lorsque je modifie le fichier profile.html, il me revient comme ceci, et mon collègue perd la possibilité de le modifier.

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

Comment puis-je éviter qu'il revienne comme ça? Changer la propriété était-il une mauvaise chose à faire? Ou a-t-il été fait avec les mauvaises options? Ou est-ce lié à la configuration de mon éditeur (emacs)?

interstar
la source

Réponses:

17

Sur le dossier contenant, vous voudrez changer le groupe pour être dev et ensuite utiliser le marquer set-gid.

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

Le bit set gid crée les fichiers créés dans ce dossier pour hériter du groupe du dossier ainsi que le marquage du bit setgid sur tout nouveau dossier. Vous devrez être prudent lorsque vous déplacez des fichiers dans le répertoire, car cela préservera leurs autorisations existantes.

Frenchie
la source
seulement un remède (voir ma réponse)
asdmin
8

Vous pouvez utiliser le bit setgid sur un répertoire pour préserver la propriété des groupes par les enfants.

chown :dev directory/
chmod g+s directory/
Dan Carley
la source
seulement un remède (voir ma réponse)
asdmin
7

Vous pouvez également monter le système de fichiers (en supposant ext2 / 3) avec l'option de montage grpid qui le rendra ainsi chaque fois que vous créerez un nouveau fichier dans un répertoire, cela rendra le propriétaire du groupe identique au répertoire parent. Donc, vous feriez en sorte que le répertoire dans lequel ces fichiers existent soit la propriété du groupe 'dev'.

Pour le remonter s'il s'agit de la partition racine (exemple):

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

Extrait de 'man mount 8':

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

Lorsque grpid est défini, il prend l'ID de groupe du répertoire dans lequel il est créé; sinon (par défaut), il prend le fsgid du processus en cours, sauf si le répertoire a le bit setgid défini, auquel cas il prend le gid du répertoire parent, et obtient également le bit setgid s'il s'agit d'un répertoire lui-même.

Kyle Brandt
la source
Bon à savoir très utile +1
Frenchie
Cela conservera-t-il également l'autorisation d'écriture du groupe si vous créez ou copiez un fichier?
KB
1

Le comportement par défaut pour emacs est de créer le fichier de sauvegarde en renommant. Du manuel emacs:

Emacs peut renommer le fichier d'origine afin qu'il devienne un fichier de sauvegarde, puis écrire le tampon en cours d'enregistrement dans un nouveau fichier. Après cette procédure, tous les autres noms (c.-à-d. Liens physiques) du fichier d'origine font désormais référence au fichier de sauvegarde. Le nouveau fichier appartient à l'utilisateur qui effectue la modification et son groupe est celui par défaut pour les nouveaux fichiers écrits par l'utilisateur dans ce répertoire par l'utilisateur dans ce répertoire.

Il existe plusieurs façons de changer cela.

  • Définissez le groupe et la partie collante, comme d'autres le décrivent.
  • Exécutez «newgrp dev» avant de modifier le fichier, de sorte que votre groupe par défaut soit dev.

Ou spécifiques à emacs:

  • Définissez file-précieux-flag dans emacs, ce qui change le comportement pour conserver le groupe, mais a d'autres effets secondaires.
  • Définissez la sauvegarde par copie lors de la non-concordance dans emacs, qui utilise la copie plutôt que de renommer lorsque cela entraînerait un changement de propriétaire ou de groupe.

Alors, ajoutez à votre .emacs:

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

Ma préférence est en fait "newgrp dev", car il s'agit d'un passage explicite du mode "personnel" (les fichiers que je modifie sont juste les miens) au mode de développement de groupe (les fichiers que je modifie maintenant sont partagés au sein du groupe).

jmanning2k
la source
c'est la meilleure réponse ici.
Christopher Neylan