Este é um problema extremamente comum, se eu o entendi com precisão, e eu o encontro constantemente. Se eu usasse ACLs para cada problema de agrupamento trivial, eu teria toneladas de sistemas não gerenciáveis. Eles são apenas a melhor prática quando você não pode fazer isso de outra maneira, não para essa situação. Este é o método que recomendo vivamente.
Primeiro você precisa definir sua umask como 002, isso é para que um grupo possa compartilhar consigo mesmo. Eu costumo criar um arquivo como /etc/profile.d/firm.sh
e, em seguida, adicionar 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 permaneça sempre no mesmo que você definiu. Isso impedirá que um arquivo escrito seja definido para 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ê quiser 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