Spécifiez le groupe par défaut et les permissions pour les nouveaux files dans un certain directory

J'ai un certain directory dans lequel il existe un projet partagé par plusieurs users. Ces users utilisent SSH pour accéder à ce directory et modifier / créer des files.

Ce projet ne doit être écrit que pour un certain groupe d'users: on l'appelle "mygroup". Au cours d'une session SSH, tous les files / directorys créés par l'user actuel doivent par défaut appartenir au groupe "mygroup" et avoir des permissions en écriture en groupe.

Je peux résoudre le problème d'permissions avec umask :

 $ cd project $ umask 002 $ touch test.txt 

Le file "test.txt" est maintenant écrit en groupe, mais appartient toujours à mon groupe par défaut ("mislav", identique à mon nom d'user) et non à "mygroup". Je peux chgrp façon récursive pour définir le groupe souhaité, mais je voulais savoir s'il est possible de configurer implicitement un groupe de manière à ce que umask change les permissions par défaut lors d'une session.

Ce directory spécifique est un post de travail git partagé avec une copy de travail et je souhaite que git checkout et git reset opérations pour définir le masque correct et le groupe pour les nouveaux files créés dans la copy de travail. Le operating system est Ubuntu Linux.

Mise à jour: un collègue suggère que je devrais examiner getfacl / setfacl de POSIX ACL, mais la solution ci-dessous combinée à umask 002 dans la session actuelle est assez bonne pour moi et est beaucoup plus simple.

Pour que tous les files d'un même directory héritent de droits de groupe, vous devez utiliser le bit setgid sur votre directory. Voir ce lien .

  $ mkdir test $ sudo chown raphink.staff test $ ls -lhd test drwxr-xr-x 2 raphink staff 4.0K 2009-12-21 16:19 test $ sudo chmod g+s test # Set the setgid bit $ ls -lhd test drwxr-sr-x 2 raphink staff 4.0K 2009-12-21 16:21 test $ touch test/foo $ ls -lh test total 0 -rw-r--r-- 1 raphink staff 0 2009-12-21 16:23 foo 

Si vous souhaitez le faire avec un dossier existant, vous devez vous assurer que le bit setgid est également activé pour tous les sous-dossiers. Cependant, vous ne l'avez pas besoin sur les files, et vous ne le souhaitez probablement pas sur les files. Voici comment le définir pour tous les sous-dossiers de façon récursive.

 find /path/to/base/dir -type d -exec chmod g+s {} + 

Je ne suis pas très expert en ce qui concerne le côté * nix, mais je pense que ce que vous cherchez s'appelle setgid.

Voir ici .

Je ne peux pas find la source de return, mais l'utilisation de setgid pour résoudre ce problème pour les repositorys git nus, ce qui, je suppose, est votre cas, est obsolète et peut causer des problèmes dans certains cas.

Git peut s'occuper de tout cela via le drapeau core.sharedRepository . J'ai eu le même problème et l'ai résolu comme suit:

En supposant que repogroup soit votre groupe, et que vous avez un cd dans le directory repo:

Commencez par changer le drapeau partagé en group :

 git config core.sharedRepository group 

Remarque: ici, vous devez utiliser le group mots keys, et non le nom du groupe. Cela équivaut à créer le référentiel nu avec l'option --shared=group .

Ensuite, modifiez le groupe pour tout le repository:

 chgrp -R repogroup . 

Pour vous assurer que les directorys existants sont écrits en groupe ( g+w ), et que les exécutables existants deviennent également exécutables en groupe ( g+X ), vous devez également:

 chmod -R g+wX . 

Une fois que vous avez fait cela, git honorera le drapeau de shared=group et prend en charge les permissions de groupe dans les éléments suivants, à la fois pour les files existants et les nouveaux, de sorte que vous n'aurez plus besoin d'être à nouveau à umask ou chgrp .

Je vais mettre la source dans un commentaire si je le retrouve.

Il est difficile d'hériter les permissions du directory parent sous Linux / UNIX sans utiliser les ACL. mais il existe un moyen d'atsortingbuer des permissions de file par défaut, de vérifier le lien ci-dessous

Pouvez-vous hériter des permissions du directory parent.