Em cima da minha cabeça eu posso pensar em 4 maneiras de fazer isso, mas eu não recomendaria nenhuma delas!
-
Use namespaces do Linux; dentro de cada namespace por usuário bind-mount o arquivo por usuário na parte superior do arquivo base.
-
Crie um ambiente chroot por usuário com o symlink'd do arquivo base no arquivo de destino
-
Execute um sistema de arquivos baseado no FUSE e monte-o sobre a parte superior do arquivo base
-
O arquivo de base deve ser um canal nomeado com um processo de daemon que lida / grave no arquivo por usuário.
Mas todos destes são complicados de configurar e frágil e eu não os recomendaria. Eu não estou indo mais fundo em como implementar isso, porque se você não pode construí-lo, então você não será capaz de consertá-lo QUANDO ele quebra!
Em geral, você deve contornar o problema de outra maneira em seu código (por exemplo, usar variáveis de ambiente).