Чи є якась перевага у створенні тимчасового файлу більш ретельним способом
Тимчасові файли, як правило, створюються у тимчасовому каталозі (наприклад, /tmp
), де всі інші користувачі та процеси мають доступ до читання та запису (будь-який інший скрипт може створити там нові файли). Тому сценарій повинен бути обережним щодо створення файлів, таких як використання з потрібними дозволами (наприклад, читати лише для власника, див. help umask
), А ім'я файлу не слід легко здогадатися (в ідеалі випадково). Інакше, якщо назви файлів не є унікальними, це може створити конфлікт із тим самим сценарієм, який виконувався кілька разів (наприклад, умова перегонів) або якийсь зловмисник може або захопити якусь конфіденційну інформацію (наприклад, коли дозволи занадто відкриті і ім'я файлу легко здогадатися), або створити / замінити файл власною версією коду (наприклад, заміна команд або запитів SQL залежно від того, що відбувається зберігається).
Ви можете використовувати наступний підхід для створення тимчасового каталогу:
TMPDIR=".${0##*/}-$$" && mkdir -v "$TMPDIR"
або тимчасовий файл:
TMPFILE=".${0##*/}-$$" && touch "$TMPFILE"
Однак це все ще передбачувано і не вважається безпечним.
Відповідно man mktemp
, ми можемо читати:
Традиційно багато скриптів оболонки приймають назву програми разом із pid як суфікс і використовують це як тимчасове ім'я файлу. Така схема називання передбачувана, а перемогу, яку вона створює, легко виграти нападнику.
Щоб бути безпечним, рекомендується використовувати mktemp
команду для створення унікального тимчасового файлу чи каталогу ( -d
).