Você pode configurar um diretório para que os arquivos criados nele pertençam a um determinado grupo, independentemente do ID do grupo efetivo do processo que os cria. Isso é chamado de semântica BSD e você deve definir o bit SGID para o diretório para ativá-lo:
chgrp domain /var/www/domain
chmod g+s /var/www/domain
Isso não altera o grupo de arquivos e diretórios já em /var/www/domain
, você precisará cuidar disso manualmente (por exemplo, usando -R
com chgrp
acima). Note que todos os subdiretórios subsequentemente criados no diretório também herdarão o SGID, permitindo automaticamente a semântica do BSD para os subdirectores.
A mesma semântica não é possível para o proprietário.
Se você precisar fazer isso tanto para o proprietário quanto para o grupo, provavelmente precisará garantir que o código que cria arquivos em /var/www/domain
seja executado com o usuário efetivo domain
e o grupo efetivo domain
. Você pode usar sudo
para fazer isso:
sudo -u domain -g domain your_command
Se domain
for o grupo principal do usuário domain
, o seguinte será suficiente
sudo -u domain your_command
Como esta solução cuida facilmente do proprietário e do grupo, não há necessidade de semântica BSD.
Se você não quiser alterar o usuário e grupo efetivo do processo que cria os arquivos (por exemplo, porque é um servidor grande que executa várias outras funções não relacionadas), talvez seja necessário externalizar a parte do processo. funcionalidade que cria os arquivos em um processo separado, cujo UID e GID efetivo podem ser alterados de acordo ou você pode usar a semântica BSD e tentar alcançar seu objetivo final confiando unicamente no grupo.