Por que o Tar preserva as permissões dos arquivos originais mesmo quando não está passando pelas opções '-p', '--preserve-permissions' ou '--same-permissions'?

3

De man 1 tar :

[...]
     -p, --preserve-permissions, --same-permissions
           extract information about file permissions (default for superuser)
[...]
     --no-same-permissions
           apply the user's umask when extracting permissions from the archive
           (default for ordinary users)
[...]

A partir disso, entendo que, por padrão, as permissões dos arquivos extraídos são definidas com base na umask do usuário, a menos que o usuário seja root:

% umask
002

Portanto, os arquivos extraídos por mim devem ter permissões 664 ( 666 - 002 ).

No entanto:

% touch foo
% chmod +x foo
% ls -l
total 0
-rwxrwxr-x 1 user user 0 nov  3 19:36 foo
% tar cf foo.tar foo
% rm foo
% tar xf foo.tar 
% ls -l
total 12
-rwxrwxr-x 1 user user     0 nov  3 19:36 foo
-rw-rw-r-- 1 user user 10240 nov  3 19:36 foo.tar

Ou seja, o Tar está preservando as permissões do arquivo original, mesmo que eu não tenha passado a opção -p , --preserve-permissions ou --same-permissions .

No entanto, se eu passar a opção --no-same-permissions :

% tar xf foo.tar --no-same-permissions
% ls -l
total 12
-rwxrwxr-x 1 user user     0 nov  3 19:36 foo
-rw-rw-r-- 1 user user 10240 nov  3 19:36 foo.tar

Still Tar preserva as permissões do arquivo original.

Alguém por favor pode explicar porque é isso?

    
por kos 03.11.2015 / 20:14

1 resposta

0

Como adonis (que identificou o problema) ainda não postou uma resposta, eu mesmo vou postar uma resposta.

[...]
     --no-same-permissions
           apply the user's umask when extracting permissions from the archive
           (default for ordinary users)
[...]

Isso, ao contrário do que eu pensei, significa que o umask é aplicado às permissões das pastas / arquivos no arquivo, e não às permissões convencionais de pastas / arquivos recém-criados ( 777 / 666 ) como eu pensei.

Ou seja. uma pasta / arquivo extraída sem passar o -p , --preserve-permissions ou --same-permissions switch não terá as permissões definidas como 777 & ~umask / 666 & ~umask , mas folder's/file's_archived_permissions & ~umask . / p>

Neste caso específico, fui enganado pelo fato de que a aplicação de uma máscara de 002 a um arquivo com permissões 775 não altera nada, pois 775 & ~002 = 775 .

Portanto, em suma, extrair um arquivo com permissões 775 com um usuário umask de 002 produz, corretamente, um arquivo com permissões 775 , resultado de 775 & ~002 .

    
por kos 10.11.2015 / 21:29

Tags