Maneira boa e fácil de compartilhar arquivos na máquina local

13

Eu gostaria de ter um diretório com as seguintes propriedades:

  • Muitos usuários podem copiar arquivos para ele
  • Esses arquivos podem ser excluídos / alterados por esses usuários (o usuário A pode excluir / modificar o arquivo que foi copiado nesse diretório)

não pode ser feito usando permissões de arquivo normais (porque as permissões são retidas na cópia).

Aqui está o que eu encontrei na net:

Alguns casos de uso:

  • Compartilhando músicas na máquina local
  • Compartilhamento de repositório git simples (apenas deixe um repositório nu gravável para muitas pessoas) --- eu sei que existem soluções como gitosis
  • Permitir que muitos desenvolvedores modifiquem a instância de teste do aplicativo php sem fornecer a eles raiz (eu acho que eles copiariam arquivos) --- Estou liderando uma equipe de desenvolvedores juniores sem fins lucrativos e preciso manter isso simples!

EDITAR

A configuração do AFAIK do bit SGID não é válida, afeta apenas os arquivos recém-criados --- e o fluxo de trabalho básico para esses casos de uso transforma cópias e outras operações (que clivam o arquivo gid inalterado)

    
por jb. 24.11.2010 / 20:11

4 respostas

8

Listas de controle de acesso

A resposta direta é listas de controle de acesso (ACLs) . Sim, você pode encontrar um contra-exemplo, mas eles são bons o suficiente na prática (diferentemente da mera capacidade de escrita em grupo, que requer que os usuários pensem nisso o tempo todo). O que eles exigem é que o administrador do sistema (root) defina os grupos, se você quiser que os arquivos sejam compartilhados apenas por um grupo nomeado (root pode optar por delegar, por exemplo, aceitando grupos do LDAP, mas isso é outra história). / p>

Você precisa que os usuários participantes tenham um umask de 022. Se eles criarem arquivos não legíveis no mundo rotineiramente, esse esquema não funcionará. Mas se eles têm umask restritiva, é presumivelmente porque eles não querem compartilhar arquivos de qualquer maneira.

Ativando ACLs

O Ubuntu não habilita as ACLs por padrão, portanto, há um requisito administrativo de uso único. Edite /etc/fstab usando seu editor favorito e altere todas as linhas correspondentes a um sistema de arquivos no qual você deseja compartilhar arquivos: adicione acl às opções. (Certifique-se de não alterar nenhuma outra linha e de não usar um editor que contenha linhas longas.) Aqui está uma linha de exemplo com a opção acl adicionada:

UUID=5e1ec7ed-face-dead-beef-c011ec7ab1e5  /  ext4  errors=remount-ro,acl  0 1

Para que a opção seja efetivada na primeira vez, use um comando como o seguinte (para cada sistema de arquivos):

sudo mount -o remount,acl /

Instale as ferramentas de ACL do pacote acl .

Configurando o diretório compartilhado

Para ter arquivos compartilhados pelo grupo mygroup :

setfacl -m group:mygroup:rwx /path/to/shared/root
setfacl -d -m group:mygroup:rwx /path/to/shared/root

Se as pessoas criarem arquivos e copiá-los para o diretório compartilhado, os arquivos serão legíveis (por causa do umask) e qualquer pessoa no grupo poderá adicionar e remover arquivos (porque o grupo é gravável em grupo). As pessoas não podem editar os arquivos uns dos outros, mas isso é bom ou você enfrentaria conflitos de edição imediatamente.

Se você não tiver um grupo unix, poderá adicionar usuários um por um:

setfacl -m user:bob:rwx /path/to/shared/root
setfacl -d -m user:bob:rwx /path/to/shared/root

Controle de versão

Se você deseja que as pessoas possam editar arquivos no lugar, também precisa de algo para evitar conflitos de edição. Isso é controle de versão.

Você não precisa de nada disso para compartilhar um repositório git. Você sabe que existem soluções como a gitosis, então use-as.

    
por Gilles 10.01.2011 / 23:12
2

Basta fazer isso:

mkdir /src/teamA
addgroup teamA
chgrp teamA /src/teamA
chmod g+rws /src/teamA

Agora, todos no grupo teamA podem fazer tudo em /src/teamA

A mágica é o bit sgid (set group id) no diretório.

    
por shellholic 24.11.2010 / 20:44
1

Se você deseja que os usuários possam acessar arquivos em uma pasta compartilhada (por exemplo, pessoas diferentes fazem logon na mesma máquina em horários diferentes e precisam acessar os mesmos arquivos), você pode usar bindfs para criar uma diretório compartilhado.

Ele permite que vários usuários locais leiam e gravem (criem, excluam, renomeiem, modifiquem ...) todos os arquivos (incluindo os recém-criados) de um diretório compartilhado e seus subdiretórios. Cada usuário verá os arquivos e pastas (incluindo os recém-criados) como pertencentes a eles.

Resumidamente, você corre

sudo bindfs -o perms=0700,mirror-only=user1:user2:user3 /home/shared /home/shared

para tornar / home / shared disponível para user1, user2 e user3.

Instruções

Veja Bindfs-SharedDirectoryLocalUsers (documentação do Ubuntu) para instruções completas, incluindo a configuração permanente (toda vez que você ligue o seu computador). Eu uso isso em minha própria máquina para vários diretórios, cada um com diferentes grupos de compartilhamento (uma pasta está disponível para todas as contas, outra apenas para contas de trabalho, outra apenas para contas pessoais).

Da postagem:

  

bindfs é um sistema de arquivos FUSE para montar um diretório em outro local (ponto de montagem), com configurações de permissão. Ele permite que você especifique a propriedade e as permissões dos arquivos dentro do ponto de montagem.

     

...

     

O principal benefício é que os novos arquivos criados no diretório compartilhado herdarão a propriedade & amp; permissões.

Listas de controle de acesso (ACLs)

As notas da documentação:

  

Se você quiser configurar permissões mais avançadas para diferentes usuários e / ou grupo, tente Listas de controle de acesso .

Veja Gilles answer para mais detalhes.

    
por d3vid 10.01.2011 / 09:40
-3

Você pode combinar a solução do shellholic com uma tarefa do cron que atualize o gid para todos os arquivos nessa pasta a cada 15 segundos ou algo semelhante.

    
por David Oneill 24.11.2010 / 22:26