Su Linux, il programma da riga di comando mktemp è meno sicuro della funzione C mkstemp?

StackOverflow https://stackoverflow.com/questions/499450

  •  20-08-2019
  •  | 
  •  

Domanda

Entrambe le operazioni creano un file vuoto e restituiscono il nome file, ma mkstemp lascia il file aperto in modalità esclusiva e ti dà l'handle. C'è un vantaggio in termini di sicurezza per la funzione C? Ciò implica che esiste una falla nella versione da riga di comando?

A parte questo, è interessante che ci siano diverse funzioni correlate in API in Linux e la maggior parte di esse dice " Non usare questa funzione " (o simili) nella loro pagina man.

È stato utile?

Soluzione

Come puoi facilmente vedere dal mktemp(1) codice sorgente, essenzialmente non fa altro che chiamare mkstemp(3).

La modalità esclusiva in Linux significa che la funzione fallirà se il file esiste già, non garantisce il blocco. Un altro processo può eliminare questo file, crearlo di nuovo e riempirlo di dati, nonostante la gestione del file sia open(3) da parte del processo.

Non esiste ulteriore sicurezza nella funzione C rispetto all'utilità della riga di comando.

Altri suggerimenti

Un trucco con file temporanei in sistemi operativi simili a Unix (inclusi Linux e Mac OS) è non appena si apre il file, lo si elimina. Puoi ancora accedere al file, ma nessun altro può vederlo o farci qualcosa, e scomparirà non appena chiudi il file, anche se il tuo programma muore in modo orribile.

La differenza più evidente tra una chiamata di sistema e una funzione della riga di comando è che le funzioni della riga di comando sono utilizzate dalle persone o dai loro script di shell, mentre le chiamate di sistema sono sempre eseguite dai programmi.

Sarebbe piuttosto difficile consegnare a una persona un file handle.

Per quanto riguarda " safety " dovresti pensare alle condizioni della gara: diverse istanze di un programma chiamano mkstemp contemporaneamente, ma ognuna ha la garanzia di avere un file temporaneo univoco. Se il programma sborsasse e chiamasse la versione da riga di comando, sarebbe quasi impossibile garantirlo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top