Что не так с использованием команды «find -print0»? [закрыто]

Это зависит от того, что вы подразумеваете под безопасностью. Если место на диске, где хранится ваша программа, недоступно для записи другими пользователями, это безопасно в том смысле, что это просто еще один ПУТЬ, который пользователи не могут использовать, обманывая ваше программное обеспечение, чтобы запустить что-то еще.

Это небезопасно в том смысле, что копирование двоичных файлов в каталог с программным обеспечением непереносимо и не требует исправлений безопасности. Но если вы понимаете свое собственное развертывание, это может не быть проблемой.

7
23.02.2019, 11:46
2 ответа

Проблема не в find, а в том, как вы создаете этот каталог. Строка 'foo\n'в одинарных кавычках на самом деле представляет собой строку из 5 -символов, последние два из которых — обратная косая черта и строчная буква «n».

Двойное -цитирование тоже не помогает, так как строки в двойных -кавычках в оболочке используют обратную косую черту в качестве escape-символа, но на самом деле не интерпретируют ни одну из последовательностей обратной косой черты в стиле C -.

В оболочке, такой как bash или zsh и т. д. (, но не в dash из Debian/Ubuntu ), вы можете использовать $'...', которая интерпретирует эти последовательности:

$ mkdir $'foo\n'

(См. документацию bash для этой функции, называемой "ANSI C Quoting" ).

Другой вариант, который должен работать в любой оболочке, совместимой с оболочкой Bourne, заключается в вставке реальной новой строки:

$ mkdir 'foo
'

Фактически это Возврат в конце первой строки, закрывая только одинарную кавычку во второй строке.

20
27.01.2020, 20:13

Давайте создадим каталог с именем fooплюс новую строку:

$ mkdir $'foo\n'

Теперь воспользуемся функцией find:

$ find.  -print0 | od -c
0000000  .  \0  .   /   f   o   o  \n  \0
0000011

\nне экранируется.

Проблема в том, что mkdir 'foo\n'— это имя, которое интерпретируется как foo, за которым следует \, за которым следует n. Мы можем убедиться, что с помощью:

$ printf '%s' 'foo\n' | od -c
0000000   f   o   o   \   n
0000005
6
27.01.2020, 20:13

Теги

Похожие вопросы