2016-03-11 2 views
1

Я хочу установить пароль на .tar.gz резервные копии файлов системы резервного копирования Cpanel.
Cpanel использует сценарий perl для выполнения резервного копирования в файле /scripts/cpbackup путь к файлу.
Итак, я редактировать этот файл и найти эту функцию в здесь:Установить пароль на резервные файлы cpanel

sub backupaccts { 
    my $target  = shift; 
    my $all_targets = shift; 

    Cpanel::FileUtils::TouchFile::touchfile($target); 

    #if another cpbackup starts just go bye bye 

    if (!($CONF{'BACKUPFILES'} eq "no")) { 
     print "[cpbackup] Running dir & file backup with target : $target\n"; 
     if (!-e "$target/files") { 
      mkdir("$target/files", 0700); 
     } 
     if (!-e "$target/dirs") { 
      mkdir("$target/dirs", 0700); 
     } 
     chmod(0700, "$target/files", "$target/dirs"); 
     my ($syncstatus, $syncmessage); 
     foreach my $file (@FILES) { 
      next if (!-e $file); 
      my $rawfile = $file; 
      $rawfile =~ s/\//_/g; 
      if ($CONF{'BACKUPINC'} eq "yes") { 
       ($syncstatus, $syncmessage) = Cpanel::SimpleSync::syncfile($file, "$target/files/$rawfile", 0, 1); 
      } 
      else { 
       ($syncstatus, $syncmessage) = Cpanel::SimpleSync::syncfile($file, "$target/files/$rawfile", 0, 1); 

       if ($syncstatus != 0) { 
        if (cpusystem($gzip_bin, "-f", "$target/files/$rawfile") != 0) { 
         print STDERR "[cpbackup] Failed to compress file $target/files/$rawfile\n"; 
        } 
       } 
      } 
      if ($syncstatus == 0) { print STDERR "[cpbackup] Failed to backup $file ($syncmessage)\n"; } 
     } 

     foreach my $dir (@DIRS) { 
      next if (!-e $dir); 
      my $rawdir = $dir; 
      $rawdir =~ s/\//_/g; 

      my @EXCLUDES = (
       $dir eq '/var/cpanel' 
       ? ("--exclude=lastrun/*", "--exclude=bwusagecache/*", "--exclude=serviceauth/*", "--exclude=dnsrequests_db/*", "--exclude=configs.cache/*") 
       : ("--exclude=*/proc/*") 
      ); 

      # Added exclude for /proc for chroot bind setups to prevent error messages 
      if ($CONF{'BACKUPINC'} eq "yes") { 
       if (cpusystem($rsync_bin, $rsyncopts, @EXCLUDES, '--delete', "$dir/", "$target/dirs/$rawdir") != 0) { 
        print STDERR "[cpbackup] Failed to perform incremental backup of $dir/ to $target/dirs/$rawdir\n"; 
       } 
      } 
      else { 
       if (cpusystem($tar_bin, '--use-compress-program=/usr/local/cpanel/bin/gzip-wrapper', '--create', '--preserve-permissions', '--file', "$target/dirs/$rawdir.tar.gz", @EXCLUDES, $dir) == 0) { 
        chmod(0600, "$target/dirs/$rawdir.tar.gz"); 
       } 
       else { 
        print STDERR "[cpbackup] Failed to perform full backup of $dir/ to $target/dirs/$rawdir.tar.gz\n"; 
       } 
      } 
     } 
    } 

    print "[cpbackup] Running account backup with target : $target\n"; 

    #BACKUPLOGS no 
    #MYSQLBACKUP accounts 
    #BACKUPBWDATA yes 
    $ENV{'pkgacct-logs'} = ($CONF{'BACKUPLOGS'} eq "yes" ? 'yes' : 'no'); 
    $ENV{'pkgacct-mysql'} = (($CONF{'MYSQLBACKUP'} eq "dir" || $CONF{'MYSQLBACKUP'} eq "no") ? 'no' : 'yes'); 
    $ENV{'pkgacct-psql'} = ($CONF{'PSQLBACKUP'} eq "no"          ? 'no' : 'yes'); 
    $ENV{'pkgacct-bwdata'} = ($CONF{'BACKUPBWDATA'} eq "no"          ? 'no' : 'yes'); 

    my %user_error_map =(); 
    if ($CONF{'BACKUPACCTS'} ne 'no') { 

     # we need to be sure that all accounts are converted to the new backup system 
     #  user config need to have the LEGACY_BACKUP entry 
     # this can be missing when importing an account prior 11.36 
     # or if an error happen during the upgrade process 
     Install::LegacyBackups->new()->perform(); 

     Cpanel::PwCache::init_passwdless_pwcache(); 

     my @cpusers = Cpanel::Config::Users::getcpusers(); 
     foreach my $user (sort @cpusers) { 
      my $user_conf = Cpanel::Config::LoadCpUserFile::load($user); 
      $user_conf->{'LEGACY_BACKUP'} = 0 if !exists $user_conf->{'LEGACY_BACKUP'}; 
      next if !$user_conf->{'LEGACY_BACKUP'}; 

      if ($CONF{'BACKUPINC'} eq 'yes') { 
       my $last_update_time = time(); 
       utime($last_update_time, $last_update_time, "$target/$user"); 
      } 
      if (cpusystem($pkgacct, ($CONF{'COMPRESSACCTS'} eq 'no' ? '--nocompress' :()), ($CONF{'BACKUPINC'} eq "yes" ? '--incremental' :()), $user, $target, 'backup') != 0) { 
       print STDERR "[cpbackup] Failed to back up account $user\n"; 
       $user_error_map{$user}{'account'} = { 
        'error_message' => ($LAST_CPUSYSTEM_ERROR || 'Failed to backup account') # FIXME: This is a hack to avoid refactoring cpusystem 
       }; 
      } 
      else { 
       if ($CONF{'BACKUPTYPE'} eq 'ftp') { 
        my $target_file = ($CONF{'COMPRESSACCTS'} eq 'no' ? "$user.tar" : "$user.tar.gz"); 
        foreach my $remote_target (@$all_targets) {         # If we are going to update multiple targets we send the file multiple times 
                            # previously we would build the backup once for every target. Now we just upload it once 
                            # instead as we know all the targets before we get here now 
         my %ftp_error_info = ftpsend($remote_target, $target . '/' . $target_file, $target_file); 
         $user_error_map{$user}{'transport'}{$remote_target} = \%ftp_error_info if keys %ftp_error_info; 
        } 
        unlink($target . '/' . $target_file); 
       } 
      } 

     } 
    } 

    return \%user_error_map; 
} 

Как вы можете видеть, эта строка делает создать .tar.gz файл для архивных резервного копирования:

cpusystem($tar_bin, '--use-compress-program=/usr/local/cpanel/bin/gzip-wrapper', '--create', '--preserve-permissions', '--file', "$target/dirs/$rawdir.tar.gz", @EXCLUDES, $dir) 

Я знаю о том, как с помощью zip , gpg, crypt, ... Но я не знаю, как я могу использовать его в этой функции и добавить это.

Какова ваша идея для выполнения этой работы? и я не знаю программирования perl, поэтому, пожалуйста, предоставьте пример кода для меня, если сможете.

+0

Вы можете добавить свою собственную оболочку вокруг этой gzip-обертки, которая gpg получает полученный .tar.gz в .tar.gz.encrypted, очистка/стирание .tar.gz после этого – flaviodesousa

+0

@flaviodesousa Вы можете предоставить код с надписью над кодом? –

ответ

0

Я знаю, как использовать zip, gpg, crypt, ... Но я не знаю, как я могу использовать его в этой функции и добавить это.

Я не думаю, что вы должны изменить программное обеспечение Cpanel, а tar не имеет поддержки по паролю. Поэтому вы должны использовать либо gpg, либо crypt, чтобы зашифровать .tar.gz после его создания, удалив исходный файл в процессе.

+0

уверен, что знаю это. но мне нужен пример кода в perl –

+0

@ NabiK.A.Z .: Вы делаете себя бесполезными! Я не могу написать вам Perl, не зная, где и как он вписывается в вашу систему. Я уверен, что вы можете использовать Google? – Borodin

Смежные вопросы