GNU/Linux >> Znalost Linux >  >> Linux

Vytváření dočasných souborů v bash

Existuje nějaká výhoda při vytváření dočasného souboru opatrnějším způsobem

Dočasné soubory se obvykle vytvářejí v dočasném adresáři (například /tmp ), kde mají všichni ostatní uživatelé a procesy přístup pro čtení a zápis (nové soubory tam může vytvořit jakýkoli jiný skript). Skript by si proto měl dávat pozor na vytváření souborů, jako je použití se správnými oprávněními (např. pouze pro čtení pro vlastníka, viz:help umask ) a název souboru by neměl být snadno uhodnutelný (ideálně náhodný). V opačném případě, pokud názvy souborů nejsou jedinečné, může to způsobit konflikt se stejným skriptem spuštěným vícekrát (např. race condition) nebo by některý útočník mohl unést některé citlivé informace (např. když jsou oprávnění příliš otevřená a název souboru lze snadno uhodnout) nebo vytvořit /nahrazení souboru vlastní verzí kódu (jako je nahrazení příkazů nebo SQL dotazů v závislosti na tom, co se ukládá).

K vytvoření dočasného adresáře můžete použít následující postup:

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

nebo dočasný soubor:

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

Je však stále předvídatelný a nepovažuje se za bezpečný.

Podle man mktemp , můžeme číst:

Tradičně mnoho skriptů shellu bere název programu s pid jako příponu a používá ji jako dočasný název souboru. Tento druh schématu pojmenování je předvídatelný a pro útočníka je snadné vyhrát závodní podmínky.

Pro jistotu se tedy doporučuje použít mktemp příkaz k vytvoření jedinečného dočasného souboru nebo adresáře (-d ).


mktemp(1) manuálová stránka to vysvětluje docela dobře:

Tradičně mnoho skriptů shellu bere název programu s pid jako příponu a používá ji jako dočasný název souboru. Tento druh schématu pojmenování je předvídatelný a závodní podmínky, které vytváří, je pro útočníka snadné vyhrát. Bezpečnějším, i když stále horším přístupem je vytvořit dočasný adresář pomocí stejného schématu pojmenování. I když to umožňuje zaručit, že dočasný soubor nebude podvrácen, stále to umožňuje jednoduchý útok typu odmítnutí služby. Z těchto důvodů se doporučuje místo toho použít mktemp.

Ve skriptu vyvolám mktemp něco jako

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

který vytvoří dočasný adresář, ve kterém mohu pracovat, a ve kterém mohu bezpečně pojmenovat skutečné soubory tak, aby byly čitelné a užitečné.

mktemp není standardní, ale existuje na mnoha platformách. "X" se obecně převedou na nějakou náhodnost a více bude pravděpodobně náhodnějších; nicméně některé systémy (např. busybox ash) omezují tuto náhodnost výrazněji než jiné

Mimochodem, bezpečné vytváření dočasných souborů je důležité nejen pro skriptování shellu. Proto má python tempfile, perl má File::Temp, ruby ​​má Tempfile atd…


Možná se budete chtít podívat na mktemp

Obslužný program mktemp vezme danou šablonu názvu souboru a přepíše její část, aby vytvořil jedinečný název souboru. Šablona může být libovolný název_souboru s určitým počtem připojených 'X', například/tmp/tfile.XXXXXXXXXX. Koncová 'X' jsou nahrazena kombinací aktuálního čísla procesu a náhodných písmen.

Další podrobnosti:man mktemp


Ano, použijte mktemp.

Vytvoří dočasný soubor ve složce, která je určena pro ukládání dočasných souborů, a zaručí vám jedinečný název. Vypíše název tohoto souboru:

> mktemp
/tmp/tmp.xx4mM3ePQY
>

Linux
  1. Ubuntu – vytváření souborů jednotek v Ubuntu 16.04?

  2. Pseudo soubory pro dočasná data?

  3. .o soubory vs. .a soubory

  1. Nejkratší způsob, jak vyměnit dva soubory v bash

  2. Jak gzipovat všechny soubory ve všech podadresářích v bash

  3. Přeneste soubory pomocí lftp v bash skriptu

  1. Získat všechny soubory kromě souborů v poli – Bash?

  2. Jak na to:Programování v C s dočasnými soubory v Linuxu

  3. Vytváření a odstraňování souborů a adresářů pod Linuxem