Pasta compartilhada no Linux

Pasta compartilhada no Linux

como faço para criar uma pasta verdadeiramente compartilhada em um servidor Linux? Quero que os membros de uma equipe de projeto possam ler e gravar cada arquivo como se fossem seus, independentemente de terem copiado ou movido o arquivo para a pasta, criado eles mesmos dentro da pasta ou se o arquivo foi criado por outros.

Até agora me deparei com os seguintes problemas:

  • umask funciona apenas em todo o sistema e ignora os arquivos existentes
  • ACLs ignoram arquivos movidos para a pasta pelo usuário
  • inotify parece um hack porque corrige as permissões posteriormente, o que pode causar problemas com alguns documentos do Office
  • regularmente chgrp -R projectteam /folder/causa problemas de desempenho, atrasos e backups.

Minha solução atual é um compartilhamento SAMBA montado no mesmo servidor e force userhabilitado force group. No entanto, isso é complicado de administrar para vários grupos de projetos e acho que estou sofrendo um impacto no desempenho.

Qualquer ajuda ou ideia seria muito apreciada. Eu executo o Debian 10.

Atenciosamente de Hamburgo, Alemanha

Michael

Responder1

Se todos os usuários do projeto tiverem um grupo de projeto comum atribuído, você poderá definir o bit setgid no diretório do seu projeto (bem como em seus subdiretórios):

find /path/to/teamfolder -type d -exec chmod g+s '{}' \;

Defina também as permissões ACL no diretório do projeto, algo como:

setfacl -d -m u::rwx,g::rwx,o::r-x /path/to/teamfolder

Quando o bit setgid é definido em um diretório, todos os arquivos criados nesse diretório herdarão a propriedade do grupo desse diretório. As permissões ACL permitirão que os arquivos criados dentro do diretório do projeto tenham permissões de gravação para o grupo.

Um novo usuário pode ser adicionado como:

sudo usermod -a -G projgrp newuser

Espero que isto ajude.

Responder2

Você tem várias camadas de configuração para alinhar e isso pode ser feito para tornar a administração bastante simples.

Como sugeriu Abhishek, definir o bit setgid para um diretório é bastante útil porque torna a propriedade do grupo do diretório herdável por padrão para arquivos e diretórios recém-criados.

Os arquivos copiados mantêm sua propriedade, como você observou. Para redefinir a propriedade do grupo, a abordagem incrontab é boa. Uma abordagem mais moderna usaria um arquivo systemd .path para monitorar modificações e um arquivo .service correspondente para executar o chgrp.

Para responder à sua pergunta sobre a configuração para oferecer suporte a muitos grupos de projetos, considere o seguinte:

Primeiro, lembre-se de que o Samba fornece apenas autenticação e depende das permissões do sistema de arquivos e das contas de usuário do host.

Defina umask como 0002, que permite permissões de gravação em grupo por padrão.

Crie uma conta de host para cada usuário:

sudo useradd andreas
sudo useradd beatrix
sudo useradd ciela

Crie um "superusuário" de dados distinto do root para fins administrativos:

sudo useradd oberst

Crie um grupo para cada projeto:

sudo groupadd hund
sudo groupadd katz

Crie um diretório de dados para cada projeto, defina permissões (incluindo o bit setguid) e propriedade. A seguir, defina o bit setgid (2), conceda permissões completas (7) ao superusuário oberst e ao grupo especificado e não conceda permissões a outros (0), para que membros que não sejam do grupo não possam ler, escrever ou executar:

sudo mkdir /srv/hund
sudo chown oberst:hund /srv/hund
sudo chmod 2770 /srv/hund
sudo mkdir /srv/katz
sudo chown oberst:katz /srv/katz
sudo chmod 2770 /srv/katz 

Adicione usuários a grupos:

sudo usermod -a -G hund andreas
sudo usermod -a -G hund beatrix
sudo usermod -a -G katz beatrix
sudo usermod -a -G katz ciela

Adicione usuários ao Samba:

sudo smbpasswd -a andreas
sudo smbpasswd -e andreas
sudo smbpasswd -a beatrix
sudo smbpasswd -e beatrix
sudo smbpasswd -a ciela
sudo smbpasswd -e ciela

Edite smb.conf para criar compartilhamentos. Read-only=no permite acesso de gravação e browsable=no impede que outros (ou seja, não membros do grupo) naveguem no compartilhamento. Observe o prefixo "@" na diretiva de usuários válidos, que define o acesso por referência a grupos de hosts:

[hund]
    path=/srv/hund
    read only=no
    browsable=no
    force group=hund
    valid users=@hund

[katz]
    path=/srv/katz
    read only=no
    browsable=no
    force group=katz
    valid users=@katz

Agora (talvez após uma reinicialização), /srv/hund pode ser acessado (leitura/gravação) por andreas e beatrix, mas não por ciela, e /srv/katz pode ser acessado (leitura/gravação) por beatrix e ciela, mas não por andreas.

Tudo o que é necessário para alterar o acesso de um usuário é simplesmente alterar a associação ao grupo usando usermod.

Claro, você também deve configurar senhas para contas de host e contas Samba.

Espero que isso seja útil.

informação relacionada