Я пытался сделать временный по имени fifo и после ссылки Bash: создать анонимный fifo Я вижу, что они используют mktemp -u
чтобы получить имя файла для fifo. Страница руководства утверждает, что это небезопасно.
-u, --dry-run
do not create anything; merely print a name (unsafe)
Почему это небезопасно и как я могу использовать эту технику ответственно?
mktemp
вызывается без-u
? Даже если файл создан (в отличие только от имени), ничто не мешает другому процессу записать в тот же файл как только он был создан.mktemp
в вашем скрипте создает файл,mktemp
в другом сценарии не будет использоваться то же имя файла, потому что файл уже существует. Он не пытается защитить от вредоносных скриптов, просто от случайного использования того же имени.В контексте Mktemp «безопасный» означает защиту от непреднамеренного вмешательства других программ, особенно в результате столкновение имен , mktemp пытается дать вам некоторую уверенность в том, что даже если ваш файл находится в файловой системе, используемой многими другими программами, ваш скрипт, вероятно, будет единственным, взаимодействующим с файлом. mktemp обрабатывает это для вас тремя способами:
Пробный запуск mktemp не может обработать права доступа для вас (# 2), но это достаточно легко сделать самостоятельно с помощью chmod, если хотите.
Проблема, о которой вас предупреждает документация mktemp - №3. В то время как вызов mktemp в текущий скрипт будет гарантировать, что имя не используется еще , он не сообщает об этом другим программам. Поэтому другая программа или другой вызов того же сценария, работающего одновременно, может снова вызвать mktemp и получить тот же временный путь к файлу.
Единственный раз, когда вы можете использовать
mktemp --dry-run
is для некоторых редких программ, которые не позволяют уже существовать их выходному файлу или каталогу. В этих обстоятельствах вы можете уменьшить вероятность конфликта имен путем:источник