2013-08-08 1 views
10

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

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

Я нахожусь на машине Solaris 10.

ФОН:

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

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

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

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

+1

вам придется CHMOD первоисточника реж ДО запуска деготь. tar будет захватывать разрешения/права собственности во время разгона. Существуют варианты принудительного изменения переходов при извлечении, но вы не можете ожидать, что пользователи помнят эти дополнительные параметры. –

+1

Python имеет красивую библиотеку tarfile для написания пользовательских сценариев tarring, но GNU tar, похоже, не имеет для этого возможности. –

+0

@MarcB Я бы тогда потерял существующие разрешения. – splungebob

ответ

9

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

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

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

tar xfp archive.tar 
+0

Удивительный. Работает как шарм. Благодарю. – splungebob

+0

Каково значение прописной буквы 'X'? Я знаю, что 'x' обычно является исполняемым битом, но я никогда раньше не видел его заглавным. –

+0

@DrewChapin При настройке разрешений на все файлы в каталоге обычно следует избегать «a + x», поскольку он делает вещи исполняемыми, которые не имеют смысла (текстовые файлы, файлы конфигурации и т. Д.). 'a + X' только делает файлы исполняемыми, если у них уже есть хотя бы один бит выполнения. –

0

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

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

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

Где ваш $ TARGETDIR это каталог вы и образование конденсата $ destTarFile это имя файла дегтя, который вы создаете.

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

+1

Даже '/ tmp' должен быть' 1777', а не просто '777'; который запрещает людям, которые не могут записать в файл, удалить его (липкий бит в каталоге). Но лучший способ - установить разрешения для каталогов перед созданием файла tar. –

+2

(И, отвлекаясь в сторону, если вы ждали еще один день или около того, вы можете получить значок «Возрождение», если вы получите второе голосование.) –

+0

Спасибо за ответ, но это изменит существующие разрешения на мои файлы. Это нежелательно, как я уже упоминал в своем ответе @MarcB. Я хочу, чтобы мир читал/записывал содержимое содержимого развернутого tar. – splungebob