Почему mktemp с параметром -u указан в руководстве как небезопасный?
Я хотел создать временный файл, просматривал руководство mktemp и обнаружил, что mktemp с параметром -u указан как небезопасный, в чем причина этого?
mktemp --help
Usage: mktemp [OPTION]... [TEMPLATE]
Create a temporary file or directory, safely, and print its name.
TEMPLATE must contain at least 3 consecutive 'X's in last component.
If TEMPLATE is not specified, use tmp.XXXXXXXXXX, and --tmpdir is implied.
Files are created u+rw, and directories u+rwx, minus umask restrictions.
-d, --directory create a directory, not a file
-u, --dry-run do not create anything; merely print a name (unsafe)
1 ответ
Когда вы используете
-u
, файл не создается, поэтому использование этого имени в дальнейшем не гарантирует доступа к созданному вами временному файлу.
Существует возможность для другого процесса создать файл с таким именем между вызовами
mktemp
и использовать результат. Этот файл может быть символической ссылкой, позволяющей другому пользователю злоупотреблять вашими разрешениями, чтобы что-то писать.
Если вы используете
mktemp -u
, нужно очень внимательно следить за тем, чтобы такая раса не была эксплуатируемой.
Обычно лучше создать временный каталог (
mktemp -d
) и используйте имена по вашему выбору в этом каталоге.