4

Я думаю, что я говорю об этой части справочной страницы, которая для меня едва различима:

   -delete
      ... It will not attempt to delete a filename with a ``/'' character in its
      pathname relative to ``.'' for security reasons...

В частности, я пытаюсь $ find . -name '.svn' -type d -delete . Я понимаю, что вместо этого могу использовать -exec для этого, но похоже, что find работает без проблем для других имен, в том числе глубоко в каталогах (которые, очевидно, содержат много символов / в своих путевых именах).

Возможно, он игнорирует точечные файлы, а документация неверна?

1 ответ1

2

"Причина безопасности" заключается в том, что в промежутке между тем, что find перечисляет файлы и удаляет их, злоумышленник может изменить один компонент пути к файлу так, что он станет символической ссылкой на неожиданный каталог, что приведет к удалению. файл с тем же именем из неожиданного каталога. Например, вы можете удалить /etc/passwd вместо /tmp/foo/passwd если злоумышленник может изменить foo на символическую ссылку, указывающую на /etc

В разделе 9.1.5 («Более безопасная версия -exec») документации по поиску GNU обсуждается эта проблема более подробно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .