Я читал, что перенаправление вывода в файл с фиксированным именем в /tmp
может быть угрозой безопасности, потому что, если злоумышленник (или недовольный) замечает, что файл /tmp/tmpfileformyscript.tmp
создается, когда я запускаю свой скрипт (даже если у него нет доступа на чтение к моему скрипт), например, он может создать символическую ссылку, ln -s ~wildcard/.bashrc /tmp/tmpfileformyscript.tmp
которая заставит меня уничтожить .bashrc
файл при запуске скрипта.
Так что вместо этого я могу использовать что-то вроде filename="tmpfile.tmp.$RANDOM" ; echo outputtext > "$filename"
.
Тем не менее, я хотел бы иногда использовать tmp-файл для кэширования, и в этом случае я хотел бы знать, соответствует ли tmpfile.tmp. * Что-нибудь в /tmp
этом файле, и если да, то использовать этот файл, а не создавать новый. К сожалению, test
и эквивалент [ -f filename ]
не поддерживает глобализацию файлов, насколько я могу судить.
Таким образом, мой вопрос состоит из двух частей:
- Как я могу безопасно создать временный файл? Это
"predictablename.$RANDOM"
приемлемая практика или есть лучший (более безопасный, простой) способ? - Как я могу легко получить доступ к файлу и / или установить его существование позже, проверяя
predictablename
?
$TMPDIR
и~/.cache
это именно то, что мне нужно. После некоторых дальнейших размышлений я понял, что единственная причина, по которой я хотел этого, - это/tmp
разбиение на разделы - чтобы кеш не мог заполнить/home
раздел. Но для этого варианта использования это действительно не проблема, поэтому подкаталог полностью~/.cache
соответствует моим потребностям и позволяет избежать проблем с безопасностью.