Y a-t-il un avantage à créer un fichier temporaire d'une manière plus prudente ?
Les fichiers temporaires sont généralement créés dans le répertoire temporaire (tel que /tmp
) où tous les autres utilisateurs et processus ont un accès en lecture et en écriture (tout autre script peut y créer les nouveaux fichiers). Par conséquent, le script doit faire attention à la création des fichiers tels que l'utilisation avec les bonnes permissions (par exemple, lecture seule pour le propriétaire, voir : help umask
) et le nom du fichier ne doit pas être facile à deviner (idéalement, il doit être aléatoire). Sinon, si les noms de fichiers ne sont pas uniques, cela peut créer un conflit avec le même script exécuté plusieurs fois (ex. condition de course ) ou un attaquant pourrait soit détourner certaines informations sensibles (par exemple, lorsque les autorisations sont trop ouvertes et que le nom du fichier est facile à deviner), soit créer/remplacer le fichier avec sa propre version du code (comme remplacer les commandes ou les requêtes SQL en fonction de ce qui est stocké).
Vous pouvez utiliser l'approche suivante pour créer le répertoire temporaire :
TMPDIR=".${0##*/}-$$" && mkdir -v "$TMPDIR"
ou un fichier temporaire :
TMPFILE=".${0##*/}-$$" && touch "$TMPFILE"
Cependant, elle reste prévisible et n'est pas considérée comme sûre.
Conformément à man mktemp
on peut lire :
Traditionnellement, de nombreux scripts shell prennent le nom du programme avec le pid comme suffixe et l'utilisent comme nom de fichier temporaire. Ce type de schéma de dénomination est prévisible et la condition de course qu'il crée est facile à gagner pour un attaquant.
Donc, pour être sûr, il est recommandé d'utiliser mktemp
pour créer un fichier ou un répertoire temporaire unique ( -d
).
1 votes
N'utilisez pas de fichiers temporaires. Utilisez plutôt des répertoires temporaires. Et n'utilisez pas mktemp. Voir ici pourquoi : codeproject.com/Articles/15956/
25 votes
Cet article est tout simplement faux, du moins lorsqu'il est appliqué à la commande shell mktemp (par opposition à l'appel de la bibliothèque mktemp). Comme mktemp crée le fichier lui-même avec un umask restrictif, l'attaque donnée ne fonctionne que si l'attaquant opère sous le même compte que l'attaqué... auquel cas la partie est déjà perdue. Pour les meilleures pratiques dans le monde des scripts shell, voir mywiki.wooledge.org/BashFAQ/062
0 votes
Vous pouvez également utiliser
tempfile(1)
sur les systèmes qui en disposent.