Когда строки среды не имеют формы «имя = значение»?

Пробовали ли вы нажать S или Enter?

Комментарии к этой ошибке Ubuntu, похоже, указывают на то, что сообщения "ureadahead-other" и AppArmor по существу не связаны с происходящим, но настоящее сообщение или подсказка, которую вы должны увидеть, поглощается или упреждается этим сообщением об ошибке.

Приведенные выше ключи - это только наиболее вероятные варианты, которые позволят вам преодолеть проблемы, возникающие на этом этапе процесса загрузки, но, опять же, реальная проблема заключается в том, что подсказка, которую вы должны видеть, не выводится. Обычно люди сообщают, что подсказки отображаются правильно, если вы включите Upstart quiet boot (аргумент "тихой" загрузки).

-1
16.04.2018, 16:06
1 ответ

Мне ничего не известно о том, что на самом деле используются или ожидаются строки окружения, не содержащие =. Как правило, это патологические случаи.

GNU envили printenvточно напечатает их.

Для некоторых языков эти строки будут недоступны. Например, если вы вызываете perlсо строкой env foo, она не будет отображаться в keys(%ENV), хотя perlвсе равно будет передавать ее вместе с выполняемыми командами (, если вы не сбросите весь %ENVхэш ).

Таким образом, можно было бы использовать это, чтобы обойти некоторую очистку среды (, хотя надлежащая санация среды должна начинаться с пустой среды ).

Некоторые инструменты (, такие как некоторые оболочки ), удаляют их из среды, которую они получают, и не передают их вместе с выполняемыми ими командами, так что в целом не стоит полагаться на это.

Помимо=-меньшего количества строк env, к другим патологическим случаям относятся строки env с дублирующимся именем переменной (, такие как foo=goodи foo=bad, переданные в envp), которые уже рассматривались как вызывающие уязвимости (например CVE -2016 -2381 ), и строки env типа=foo(пустое имя переменной; обратите внимание, что POSIX putenv()/getenv()может устанавливать/получать эту переменную, но неsetenv()).

3
28.01.2020, 05:07

Теги

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