mktemp против umask 066 и сенсорный?
Моя оболочка bash требует временного файла. Предположим, что конфликт имен не является проблемой. mktemp
не так хорошо, как вручную прикоснуться к временному файлу после umask 066
?
Мое предположение таково: mktemp - это системная функция, по сравнению с ручным нажатием на файл, она все равно требует немного больше ресурсов.
Я читал кое-что о ln -s etc/passwd
атаковать, но это похоже на историю десятилетий назад, когда пароли не были скрыты.
Пожалуйста, поправьте меня, если мое понимание неверно.
2 ответа
Эти две команды не предназначены для того же. mktemp
создает файл гибким способом, и имеет функции, чтобы убедиться, что он использует уникальное имя. touch
изменит временную метку файла (или создаст его, если он не существует), но вы предоставите имя.
Если вы хотите создать пустой файл, для которого у вас уже есть имя, используйте touch
; если вы собираетесь записать в этот файл сразу после этого, вам не нужно сначала его создавать, просто перенаправьте на него.
Но если вам действительно нужно создать временный файл и убедиться, что вы не перезапишите какой-либо другой файл, touch
ничего не делает для вас. Это может быть "легче", но бесполезно в этом случае, и вам нужно mktemp
,
Команда mktemp была написана Тоддом С. Миллером из OpenBSD для предотвращения распространенных уязвимостей в сценариях оболочки. По его собственным словам:
Mktemp — это простая утилита, предназначенная для безопасной и простой обработки временных файлов в сценариях оболочки. Традиционно люди, пишущие сценарии оболочки, использовали такие конструкции, как:
TFILE=/tmp/foop.$$
которые тривиально атаковать. Если такой скрипт запускается от имени root, злоумышленник на локальном хосте может получить доступ к корневому логину, повредить или разорвать системные файлы или сделать множество других неприятных вещей.
Основная проблема заключается в том, что большинство оболочек не имеют эквивалента флагу O_EXCL open(2). Хотя этого можно избежать, используя временные каталоги, я считаю использование mktemp(1) лучшим как с точки зрения простоты, так и надежности.
Теневые пароли здесь не помогут. Если скрипт запускается с правами root и записывает во временный файл небезопасным способом, злоумышленник может использовать условия гонки для изменения /etc/password или /etc/shadow или обоих!