Контузия - не уязвимый с версией 4.1 удара?

Уродливый и хрупкий, но он должен выполнить свою работу:

find /data/DIV5/SASC/e042_ctcl/input/*/Clean_data/*/*/*.fq.gz -type f -print0 | \
  xargs -0 -n 1 \
    sh -c 'mkdir -p "$PWD/`dirname $0`"; ln -s "$0" "$PWD/`dirname $0`"'

Вдохновленный ответом хаоса , я придумал эту альтернативу, которая также убирает ненужные директории :

find /data/DIV5/SASC/e042_ctcl/input/*/Clean_data/*/*/*.fq.gz -type f   \
     -printf 'mkdir -p "${PWD}/%h"; ln -s "%p" \\\n\t"${PWD}/%h"\n'   | \
sed 's#/data/DIV5/SASC/e042_ctcl##'                                   | \
sh -

Она генерирует требуемые mkdir и ln команды:

mkdir -p "${PWD}//data/DIV5/SASC/e042_ctcl/input/x/Clean_data/0/a"; ln -s "/data/DIV5/SASC/e042_ctcl/input/x/Clean_data/0/a/foobar.fq.gz" \
    "${PWD}//data/DIV5/SASC/e042_ctcl/input/x/Clean_data/0/a"

Затем он удаляет из них ненужные каталоги с помощью sed, в результате чего:

mkdir -p "${PWD}//input/x/Clean_data/0/a"; ln -s "/data/DIV5/SASC/e042_ctcl/input/x/Clean_data/0/a/foobar.fq.gz" \
    "${PWD}//input/x/Clean_data/0/a"

Команда ln начинается в той же строке, что и mkdir, и продолжается в следующей строке, чтобы сохранить источник в целости и сохранности во время обрезки пункта назначения. Для их печати на той же строке или на каждой отдельной строке потребовался бы более сложный сценарий sed.

Пояснение из -документации для find, из -printf параметров:

%p. Имя файла (не абсолютное имя пути, а имя файла в том виде, в котором он был найден - т.е. как относительный путь от одной из начальных точек)

%h. Ведущие каталоги имени файла (все, кроме последнего элемента и косой черты перед ним). Если имя файла не содержит косой черты (например, потому что он был назван в командной строке и находится в текущей рабочей директории), то "%h" расширяется до "...". Это предотвращает расширение "%h/%f" до "/foo", что было бы удивительно и, вероятно, нежелательно.

1
10.10.2014, 04:18
1 ответ

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

Таким образом, видя, что у вас есть bash 4.1, вы не получаете никакой информации о том, уязвима ли она для Shellshock. Используйте тест, подобный тому, который вы уже нашли. Так как x='() { :;}; echo vulnerable' bash -c 'echo hello' не печатает vulnerable, вы не уязвимы к ошибке Shellshock. Тот факт, что вы не видите сообщения об ошибке, также указывает на то, что ваша копия bash также имеет патчи для исправления ошибок, связанных с , найденных в результате работы Shellshock. Статья, в которой упоминаются эти сообщения об ошибках, устарела: с последними исправлениями эта команда просто печатает hello.

2
27.01.2020, 23:38

Теги

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