Existe alguma vantagem em criar um arquivo temporário de uma maneira mais cuidadosa
Os arquivos temporários geralmente são criados no diretório temporário (como /tmp
), onde todos os outros usuários e processos têm acesso de leitura e gravação (qualquer outro script pode criar os novos arquivos). Portanto, o script deve ter cuidado ao criar os arquivos, como usar com as permissões certas (por exemplo, somente leitura para o proprietário, consulte help umask
:) e o nome do arquivo não deve ser facilmente adivinhado (idealmente aleatório). Caso contrário, se os nomes de arquivos não forem exclusivos, ele poderá criar conflito com o mesmo script executado várias vezes (por exemplo , condição de corrida) ou algum invasor pode seqüestrar algumas informações confidenciais (por exemplo, quando as permissões são muito abertas e o nome do arquivo é fácil de adivinhar) ou criar / substituir o arquivo por sua própria versão do código (como substituir os comandos ou consultas SQL, dependendo do que está sendo armazenado).
Você pode usar a seguinte abordagem para criar o diretório temporário:
TMPDIR=".${0##*/}-$$" && mkdir -v "$TMPDIR"
ou arquivo temporário:
TMPFILE=".${0##*/}-$$" && touch "$TMPFILE"
No entanto, ainda é previsível e não é considerado seguro.
De acordo com man mktemp
, podemos ler:
Tradicionalmente, muitos scripts de shell tomam o nome do programa com o pid como sufixo e o usam como um nome de arquivo temporário. Esse tipo de esquema de nomeação é previsível e a condição de corrida criada é fácil para um atacante vencer.
Para estar seguro, é recomendável usar o mktemp
comando para criar um arquivo ou diretório temporário exclusivo ( -d
).