GNU/Linux >> Tutoriels Linux >  >> Linux

Pourquoi avons-nous besoin de mktemp ?

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

Imaginez que vous fassiez quelque chose comme :

echo something > /tmp/temporary-file

dans votre script d'exécution racine.

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

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

avant.

Cela donne /etc/passwd être écrasé, et potentiellement cela peut signifier différentes choses désagréables à partir du système devient cassé, et se terminant par le système devient piraté (lorsque l'entrée something pourrait être soigneusement conçu).

Le mktemp commande pourrait vous aider dans cette situation :

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

Maintenant ce ln /etc/passwd l'attaque ne fonctionnera pas.

Un bref aperçu de l'histoire de mktemp :Le mktemp La commande a été inventée par les gens d'OpenBSD et est apparue pour la première fois dans OpenBSD 2.1 en 1997. Leur objectif était d'améliorer la sécurité des scripts shell. Auparavant, la norme était d'ajouter $$ aux noms de fichiers temporaires, ce qui n'était absolument pas sûr. Désormais, tous les systèmes UNIX/Linux ont soit mktemp ou ses alternatives, et il est devenu standard de facto. Assez drôle, le mktemp La fonction C a été dépréciée car non sécurisée.


Vous voulez souvent un "fichier bloc-notes" (ou répertoire). De plus, vous pourriez avoir besoin de plusieurs fichiers de ce type en même temps, et vous ne voulez pas vous embêter à trouver comment les nommer afin qu'il n'y ait pas de conflit.

"mktemp" fait l'affaire :)


Linux
  1. Pourquoi mon besoin de contrôle m'a fait passer à Linux

  2. Df Vs. Du:Pourquoi tant de différence ??

  3. Quand setsid() est-il utile ou pourquoi devons-nous regrouper les processus sous Linux ?

  4. Pourquoi stdout a-t-il besoin d'un vidage explicite lorsqu'il est redirigé vers un fichier ?

  5. Pourquoi clang a-t-il encore besoin de libgcc.a pour compiler mon code ?

pourquoi C clock() renvoie 0

Pourquoi avons-nous besoin d'un bootloader dans un appareil embarqué ?

Pourquoi avons-nous besoin du fichier .so.1 sous Linux ?

Pourquoi ai-je besoin d'un bit 'execute' en mode fichier sur les systèmes de fichiers Unix ?

Pourquoi est-il nécessaire de modifier les tables d'appels système sous Linux ?

Pourquoi un périphérique RAID 10 doit-il être initialisé ?