GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum brauchen wir mktemp?

mktemp randomisiert den Namen. Dies ist aus Sicherheitsgründen sehr wichtig.

Stellen Sie sich vor, Sie tun so etwas wie:

echo something > /tmp/temporary-file

in Ihrem root-laufenden Skript.

Und jemand (der Ihr Skript gelesen hat) tut es

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

vorher.

Dies ergibt /etc/passwd überschrieben wird, und möglicherweise kann es verschiedene unangenehme Dinge bedeuten, beginnend mit dem Ausfall des Systems und endend mit dem Hacken des Systems (wenn die Eingabe something könnte sorgfältig hergestellt werden).

Die mktemp Befehl könnte Ihnen in dieser Situation helfen:

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

Jetzt diese ln /etc/passwd Angriff wird nicht funktionieren.

Ein kurzer Einblick in die Geschichte von mktemp :Der mktemp command wurde von den OpenBSD-Leuten erfunden und erschien erstmals 1997 in OpenBSD 2.1. Ihr Ziel war es, die Sicherheit von Shell-Skripten zu verbessern. Früher war es üblich, $$ hinzuzufügen zu temporären Dateinamen, was absolut unsicher war. Jetzt haben alle UNIX/Linux-Systeme entweder mktemp oder seine Alternativen, und es wurde de facto zum Standard. Komischerweise die mktemp Die C-Funktion wurde verworfen, weil sie unsicher ist.


Sie möchten oft eine "Notizblockdatei" (oder ein Verzeichnis). Außerdem benötigen Sie möglicherweise mehrere solcher Dateien gleichzeitig, und Sie möchten sich nicht die Mühe machen, herauszufinden, wie Sie sie benennen, damit es keine Konflikte gibt.

"mktemp" passt genau :)


Linux
  1. Warum mich mein Bedürfnis nach Kontrolle dazu gebracht hat, zu Linux zu wechseln

  2. Df vs. Du:Warum so viel Unterschied??

  3. Warum friert der PC ein, während ich eine Datei auf einen Pendrive kopiere?

  4. warum C clock() 0 zurückgibt

  5. Warum brauchen wir einen Bootloader in einem eingebetteten Gerät?

Wenn Prozesse die Umgebung des übergeordneten Elements erben, warum brauchen wir dann den Export?

Wann ist setsid() nützlich oder warum müssen wir Prozesse in Linux gruppieren?

Warum muss stdout explizit geleert werden, wenn es in eine Datei umgeleitet wird?

Warum müssen Systemaufruftabellen in Linux geändert werden?

Warum benötigt der 'bin'-Benutzer eine Login-Shell?

Warum muss ein RAID 10-Gerät initialisiert werden?