GNU/Linux >> Linux Esercitazione >  >> Linux

Creazione di file temporanei in bash

C'è qualche vantaggio nel creare un file temporaneo in modo più accurato

I file temporanei vengono solitamente creati nella directory temporanea (come /tmp ) dove tutti gli altri utenti e processi hanno accesso in lettura e scrittura (qualsiasi altro script può creare i nuovi file lì). Pertanto lo script dovrebbe prestare attenzione alla creazione dei file, come l'utilizzo con i permessi corretti (ad es. sola lettura per il proprietario, vedere:help umask ) e il nome del file non dovrebbe essere facilmente indovinato (idealmente casuale). In caso contrario, se i nomi dei file non sono univoci, può creare un conflitto con lo stesso script eseguito più volte (ad es. race condition) o qualche utente malintenzionato potrebbe dirottare alcune informazioni sensibili (ad es. quando le autorizzazioni sono troppo aperte e il nome del file è facile da indovinare) o creare /sostituendo il file con la propria versione del codice (come sostituire i comandi o le query SQL a seconda di ciò che viene archiviato).

Puoi utilizzare il seguente approccio per creare la directory temporanea:

TMPDIR=".${0##*/}-$$" && mkdir -v "$TMPDIR"

o file temporaneo:

TMPFILE=".${0##*/}-$$" && touch "$TMPFILE"

Tuttavia è ancora prevedibile e non considerato sicuro.

Come da man mktemp , possiamo leggere:

Tradizionalmente, molti script di shell prendono il nome del programma con pid come suffisso e lo usano come nome di file temporaneo. Questo tipo di schema di denominazione è prevedibile e la race condition che crea è facile da vincere per un utente malintenzionato.

Quindi, per sicurezza, si consiglia di utilizzare mktemp comando per creare un file o una directory temporanea univoca (-d ).


Il mktemp(1) la pagina man lo spiega abbastanza bene:

Tradizionalmente, molti script di shell prendono il nome del programma con pid come suffisso e lo usano come nome di file temporaneo. Questo tipo di schema di denominazione è prevedibile e la race condition che crea è facile da vincere per un attaccante. Un approccio più sicuro, sebbene ancora inferiore, consiste nel creare una directory temporanea utilizzando lo stesso schema di denominazione. Sebbene ciò consenta di garantire che un file temporaneo non venga sovvertito, consente comunque un semplice attacco denial of service. Per queste ragioni si suggerisce di usare invece mktemp.

In uno script, invoco mktemp qualcosa di simile

mydir=$(mktemp -d "${TMPDIR:-/tmp/}$(basename $0).XXXXXXXXXXXX")

che crea una directory temporanea in cui posso lavorare e in cui posso tranquillamente nominare i file effettivi in ​​modo leggibile e utile.

mktemp non è standard, ma esiste su molte piattaforme. Le "X" verranno generalmente convertite in una certa casualità, e più saranno probabilmente più casuali; tuttavia, alcuni sistemi (busybox ash, per esempio) limitano questa casualità in modo più significativo rispetto ad altri

A proposito, la creazione sicura di file temporanei è importante per qualcosa di più del semplice scripting della shell. Ecco perché python ha tempfile, perl ha File::Temp, ruby ​​ha Tempfile, ecc...


Potresti voler dare un'occhiata a mktemp

L'utilità mktemp prende il modello di nome file specificato e ne sovrascrive una parte per creare un nome file univoco. Il modello può essere qualsiasi nome di file con un numero di 'X' aggiunto ad esso, ad esempio/tmp/tfile.XXXXXXXXXX. Le "X" finali vengono sostituite con una combinazione del numero del processo corrente e lettere casuali.

Per maggiori dettagli:man mktemp


Sì, usa mktemp.

Creerà un file temporaneo all'interno di una cartella progettata per l'archiviazione di file temporanei e ti garantirà un nome univoco. Emette il nome di quel file:

> mktemp
/tmp/tmp.xx4mM3ePQY
>

Linux
  1. Pseudo file per dati temporanei?

  2. Howto:Programmazione in C con file temporanei in Linux

  3. Creazione e rimozione di file e directory in Linux

  4. creazione della directory dal nome file e spostamento bash

  5. Elimina tutti i file tranne i 3 più recenti nello script bash

Creazione e debug dei file di dump di Linux

Come leggere i file riga per riga in Bash

Come analizzare i file CSV negli script Bash in Linux

Comando mktemp in Linux

Scripting Bash:come scrivere dati su file di testo

Usando Bash Sort per ordinare i file come un boss