Você pode executar o aplicativo em um ambiente chroot , ou seja, o / que o aplicativo vê não é o% real/. Você cria uma hierarquia completa do sistema de arquivos e monta ( --bind ) tudo o que precisa nela. O ponto relevante é: Você pode montar o ~/tmp real para o /tmp no ambiente chroot .
Em vez de usar chroot (que requer privilégios de superusuário), você pode fazer mais ou menos o mesmo com os contêineres do Linux ( lxc ). Não estou familiarizado com lxc , mas como é um processo normal do usuário para o sistema host, você não precisa ser o superusuário para tais configurações dentro do contêiner.