Você tem algumas opções: ACLs ou grupos bem projetados ou uma combinação dos dois.
Os grupos bem projetados são provavelmente os menos frágeis (se o root tocar os arquivos, as ACLs podem não ser aplicadas).
Se você inverter seu mapeamento, você verá:
- server1: user1, user2
- server2: user1, user3
- server3: user1, user2
Então, mapeamos cada diretório para um grupo.
# create groups
groupadd server1
groupadd server2
groupadd server3
# create users
useradd -G server1,server2,server3 -m user1
useradd -G server1,server3 -m user2
useradd -G server2 -m user3
# create directories
mkdir -p /home/Server{1,2,3}/files
chgrp server1 /home/Server1/files
chgrp server2 /home/Server2/files
chgrp server3 /home/Server3/files
# set permissions on the directories
chmod u=rwx,g=rwxS,o=x /home/Server*/files
O bit setgid (g = S) é realmente crítico aqui. Isso garantirá que os novos arquivos em um determinado diretório recebam o mesmo grupo dos arquivos existentes.
Há uma última ressalva com o que foi dito acima: funciona melhor se seus usuários tiverem umask de 0002, em vez do genérico 0022. Se eles tiverem umask mais estrita (por exemplo, 0077), ela será interrompida. As ACLs geralmente também quebram nesse caso.