Alerta de email com a mensagem “tar: Removendo o início '/' dos nomes dos membros”

1

Eu tenho o seguinte script

#!/bin/bash
#Purpose = Backup 
#Created on 15-10-2015
#START
#cp -b /etc/rc.local $DESDIR$MKDIRNAME/rc.local

TIME='date +"%d%b%y_%H%M%S"'                    
MKDIRNAME='date +"%d%b%y"'                      
FOBACKUP=$(date +'%d%b%y' -d 'last month')          
DESDIR="/usr/local/backup/"             

FILENAME1="filebin_$TIME.tar.gz"                    
FILENAME2="openvpn_$TIME.tar.gz"
FILENAME3="script_$TIME.tar.gz"


SRCDIR1="/usr/local/bin/"                   
SRCDIR2="/etc/openvpn/"
SRCDIR3="/var/script/"

mkdir -m 0755 $DESDIR$MKDIRNAME                 

tar -cpzf $DESDIR$MKDIRNAME/$FILENAME1 $SRCDIR1         
tar -cpzf $DESDIR$MKDIRNAME/$FILENAME2 $SRCDIR2
tar -cpzf $DESDIR$MKDIRNAME/$FILENAME3 $SRCDIR3
cp -b /etc/rc.local $DESDIR$MKDIRNAME/rc.local
cp -b /etc/crontab $DESDIR$MKDIRNAME/crontab

if [ -d "$DESDIR$FOBACKUP" ]; then
   echo "file $FOBACKUP exist and was deleted!"
   rm -rf $DESDIR$FOBACKUP
fi

#END

No entanto, continuo recebendo e-mails todos os dias - depois que o cron executa esse script - com esta mensagem:

tar: Removing leading '/' from member names

Como posso fazer as alterações neste script para não receber este alerta?

    
por Ricardo Lisr 29.10.2015 / 00:25

2 respostas

2

tar emite este aviso e remove as barras iniciais por motivos de segurança. Extrair um arquivo contendo caminhos absolutos, mesmo sem permissões de root, pode ter a consequência não intencional de sobrescrever arquivos atuais com arquivos antigos.

As etapas a seguir devem eliminar sua saída indesejável, corrigir o problema com o qual tar estava alertando e continuar permitindo que você veja mensagens de erro importantes. O script fica mais consistente porque as variáveis refletem corretamente o conteúdo do arquivo.

  1. Remova os caracteres '/' iniciais dos nomes dos diretórios de origem .

    SRCDIR1="usr/local/bin/"                   
    SRCDIR2="etc/openvpn/"
    SRCDIR3="var/script/"
    
  2. Use a opção -C / de tar para fazer com que tar altere o diretório para / antes do arquivamento. Se esta opção não estivesse disponível, você mudaria o diretório para / antes de emitir o comando tar .

    tar -C / -cpzf $DESDIR$MKDIRNAME/$FILENAME1 $SRCDIR1         
    tar -C / -cpzf $DESDIR$MKDIRNAME/$FILENAME2 $SRCDIR2
    tar -C / -cpzf $DESDIR$MKDIRNAME/$FILENAME3 $SRCDIR3
    
por 29.10.2015 / 01:11
-1

Veja os redirecionamentos de canais e a diferença entre stdin, stdout & stderr .

O seguinte irá abordá-lo;

tar -cpzf $DESDIR$MKDIRNAME/$FILENAME1 $SRCDIR1 2> /dev/null

EDITAR: Por causa de preocupações de 'segurança' sobre o uso de '2 > / dev / null 'para redirecionar stderr para / dev / null aqui estão alguns outros métodos possíveis de' seguramente 'executar as operações de tar enquanto NÃO estiver usando a opção' -C / 'para mover para' / 'dentro do fs primeiro. Que IMHO é um problema de segurança, como se o arquivo fosse extraído de '/', ele sobrescreveria o sistema de arquivos atual com o conteúdo do arquivo.

Algumas alternativas:

Uma alternativa à sugestão de RobertL (passar para o $ SRCDIR primeiro)

%> tar -cpzf -C $SRCDIR1 $DESDIR$MKDIRNAME/$FILENAME1 $SRCDIR1

Use o redirecionamento para stderr, capture stdout, mas ainda verifique se há erros usando $?

%> output=$((tar -cpzf $DESDIR$MKDIRNAME/$FILENAME1 $SRCDIR1) 2> /dev/null)
%> [ $? -ne 0 ] && echo "An error occurred with tar"
%> echo $output

Ou você sempre pode usar caminhos relativos & / ou absolutos (veja man pwd )

%> $((tar -cpzf $DESDIR$MKDIRNAME/$FILENAME1 $(pwd)/$SRCDIR1) 2&>1)
    
por 29.10.2015 / 00:33