J'ai un certain répertoire dans lequel il y a un projet partagé par plusieurs utilisateurs. Ces utilisateurs utilisent SSH pour accéder à ce répertoire et modifier / créer des fichiers.
Ce projet ne doit être accessible en écriture qu'à un certain groupe d'utilisateurs: appelons-le "mon groupe". Au cours d'une session SSH, tous les fichiers / répertoires créés par l'utilisateur actuel doivent par défaut appartenir au groupe "mygroup" et disposer d'autorisations d'écriture de groupe.
Je peux résoudre le problème des autorisations avec umask
:
$ cd project
$ umask 002
$ touch test.txt
Le fichier "test.txt" est désormais accessible en écriture de groupe, mais appartient toujours à mon groupe par défaut ("mislav", identique à mon nom d'utilisateur) et non à "mon groupe". Je peux chgrp
récursivement définir le groupe souhaité, mais je voulais savoir s'il existe un moyen de définir un groupe implicitement comme umask change les autorisations par défaut pendant une session.
Ce répertoire spécifique est un dépôt git partagé avec une copie de travail et je souhaite git checkout
que les git reset
opérations définissent le masque et le groupe corrects pour les nouveaux fichiers créés dans la copie de travail. Le système d'exploitation est Ubuntu Linux.
Mise à jour: un collègue suggère que je devrais regarder getfacl / setfacl de POSIX ACL mais la solution ci-dessous combinée avec umask 002
dans la session en cours est assez bonne pour moi et est beaucoup plus simple.
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 n'en avez pas besoin sur les fichiers, et vous ne le voulez probablement pas non plus sur les fichiers. Voici comment le définir de manière récursive pour tous les sous-dossiers.
la source
Je ne peux pas retrouver la source, mais utiliser
setgid
pour résoudre ce problème pour les référentiels nus git, 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
core.sharedRepository
drapeau. J'ai eu le même problème et l'ai résolu comme suit:En supposant que
repogroup
c'est votre groupe, et vous devezcd
le répertoire repo:Modifiez d'abord le drapeau partagé en
group
:Remarque: ici, vous devez utiliser le mot-clé
group
, pas le nom du groupe. Cela revient à créer le référentiel nu avec option--shared=group
.Modifiez ensuite le groupe pour l'ensemble du référentiel:
Pour vous assurer que les répertoires existants sont accessibles en écriture de groupe (
g+w
) et que les exécutables existants deviennent également des exécutables de groupe (g+X
), vous devez également:Une fois que vous avez fait cela, git honorera l'
shared=group
indicateur et prendra en charge les autorisations de groupe dans les éléments suivants, à la fois pour les fichiers existants et nouveaux, de sorte que vous n'aurez plus jamais besoin deumask
ouchgrp
.Je mettrai la source dans un commentaire si je la retrouve.
la source
Je ne suis pas vraiment un expert en ce qui concerne le côté * nix, mais je pense que ce que vous recherchez s'appelle setgid.
Voyez ici .
la source
Il est difficile d'hériter des autorisations de répertoire parent sous Linux / UNIX sans utiliser de listes de contrôle d'accès. mais il existe un moyen d'attribuer des autorisations de fichier par défaut, consultez le lien ci-dessous
Pouvez-vous hériter des autorisations du répertoire parent.
la source