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