Esse é um problema extremamente comum, se eu o entender com precisão, e o encontro constantemente. Se eu usasse ACLs para todos os problemas triviais de agrupamento, teria toneladas de sistemas incontroláveis. Eles estão usando as melhores práticas quando você não pode fazê-lo de outra maneira, não nesta situação. Este é o método que eu recomendo fortemente.
Primeiro, você precisa definir seu umask como 002, para que um grupo possa compartilhar consigo mesmo. Normalmente, crio um arquivo como /etc/profile.d/firm.sh
oe adiciono um comando de teste com o umask.
[ $UID -gt 10000 ] && umask 002
Em seguida, você precisa definir os diretórios para seus respectivos grupos,
chgrp -R FirmA /srv/svn/FirmA
chgrp -R FirmB /srv/svn/FirmB
chgrp -R FirmC /srv/svn/FirmC
Finalmente, você precisa definir o bit SGID corretamente, para que o grupo sempre permaneça no que você definiu. Isso impedirá que um arquivo gravado seja definido como o GID do gravador.
find /srv/svn/FirmA -type d -print0 | xargs -0 chmod 2775
find /srv/svn/FirmB -type d -print0 | xargs -0 chmod 2775
find /srv/svn/FirmC -type d -print0 | xargs -0 chmod 2775
find /srv/svn/FirmA -type f -print0 | xargs -0 chmod 664
find /srv/svn/FirmB -type f -print0 | xargs -0 chmod 664
find /srv/svn/FirmC -type f -print0 | xargs -0 chmod 664
Agora, finalmente, se você deseja impedir que os diretórios sejam acessados por outros usuários.
chmod 2770 /srv/svn/FirmA
chmod 2770 /srv/svn/FirmB
chmod 2770 /srv/svn/FirmC