Зашифровать файл tar.gz при создании

У меня есть скрипт, который создает ночные резервные копии нескольких каталогов.

Он создан с использованием tar -czf, а путь к файлу tar.gz назначения находится в смонтированном сетевом каталоге. Полученный файл имеет размер около 1,2 ГБ.

Скорость сети достаточно высокая (копирование с сетевого диска на локальный происходит со скоростью ~ 28 МБ / с).

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

Должен ли я сначала создать файл локально, зашифровать его, а затем скопировать? Или есть способ «передать» поток tar через процесс шифрования и записать результаты непосредственно на сетевой диск?

33
задан 16 January 2012 в 16:20

5 ответов

Пакет your_dir в зашифрованном архиве your_archive.tgz.gpg (симметричное шифрование):

tar -cz your_dir | gpg -c -o your_archive.tgz.gpg

Распакуйте его:

gpg -d your_archive.tgz.gpg | tar xz

См. Документы GPG для получения информации об использовании асимметричного вместо симметричного шифрования.

0
ответ дан 16 January 2012 в 16:20

Я делаю это с помощью асимметричного ключа шифрования. Это означает, что у меня есть открытый ключ (которым я могу поделиться с любым, кому я хотел бы отправить мне зашифрованные пакеты), который позволяет мне шифровать пакет. У меня также есть закрытый ключ (который я не разделяю), который позволяет мне расшифровывать пакет.

Мои команды для шифрования текущего рабочего каталога: -e для шифрования, -r для указания «получателя» или ключа для использования, -o для указания выходного файла.

$ tar -cvz . | gpg -e -r ABCD1234 -o backup.tgz.gpg

И расшифровать в текущий рабочий каталог:

$ gpg -d backup.tgz.gpg | tar -xz

Или расшифровать в стандартный файл tgz для последующей распаковки:

$ gpg -o backup.tgz -d backup.tgz.gpg

Конечно, это только работает, если я уже сгенерировал пару открытый-закрытый ключ и установил ее с помощью gpg. В моем случае я сделал это, используя руководство Digital Ocean по адресу https://www.digitalocean.com/community/tutorials/how-to-use-gpg-to-encrypt-and-sign-messages-on- Ан-Ubuntu-12-04-VPS . ABCD1234 в команде шифрования относится к одному из открытых ключей, установленных в моей системе. В этом руководстве также рассказывается, как поделиться своим открытым ключом и установить другие открытые ключи для отправки и получения зашифрованных файлов.

0
ответ дан 16 January 2012 в 16:20

GnuPG - это то, что я выбрал для этого процесса, и потому что вы указали, что шаги дешифрования, где непрозрачность (я согласен в этом примере использования), я также работал над этой стороной проблемы. Проверьте журналы сборки проектов Travis-CI , чтобы узнать, какие функции в настоящее время работают, как задумано, и файл travis.yml для отслеживания наряду с выводом журналов. В основном вам понадобятся три сценария из этого проекта; сценарий keygen, сценарий дешифрования и сценарий прослушивания именованных каналов. Скрипт кейгена & amp; вспомогательный сценарий дешифрования должен использоваться на устройстве, которое будет выполнять дешифрование, а сценарий прослушивания именованного канала должен быть на устройстве, выполняющем шифрование.

Сценарий прослушивания именованного канала принимает строки, пути к файлам или каталогам после установки и выводит зашифрованные результаты предсказуемым образом.

Ниже приведены примеры команд, которые могут быть помещены в ваш скрипт ночного резервного копирования для шифрования и для сжатия каталогов + шифрование

echo "some messages text" > /path/to/named.pipe
## Message text is ASCII armor encrypted and appended to specified file when script was stated
echo "${HOME}/Documents" > /path/to/named.pipe
## Directories are compressed with tar and encrypted with output to time stamped file in bulk output directory
echo "${HOME}/.bash_history"  > /path/to/named.pipe

Для расшифровки вы захотите проверить, как скрипты сборки .travis-ci/script_decrypt.sh & amp ; .travis-ci/test_search_script_decrypt.sh о том, как восстанавливать добавленные строки зашифрованных данных и как восстанавливать объемные файлы / каталоги.

Конечно, в эксперименте лучше не использовать пары первичных ключей (почему был написан скрипт keygen), и его не следует использовать с важными данными, пока вы не уверены, как восстановить их в читаемую форму. [ 119]

0
ответ дан 16 January 2012 в 16:20

Следующий процесс сначала шифрует файл на локальном диске, а затем может быть отправлен по сети (или, при необходимости, сохранен).


Сначала создайте открытый и закрытый ключи (выполняется только один раз):

openssl genrsa -out key.pem 2048
openssl rsa -in key.pem -out key-public.pem -outform PEM -pubout

Затем при каждом резервном копировании:

  1. Создать длинную случайную фразу-пароль, сохранить в файл

    • echo -n "Tl4R6dnvWXiDeXr1LtpCNkyLG1" > key.txt
  2. шифровать файл с парольной фазой

    • openssl enc -aes-256-cbc -pass file:key.txt < UNENCRYPTED_FILE > encrypted.dat
  3. шифровать кодовую фразу с открытым ключом

    • openssl rsautl -encrypt -pubin -inkey key-public.pem < key.txt > enc.key.txt

Затем сохраните encrypted.dat И enc.key.txt, где это необходимо.


Для расшифровки:

  1. Расшифровать зашифрованную фразу-пароль с закрытым ключом

    • openssl rsautl -decrypt -inkey key.pem < enc.key.txt > key.txt
  2. ]

    Расшифровать файл

    • openssl enc -aes-256-cbc -d -pass file:key.txt < encrypted.dat > UNENCRYPTED_FILE

Это намного дольше, чем ответ Флориана, но я решил использовать чтобы я мог лучше понять процесс и не зависеть от зависящих от сервера переменных конфигурации GPG и т. д. Я также не смог найти никакой полезной документации GPG.

0
ответ дан 16 January 2012 в 16:20

Я использовал отличное решение Флориана Диша выше, но столкнулся с этой проблемой:

gpg: problem with the agent: Inappropriate ioctl for device
gpg: error creating passphrase: Operation cancelled
gpg: symmetric encryption of '[stdin]' failed: Operation cancelled

Помимо работы с моей Ubuntu 20.04, мне нужно было установить для gpg:

$GPG_TTY=$(tty)
$export GPG_TTY

как описано здесь

Тогда я мог бы приступить к решению Флориана! Спасибо!

Несколько другой метод, который также хорошо работает с linux (Ubuntu 20.04), описан здесь

0
ответ дан 29 October 2020 в 17:55

Другие вопросы по тегам:

Похожие вопросы: