Como outros já observaram, se o objetivo é impedir o acesso a um arquivo persistente, ocultá-lo é provavelmente a abordagem errada. Nesse caso, o uso de medidas de controle de acesso apropriadas ou mesmo de criptografia, se o aplicativo exigir, pode ser uma solução. Por outro lado, a criação de arquivos "ocultos" temporários é um caso de uso perfeitamente legítimo.
No Linux, desde a versão 3.11 do kernel, a % A chamada do sistemaopen()
suporta o O_TMPFILE
flag, que pode ser usado para criar arquivos temporários sem nome. Quando esse sinalizador é usado, o argumento nome do caminho para open()
é usado para especificar um diretório, sob o qual um inode sem nome é criado. No entanto, como o principal caso de uso para O_TMPFILE
é, como o nome indica, a criação de arquivos temporários , isso não é adequado para armazenamento persistente, pois o arquivo será perdido quando o último descritor de arquivo for o arquivo é fechado, a menos que o arquivo receba um nome. O arquivo pode receber um nome com a linkat()
chamada de sistema, a menos que o sinal O_EXCL
tenha sido especificado além do O_TMPFILE
, nesse caso, a vinculação do arquivo ao sistema de arquivos é evitada.
A funcionalidade O_TMPFILE
adicionada recentemente é significativa porque pode ser usada para fornecer as seguintes propriedades a arquivos temporários:
- Criação livre de condição de corrida.
- Exclusão automática quando fechado.
- inacessível por meio de qualquer nome de caminho.
- Não está sujeito a ataques de links simbólicos.
- Não há necessidade de o chamador criar nomes exclusivos.
Além disso, a funcionalidade pode ser usada para criar arquivos inicialmente invisíveis, quando os atributos apropriados do sistema de arquivos podem ser ajustados no arquivo, antes de vinculá-lo ao sistema de arquivos em uma operação atômica. Isso pode ser usado para evitar certos TOCTOU condições de corrida.
Uma desvantagem com o sinalizador O_TMPFILE
é que apenas um subconjunto de sistemas de arquivos fornece suporte para ele. Inicialmente, o suporte era fornecido no ext2, ext3,
sistemas de arquivos ext4, UDF, Minix e shmem. Suporte a XFS foi adicionado no Linux 3.15.