Você não pode fazer isso: se o usuário puder criar arquivos, eles serão de sua propriedade e ele poderá modificá-los e apagá-los.
Eu ia propor um esquema simples para ter um diretório temporário (onde o usuário pode fazer o que ele quer) e um diretório de entrada (não acessível para o usuário), com um pequeno programa privilegiado para mover arquivos do diretório temporário para o diretório de entrada. Mas na verdade é complicado fazer o certo: entre outras coisas, você precisa tomar cuidado para que o programa privilegiado não mova arquivos em outros diretórios (cuidado com as condições de corrida, links simbólicos, ../
), não sobrescrever arquivos existentes ( rename(3)
é atômico, mas pode apagar o destino), não permite que o usuário mantenha um descritor de arquivo aberto e modifique o arquivo depois de movê-lo (então é melhor copiar do que mover). Em vez disso, recomendarei que você use uma solução robusta e existente:
- Peça ao usuário que envie o arquivo por HTTP.
- Peça ao usuário para se comprometer com um sistema de controle de versão. Ele também poderá criar novas versões.