tar sem preservar usuário [duplicado]

6

Gostaria de compactar alguns arquivos para distribuição http, mas descobri que .tar.gz mantém o nome de usuário e o ID de usuário, e não parece haver nenhuma maneira de não fazer isso? (Existe uma opção --numeric-owner para o tar, que parece ignorar o nome do usuário, mas ainda mantém o ID do usuário.)

Isso não significa que .tar.gz é uma má escolha para a distribuição de arquivos, pois meu sistema provavelmente é o único com meu ID de usuário e meu nome de usuário? O .7z é um formato melhor para distribuição de arquivos ou você tem alguma outra recomendação?

    
por Jonas Byström 24.05.2016 / 21:30

5 respostas

11

Geralmente, o .tar.gz é um formato de distribuição de arquivos utilizável. O GNU tar permite substituir proprietário, grupo e permissões por outros valores ao adicionar arquivos ao arquivo.

$ tar -c -f archive.tar --owner=0 --group=0 .

link

Se a sua versão do tar não suportar as opções GNU, você poderá copiar seus arquivos de origem para outra árvore de diretórios e atualizar o grupo e a propriedade, antes de criar seu arquivo tar.gz para distribuição.

    
por 24.05.2016 / 21:59
4

Com o GNU, você pode usar --numeric-owner para evitar que o tar armazene seu nome de usuário. Como alternativa, você pode definir outro ID do usuário com --owner=ID . Quando é extraído, esses ids de usuário serão descartados, a menos que o extrator seja o usuário root.

Uma maneira comum usada para agrupar arquivos é cpio , que é normalmente usada com a opção --no-preserve-owner . É assim que rpm arquivos são criados.

Mas o tar com user-ids raramente é um problema. Se você quiser ser paranoico, use uma conta dedicada para o pacote final.

    
por 24.05.2016 / 21:58
3

Quaisquer tarballs existentes podem ser higienizados por meio de algo como:

#!/usr/bin/env perl
use strict;
use warnings;
use Archive::Tar 1.80;

for my $tarfile (@ARGV) {
    my $tar = Archive::Tar->new($tarfile) // die "failed to read '$tarfile'\n";
    for my $archivefile ($tar->list_files) {
        $tar->chown($archivefile, 'root:root');
    }
    my @compression;
    if ($tarfile =~ m/gz$/) {
        @compression = COMPRESS_GZIP;
    } elsif ($tarfile =~ m/bz$/) {
        @compression = COMPRESS_BZIP;
    }
    $tar->write($tarfile, @compression);
}
    
por 24.05.2016 / 22:10
2

Você pode enganar tar no tratamento dos arquivos como se eles tivessem um proprietário diferente com fakeroot .

Fakeroot runs a command in an environment were it appears to have root privileges for file manipulation, by setting LD_PRELOAD to a library with alternative versions of getuid(), stat(), etc. This is useful for allowing users to create archives (tar, ar, .deb .rpm etc.) with files in them with root permissions/ownership.

Inicialmente, todos os arquivos parecerão pertencer a root, mas você pode chown eles pertencerem ao fakeroot shell e os comandos subsequentes verão o novo proprietário.

    
por 24.05.2016 / 23:44
1

Você está procurando por algo como tar --owner=0 --group=0 para definir tudo que pertence a root / root .

    
por 24.05.2016 / 21:58

Tags