
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 user
habilitado 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.