2013-08-08 9 views
10

C'è un modo per chmod 777 il contenuto di un tarfile al momento della creazione (o poco dopo) prima della distribuzione? I permessi di scrittura della directory che è tar'd sono sconosciuti al momento del tar'ing (ma in genere 555). Vorrei che la directory srotolata fosse scrivibile in tutto il mondo senza che gli utenti che stanno srotolando il tar debbano ricordarsi di chmod -R 777 <untarred dir> prima di procedere.Impostazione dei permessi sui file sul contenuto del tarfile

Il modo maldestro sarebbe di fare una copia della directory, e quindi chmod -R 777 <copydir> ma mi stavo chiedendo se ci fosse una soluzione migliore.

Sono su una macchina Solaris 10.

BACKGROUND: directory

La radice è nel nostro vob ClearCase con i permessi di file specifici, in modo ricorsivo. Un tarfile viene creato e distribuito a più "clienti" all'interno della nostra organizzazione. La maggior parte richiede solo le autorizzazioni di lettura/esecuzione (e in particolare NON le vuole scrivibili), ma un gruppo in particolare ha bisogno che la loro copia sia scrivibile in modo ricorsivo poiché possono modificare questi file, o persino ripristinare una copia "fresca" (cioè , nel loro stato originale come li ho dati loro).

Questo gruppo è in qualche modo tecnicamente in difficoltà. Anche se hanno istruzioni sui "how-to" del tarfile, sembrano sempre dimenticare (o sbagliare) l'impostazione dei file da scrivere in modo ricorsivo una volta scomparsi. Questo mi porta a telefonare per diagnosticare una varietà di problemi in cui la causa principale è che si sono dimenticati di fare (o hanno fatto erroneamente) il chmoding della directory srotolata.

E prima che tu me lo chieda, sì, ho scritto loro una sceneggiatura per untar/chmod (specifica solo per loro), ma ... oh, non importa.

Quindi, ho pensato di creare una versione separata, scrivibile in modo ricorsivo del tar da distribuire solo a loro. Come ho detto in origine, potrei sempre creare una copia della directory, rendere la scrittura scrivibile in modo ricorsivo e quindi tarare la directory di copia, ma la directory è abbastanza grande e lo spazio su disco è a volte pieno (può variare notevolmente), quindi fare una copia della dir non sarà fattibile al 100% delle volte.

+1

dovrete chmod dir fonte originale prima di lanciare tar -p. tar acquisirà le autorizzazioni/proprietà al momento del tarring. Ci sono opzioni per forzare la modifica dei perms quando vengono estratti, ma non puoi aspettarti che gli utenti ricordino quelle opzioni extra. –

+1

Python ha una bella libreria 'tarfile' per scrivere script personalizzati di tar, ma GNU tar sembra non avere alcuna opzione per questo. –

+0

@MarcB Quindi perderei le autorizzazioni esistenti. – splungebob

risposta

9

Con tar GNU, utilizzare l'opzione --mode durante la creazione dell'archivio, ad es.:

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

Tuttavia, notare che quando si estrae l'archivio, la umask verrà applicata per impostazione predefinita. Quindi, a meno che la umask dell'utente non sia 000, le autorizzazioni verranno aggiornate a quel punto. Tuttavia, l'umask può essere ignorato utilizzando la (--preserve) opzione, per es .:

tar xfp archive.tar 
+0

Impressionante. Funziona come un fascino. Grazie. – splungebob

+0

Qual è il significato della 'X' maiuscola? So che 'x' è normalmente il bit eseguibile, ma non l'ho mai visto maiuscolo prima. –

+0

@DrewChapin Quando si impostano i permessi su tutti i file in una directory, solitamente si deve evitare 'a + x' perché rende le cose eseguibili che non hanno senso (file di testo, file di configurazione, ecc.). 'a + X' rende i file eseguibili solo se hanno già almeno un bit di esecuzione impostato. –

0

È possibile modificare facilmente le autorizzazioni sui file prima del comando tar, sebbene in genere raccomandi alle persone di non utilizzare mai 777 per qualsiasi eccetto/tmp su un sistema unix, è più produttivo utilizzare 755 o il caso peggiore 775 per le directory. In questo modo non stai lasciando che il mondo scriva alle tue directory, il che è generalmente consigliabile.

La maggior parte degli utenti unix non ama impostare le autorizzazioni in modo ricorsivo perché imposta il bit di esecuzione su file che non dovrebbero essere eseguibili (file di configurazione per esempio) per evitare che questo abbia inventato un nuovo modo di usare chmod qualche tempo fa, chiamato modalità simbolica. Leggere la pagina man su chmod dovrebbe fornire dettagli, ma si potrebbe provare questo:

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

Dove il vostro $ targetdir è la directory che si sta Tarring e $ destTarFile è il nome del file tar che si sta creando.

Quando si decomprime il file tar, si tenta di conservare le autorizzazioni. Certe regole governano quel processo, naturalmente - l'uid e il gid del proprietario verranno mantenuti solo se root sta eseguendo l'untaring, ma in caso contrario sono impostati sull'efficace uid e gid del processo corrente.

+1

Anche '/ tmp' dovrebbe essere' 1777' piuttosto che semplicemente '777'; che impedisce alle persone che non riescono a scrivere su un file di eliminarlo (bit appiccicoso sulla directory). Ma il modo migliore è impostare le autorizzazioni sulle directory prima di creare il file 'tar'. –

+2

(E, scherzo a parte, se avessi aspettato un altro giorno o giù di lì, avresti avuto diritto ad un badge Revival se avessi ottenuto un secondo voto.) –

+0

Grazie per la risposta, ma questo avrebbe cambiato le autorizzazioni esistenti su i miei file. Questo non è auspicabile, come ho già detto nella mia risposta a @MarcB. Voglio solo un mondo di lettura/scrittura sui contenuti del tar srotolato. – splungebob