web-dev-qa-db-fra.com

Pourquoi avons-nous besoin de Mktemp?

Je ne comprends pas la fonction de mktemp et ce que signifie un fichier temporaire. 

Quelle est la différence entre touch xyz et mktemp xyz (mis à part le fait que mktemp créera un fichier auquel xxx sera ajouté et qu'il aura 600 permissions?)

Précisez s'il vous plaît.

39
Shehbaz Jaffer

mktemp randomise le nom . Il est très important du point de vue de la sécurité.

Imaginez que vous faites quelque chose comme:

echo something > /tmp/temporary-file

dans votre script root.

Et quelqu'un (qui a lu votre script) fait

ln -s /etc/passwd /tmp/temporary-file

avant.

La commande mktemp pourrait vous aider dans cette situation:

TEMP=$(mktemp /tmp/temporary-file.XXXXXXXX)
echo something > ${TEMP}

Maintenant, cette attaque ln /etc/passwd ne fonctionnera pas.

48
Igor Chubin

Vous voulez souvent un "fichier bloc-notes" (ou un répertoire). De plus, vous aurez peut-être besoin de plusieurs fichiers de ce type en même temps et vous ne voudrez plus vous demander comment les nommer afin d'éviter tout conflit.

"mktemp" convient parfaitement :)

19
paulsm4

Vous y avez répondu vous-même: mktemp() garantit un nom unique.

http://linux.die.net/man/3/mktemp

La fonction mktemp () génère un nom de fichier temporaire unique à partir de modèle. Les six derniers caractères du modèle doivent être XXXXXX et ceux-ci sont remplacés par une chaîne qui rend le nom de fichier unique.

Mais, comme le fait remarquer le commentaire de @ MarcB (et la page de manuel), vous ne devriez pas l'utiliser: vous devriez utiliser mkstemp () .

9
Roddy

Ok, en fait, il est écrit clairement dans les pages de manuel.

mktemp - crée un fichier ou un répertoire temporaire.

Créez un fichier ou un répertoire temporaire, en toute sécurité, et affichez son nom.

Créer un fichier ou un répertoire en toute sécurité signifie qu'aucun autre utilisateur ne peut y accéder. C'est pourquoi son autorisation est de 600

touch - change l'horodatage des fichiers

Il suffit de changer les horodatages d'un fichier s'il est déjà créé et de créer un fichier s'il n'existe pas. Mais l'autorisation de fichier est toujours 644 par défaut.

Pour plus de détails, consultez les pages de manuel suivantes:

http://linux.die.net/man/1/mktemp

http://linux.die.net/man/1/touch

7
linuxexplore

Une raison supplémentaire: tous les systèmes n'utilisent pas /tmp en tant que répertoire temporaire . Par exemple https://termux.com/ pour des raisons techniques (il s'exécute en tant que processus dans Android) répertoire tmp.

Les scripts qui créent des fichiers temporaires ou des répertoires à l'aide de mktemp seront portables et fonctionneront également dans des environnements spéciaux.

2

Au moins dans la bash Shell, vous pouvez faire quelque chose comme:

dirpath="/tmp/dir1-$$/dir2-$$"  
mkdir -p $dirpath  
chmod -R 0700 /tmp/dir1-$$  

par exemple.

0
leed25d