Настройка прав доступа к содержимому tarfile

Есть ли способ chmod 777 содержимого tarfile при создании (или вскоре после этого) перед распространением? Разрешения на запись в каталоге, который является tar'd, неизвестны во время tar'ing (но обычно 555). Я хотел бы, чтобы развернутый каталог был доступен для записи в мире без того, чтобы пользователи, которые разворачивали tar, должны были помнить chmod -R 777 <untarred dir>, прежде чем продолжить.

Неудобным способом было бы сделать копию каталога, а затем chmod -R 777 <copydir>, но мне было интересно, было ли лучшее решение.

Я на машине Solaris 10.

ПРЕДПОСЫЛКИ:

Корневой каталог находится в нашем ClearCase vob с определенными разрешениями файлов, рекурсивно. Tarfile создается и распространяется несколькими "клиентами" в нашей организации. Большинству нужны только права на чтение/выполнение (и, в частности, НЕ хочу, чтобы они были доступны для записи), но одной группе, в частности, требуется, чтобы их копия была рекурсивно доступна для записи, так как они могут редактировать эти файлы или даже возвращаться к "новой" копии (т.е., в их первоначальном состоянии, как я им дал).

Эта группа несколько технически оспаривается. Несмотря на то, что у них есть инструкции по "how-to" в tarfile, они всегда, кажется, забывают (или ошибаются) настройку файлов, которые будут рекурсивно доступны для записи после того, как они были нераскрыты. Это приводит к телефонным звонкам на меня, чтобы диагностировать множество проблем, в которых основной причиной является то, что они забыли (или сделали неправильно) chmod'ing разворачиваемого каталога.

И прежде чем вы спросите, да, я написал им script для untar/chmod (конкретно для них), но... ох, неважно.

Итак, я решил, что создаю отдельную рекурсивно-перезаписываемую версию tar для распространения именно на них. Как я уже сказал, я всегда мог создать копию каталога, сделать копию рекурсивно доступной для записи, а затем дешифровать копию копий, но дистрибутив довольно большой, а дисковое пространство иногда почти полностью (оно может сильно различаться), поэтому создание копии каталога не будет осуществимо в 100% случаев.

Ответ 1

С GNU tar используйте параметр --mode при создании архива, например:

tar cf archive.tar --mode='a+rwX' *

Но обратите внимание, что при извлечении архива по умолчанию будет применяться umask. Поэтому, если пользователь umask не равен 000, тогда разрешения будут обновлены в этой точке. Тем не менее, umask можно игнорировать, используя параметр -p (--preserve), например:

tar xfp archive.tar

Ответ 2

Вы можете легко изменить права доступа к файлам до вашей команды tar, хотя я вообще рекомендую людям НИКОГДА не использовать 777 для чего-либо, кроме /tmp в системе unix, более продуктивно использовать 755 или худший случай 775 для каталогов. Таким образом, вы не позволяете миру писать в ваши каталоги, что обычно желательно.

Большинство пользователей unix не любят устанавливать разрешения рекурсивно, потому что он устанавливает бит выполнения в файлах, которые не должны исполняться (например, файлы конфигурации), чтобы избежать этого, они изобрели новый способ использования chmod некоторое время назад, символический режим. Чтение страницы man на chmod должно содержать сведения, но вы можете попробовать следующее:

cd $targetdir; chmod -R u+rwX,a+rX .; tar zcvf $destTarFile .

Где ваш $targetdir - это каталог, в котором вы находитесь, и $destTarFile - это имя создаваемого tar файла.

Когда вы распаковываете этот файл tar, разрешения сохраняются. Определенные правила, конечно, регулируют этот процесс - uid и gid владельца будут сохранены только в том случае, если root делает неопровержимый, но в противном случае они настроены на эффективный uid и gid текущего процесса.