modifica la proprietà dei file per i file all'interno dell'archivio tar


10

Sto lavorando come utente e vorrei creare un archivio tar, che una volta decompresso (per root) estrarrà i suoi file con la proprietà root (altrimenti root dovrebbe cambiare manualmente la proprietà per ogni file, dopo che i file sono stati estratti a destinazione).

Ho trovato fakerootche sembra fare esattamente questo. Ma non riesco a trovare la sintassi che devo usare per creare il mio archivio.

Come posso creare un archivio tar.xz, in modo che i file abbiano la proprietà di root quando vengono decompressi da root?

do something with fakeroot ...
tar cfpJ foo.tar.xz foo/

Risposte:


12

Come posso creare un archivio tar.xz, in modo che i file abbiano la proprietà di root quando vengono decompressi da root?

Dipende dalla radice che decomprime:

tar --no-same-owner -xf ...

Se vuoi renderli tutti root, per cominciare, puoi usarli

tar --owner=root --group=root -cf ...

che non funziona per me: mi tar --owner=root --group=root cfpJ files.tar.xz files/dà l'errore tar: You must specify one of the -Acdtrux 'o --test-label' options Try tar --help' oppuretar --usage' for more information.
user1968963

Hai bisogno di una -stringa di opzioni brevi prima: tar --owner=root --group=root -cfpJ ...vale a dire -cfpJno cfpJ.
Riccioli d'oro,

tar --owner=root --group=root -cfpJ files.tar.xz files/mi dà un altro errore: tar: files.tar.xz: Cannot stat: No such file or directory tar: Exiting with failure status due to previous errorse inoltre, crea un file chiamato pJ.
user1968963,

3
Va bene. fAlla fine metto sempre (perché ha più senso, intuitivamente) e basso ed ecco, ottengo lo stesso fallimento con i lavori -cfpJMA -cpJf.
Riccioli d'oro,

@ user1968963: f dovrebbe essere sempre appena prima del nome del file, poiché significa "il parametro successivo è il nome del file". Se non lo metti appena prima del nome del file, tar penserà che il nome del file sia "", e quindi proverà ad aprire un "" file, che non può stat (ovviamente).
Olivier Dulac,

8

fakeroot

L' utilità fakeroot o la più recente utility fakeroot-ng (stesso scopo, tecnica di implementazione diversa) esegue un programma e finge al programma che sia in esecuzione come root e che il sistema chiama come chownriuscito. Solo il programma crede che queste chiamate fakerootabbiano avuto successo, nulla si riflette sul filesystem (non può esserlo poiché non ha privilegi extra). Tuttavia, se il programma modifica la proprietà di un file e quindi esegue alcune azioni in base alla proprietà di quel file, ciò può modificare il comportamento del programma.

Un modo tipico per ottenere un utile lavoro da fakeroot eseguendo un ambiente fakeroot in cui si verifica quanto segue:

  1. Crea alcuni file, spostali, modifica la proprietà e le modalità, ecc.
  2. Crea un archivio di questi file.

Esempio:

fakeroot sh -c '
    chown root:root usr/bin/foo
    tar cf foo.tar usr
'

È necessario utilizzare una singola invocazione di fakeroot, poiché non esiste memoria tra le invocazioni.

Spazi dei nomi Linux

Solo per completezza, menzionerò che se si dispone di un kernel Linux ≥3.8, gli spazi dei nomi sono un altro modo per creare un ambiente pretend -root. Il supporto per userland non è ancora del tutto presente, quindi non entrerò nei dettagli.

Montare l'archivio

Un modo diverso di risolvere il problema è montare l'archivio come directory. Puoi usare archivemount , che è in grado di modificare diversi formati di archivio tramite libarchive , incluso tar compresso.

mkdir mnt
archivemount foo.tar.xz mnt
chown root:root mnt/usr/bin/foo
fusermount -u mnt

Un bel trucco archivemount, ma richiede comunque l'elevazione dei privilegi e anche se l'utente fa parte di un gruppo di fiducia a cui è consentito montare e smontare, il processo non riesce chown, quindi è necessario utilizzare un qualche tipo di strumenti di terze parti come fakerooto namespace , pure.
Anton Samsonov,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.