Eu tenho um determinado diretório no qual há um projeto compartilhado por vários usuários. Esses usuários usam o SSH para obter acesso a esse diretório e modificar / criar arquivos.
Este projeto deve ser gravável apenas para um determinado grupo de usuários: vamos chamá-lo de "meu grupo". Durante uma sessão SSH, todos os arquivos / diretórios criados pelo usuário atual devem, por padrão, pertencer ao grupo "mygroup" e ter permissões de gravação de grupo.
Posso resolver o problema de permissões com umask
:
$ cd project
$ umask 002
$ touch test.txt
O arquivo "test.txt" agora pode ser gravado em grupo, mas ainda pertence ao meu grupo padrão ("mislav", igual ao meu nome de usuário) e não ao "mygroup". Posso chgrp
definir recursivamente o grupo desejado, mas eu queria saber se existe uma maneira de definir implicitamente algum grupo, como umask altera as permissões padrão durante uma sessão.
Este diretório específico é um repositório git compartilhado com uma cópia de trabalho e eu quero git checkout
e git reset
operações para definir a máscara correta e grupo para novos arquivos criados na cópia de trabalho. O sistema operacional é o Ubuntu Linux.
Atualização: um colega sugere que eu deva examinar o getfacl / setfacl do POSIX ACL, mas a solução abaixo combinada com umask 002
a sessão atual é boa o suficiente para mim e é muito mais simples.
Se você quiser fazer isso com uma pasta existente, verifique se o bit setgid também está ativado para todas as subpastas. No entanto, você não precisa disso em arquivos e provavelmente também não deseja. Aqui está como configurá-lo para todas as subpastas recursivamente.
fonte
Não consigo encontrar a fonte de volta, mas usar
setgid
para resolver esse problema de repositórios bare git, que eu assumo ser o seu caso, está obsoleto e pode causar problemas em alguns casos.O Git pode cuidar de tudo isso através da
core.sharedRepository
bandeira. Eu tive o mesmo problema e resolvi-o da seguinte maneira:Supondo que
repogroup
seja o seu grupo, e você tenhacd
o diretório repo:Primeiro mude o sinalizador compartilhado para
group
:Nota: aqui você deve usar a palavra-chave
group
, não o nome do grupo. Isto é equivalente a criar o repositório nua com a opção--shared=group
.Em seguida, altere o grupo para todo o repositório:
Para garantir que os diretórios existentes sejam graváveis em grupo (
g+w
) e os executáveis existentes também se tornem executáveis em grupo (g+X
), você também precisa:Depois de fazer isso, o git honrará a
shared=group
flag e cuidará das permissões de grupo a seguir, para arquivos existentes e novos, para que você nunca precise novamente fazer oumask
ouchgrp
.Colocarei a fonte em um comentário se a encontrar de volta.
fonte
Eu não sou muito especialista no que diz respeito ao lado * nix, mas acho que o que você está procurando é chamado setgid.
Veja aqui .
fonte
É difícil herdar permissões de diretório pai no Linux / UNIX sem usar ACLs. mas existe uma maneira de atribuir permissões de arquivo padrão, verifique o link abaixo
Você pode herdar permissões do diretório pai.
fonte