Есть ли какие-либо преимущества в создании временного файла в более осторожной манере
Временные файлы обычно создаются в временный каталог (например, /tmp
), где все остальные пользователи и процессы имеют доступ на чтение и запись (любой другой скрипт может создавать новые файлы там). Поэтому сценарий должен быть осторожным при создании файлов, таких как использование с правом разрешения (например, чтение только для владельца, см.: help umask
), и имя файла должно быть легко угадано (в идеале случайным). В противном случае, если имена файлов не уникальны, он может создать конфликт с тем же сценарием, который запускается несколько раз (например, race condition), или какой-либо атакующий может либо захватить некоторую конфиденциальную информацию (например, когда разрешения слишком открыты, а имя файла легко угадать) или создать/заменяя файл своей версией кода (например, заменяя команды или SQL-запросы в зависимости от того, что хранится).
Вы можете использовать следующий подход, чтобы создать временный каталог:
TMPDIR=".${0##*/}-$$" && mkdir -v "$TMPDIR"
или временный файл:
TMPFILE=".${0##*/}-$$" && touch "$TMPFILE"
Однако до сих пор предсказуемы и не считаются безопасными.
Согласно man mktemp
, мы можем прочитать:
Традиционно многие скрипты взять имя программы с ИДП в качестве суффикса и использовать его в качестве имени временного файла. Такая схема именования предсказуема, и состояние гонки, которое оно создает, легко для злоумышленника победить.
Так безопасна, рекомендуется использовать mktemp
команду, чтобы создать уникальный временный файл или каталог (-d
).
Не используйте временные файлы. Вместо этого используйте временные каталоги. И не используйте mktemp. См. Здесь почему: http://www.codeproject.com/Articles/15956/Security-Tips-for-Temporary-File-Usage-in-Applicat – ceving
@ceving Эта статья просто неверна, по крайней мере, когда применяется к команде оболочки mktemp (в отличие от вызова библиотеки mktemp). Поскольку mktemp создает сам файл с ограничивающим umask, атака дается только, если атакующий работает под той же учетной записью, что и атакующий ... в этом случае игра уже потеряна. Для получения лучших практик в мире сценариев оболочки см. Http://mywiki.wooledge.org/BashFAQ/062 –
Вы также можете использовать 'tempfile (1)' в системах, которые у него есть. –