Правда ли, что tarball может изменить место, куда извлекаются файлы, независимо от команд, используемых для его извлечения?

27

У меня есть сотрудник, который говорит, что вы должны быть осторожны при извлечении тарболов, потому что они могут вносить изменения, о которых вы не знаете. Я всегда думал, что тарбол - это просто иерархия сжатых файлов, поэтому, если вы распакуете его в / tmp / example /, он не сможет вставить файл в / etc / или что-то подобное.

Адам Р. Грей
источник
1
В каких операционных средах вы заинтересованы? У tar в GNU / Linux есть -Pопция, которая влияет на его поведение в этом отношении.
Джефф Шаллер
1
Я думаю, CentOS в этом случае, но я хотел бы знать все, что я должен знать.
Адам Р. Грей
1
В течение более длительного времени GNU tar можно было обмануть таким образом, чтобы это можно было сделать, например, удалить /etc/passwdв случае, если он был запущен от имени пользователя root. Со временем я считаю, что это gtarдает такую ​​же безопасность, как и вы star.
Шили

Ответы:

41

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

Solaris tar :

Названные файлы извлекаются из tar-файла и записываются в каталог, указанный в tar-файле, относительно текущего каталога. Используйте относительные имена файлов и каталогов для извлечения.

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

В случае файла tar с полными (абсолютными) путями, такими как:

/tmp/real-file
/etc/sneaky-file-here

... если вы извлечете такой файл, вы получите оба файла.

GNU tar :

По умолчанию GNU tar отбрасывает ведущий /на ввод или вывод и жалуется на имена файлов, содержащих ..компонент. Есть опция, которая отключает это поведение:

--absolute-names

-P

Не удаляйте начальные косые черты из имен файлов и разрешайте имена файлов, содержащие ..компонент имени файла.

... если вы извлечете полностью исправленный tar-файл, используя GNU tar, не используя -Pопцию, он скажет вам:

tar: удаление ведущих /из имен членов

и распакует файл в подкаталоги вашего текущего каталога.

AIX tar :

ничего не говорит об этом и ведет себя как tar-архив Solaris - он создает и извлекает tar-файлы с полными / абсолютными путями.

HP-UX tar : (лучшая онлайн-ссылка приветствуется)

ПРЕДУПРЕЖДЕНИЯ

Невозможно восстановить абсолютный путь к относительной позиции.

OpenBSD tar :

-P

Не удаляйте ведущие косые черты ( /) из путей. По умолчанию необходимо удалить ведущие косые черты.

Также есть -Pопции, реализованные для tarmacOS, FreeBSD и NetBSD с той же семантикой, с добавлением, что tarво FreeBSD и macOS «откажется извлекать записи архива, чьи имена путей содержат ..или чей целевой каталог будет изменен символической ссылкой» без -P.

Звезда Шилитоола :

-/

Не удаляйте начальные косые черты из имен файлов при извлечении архива. Архив tar с абсолютными путями обычно плохая идея. В других реализациях tar их, возможно, никогда не удастся извлечь без заделывания существующих файлов. По этой причине звездочка по умолчанию удаляет косые черты из имен файлов в режиме извлечения.

Джефф Шаллер
источник
2
Долгое время GNU tar игнорировал тот факт, что имя пути, содержащее имя, ..представляет угрозу безопасности, поэтому используйте его starили недавно gtar. Также взгляните на starпримеры tar-архивов, которые содержат созданные вручную tarзаголовки, которые заставляют большинство tarреализаций удалять файлы даже без предупреждения.
Шили
@schily, согласно цитатам Джеффа, разве это не относится и к tarSolaris, AIX и HP-UX? Если это так, зачем указывать только GNU tar, особенно если (опять же согласно приведенной выше цитате) они изменились на отказ от принятия ..? Проблемы с искаженным вводом, конечно, являются ошибками, и я полагаю, что вы сообщили о них как таковые.
ilkkachu
1
Исторические реализации tar не проверяют подобные вещи. Мне нужно было сделать замечание, потому что было утверждение, что GNU tar без проблем без упоминания о выпуске. И кстати: такой список без упоминания star(самая старая бесплатная реализация) должен рассматриваться как неполный.
Щили
@schily, я искал man-страницы для основных ОС (которые могут иметь разные реализации tar); если у вас есть ссылка на онлайн-страницу звезды, я бы с удовольствием ее включил.
Джефф Шаллер
9

Одна из забавных вещей, которые происходят с tar-бомбами, заключается в том, что они изменяют разрешения текущего каталога на тот, который включен в tarball.

Например, если тарбол содержит «.» каталог, и вы распаковываете его в / tmp как root, он разрушит вашу систему, сделав / tmp не доступным для записи никому, кроме root.

mosvy
источник
И если вы распакуете его /, он изменит права доступа к корневому каталогу, что приведет к непредвиденным последствиям (я помню, что получал «невозможно выполнить / bin / bash» при входе в консоль, потому что /был режим 770).
Law29
1
У меня было такое с официальным программным обеспечением - все версии github "rancher-compose" содержат "." в файле tar, например, и nuke / tmp, если вы их там распакуете.
Харальд