Назад | Перейти на главную страницу

Какое хорошее решение для шифрования некоторых файлов в unix?

Я ищу утилиту для шифрования определенных каталогов в Linux. Я не ищу каких-либо услуг полного шифрования диска, а просто хочу зашифровать несколько каталогов для хранения файлов в облаке. Получив их, мне нужно будет их расшифровать, прежде чем они станут доступны. Собираемся сделать это для пары каталогов (размером несколько сотен ГБ). Любые идеи? Желательно на основе CLI.

Для этой задачи я использую только GnuPG. Папки сначала упаковываются в архив TAR-GZ:

tar czf files.tar.gz /path/to/my/files

Если это еще не сделано, вам нужно сначала создать пару закрытых / открытых ключей GPG:

gpg --gen-key

Следуй инструкциям. Значений по умолчанию должно хватить для первого теста. Появится что-то вроде этого:

gpg (GnuPG) 2.0.18; Copyright (C) 2011 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
Your selection? 1
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 4096
Requested keysize is 4096 bits
Please specify how long the key should be valid.
         0 = key does not expire
        = key expires in n days
      w = key expires in n weeks
      m = key expires in n months
      y = key expires in n years
Key is valid for? (0)
Key does not expire at all
Is this correct? (y/N) y

GnuPG needs to construct a user ID to identify your key.

Real name: File Encryption Key
Email address: admin@company.org
Comment: File Encryption Key
You selected this USER-ID:
    "File Encryption Key (File Encryption Key) "

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o

Вам будет предложено ввести кодовую фразу для ключа. Настоятельно рекомендуется использовать более сильный. В любом случае он не нужен для шифрования файлов, поэтому не беспокойтесь о пакетном использовании позже.

Если все будет сделано, на вашем экране появится что-то вроде этого:

We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
gpg: key FE53C811 marked as ultimately trusted
public and secret key created and signed.

gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
pub   *****/******** 2013-03-19
      Key fingerprint = **** **** **** **** **** **** **** **** **** ****
uid                  File Encryption Key (File Encryption Key) 
sub   *****/******** 2013-03-19

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

gpg --armor --output file-enc-pubkey.txt --export 'File Encryption Key'

В File Encryption Key это имя, которое я ввел во время процедуры генерации ключа.

Теперь я использую GnuPG для только что созданного архива:

gpg --encrypt --recipient 'File Encryption Key' files.tar.gz

Теперь у вас есть files.tar.gz.gpg файл, который зашифрован.

Вы можете расшифровать его с помощью следующей команды (вам будет предложено ввести кодовую фразу):

gpg --output files.tar.gz --decrypt files.tar.gz.gpg

В этом вся магия.

Убедитесь, что вы сделали резервную копию своего ключа! И никогда не забывайте свой пароль! Если не создать резервную копию или не забыть, у вас будут гигабайты мусора!

Сделайте резервную копию вашего закрытого ключа с помощью этой команды:

gpg --armor --output file-enc-privkey.asc --export-secret-keys 'File Encryption Key'

Преимущества

  • Ни один из шифровальщиков не должен знать конфиденциальную информацию о шифровании - шифрование выполняется с помощью открытого ключа. (Вы можете создать пару ключей на своей локальной рабочей станции и передавать только открытый ключ на свои серверы)
  • Пароли не будут отображаться в файлах сценариев или заданиях
  • Вы можете иметь столько шифровальщиков в любой системе, сколько захотите
  • Если вы храните свой закрытый ключ и кодовую фразу в секрете, все в порядке и очень-очень сложно скомпрометировать
  • Вы можете расшифровать с помощью закрытого ключа на платформах Unix, Windows и Linux, используя конкретную реализацию PGP / GPG.
  • Нет необходимости в специальных привилегиях в системах шифрования и дешифрования, без монтирования, без контейнеров, без специальных файловых систем

Со своей стороны я в основном использую два метода:

Первый способ: tar и openssl

Тар каталог

tar cvf backup.tar /path/to/folder

Вы можете убрать переключатель [v] из команды tar, чтобы выключить подробный режим.

Зашифровать

openssl aes-128-cbc -salt -in backup.tar -out backup.tar.aes -k yourpassword

Вы можете изменить aes-128-cbc на любой другой метод шифрования, поддерживаемый openssl (openssl --help).

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

openssl aes-128-cbc -d -salt -in backup.tar.aes -out backup.restored.tar

Он запросит пароль.

Второй способ: зашифрованный zip

zip -r -0 -e backup.zip /path/to/folder

Он запросит пароль.

  • -r означает рекурсивно (все дерево папок)
  • -0 означает только сохранение (не сжимается, быстрее)
  • -e означает зашифровать архив

Одно из преимуществ этого: он будет лучше работать с системой на базе Windows.

Если вы не хотите шифровать файлы с помощью пары открытого / закрытого ключей и вместо этого использовать только симметричное шифрование с парольной фразой, используйте следующую команду:

gpg --symmetric --cipher-algo aes256 files.tar.gz

Вам будет предложено ввести пароль. После этого зашифрованный файл с именем files.tar.gz.gpg создано.

Для расшифровки используйте команду

gpg --decrypt files.tar.gz.gpg > files.tar.gz

Вы можете использовать truecrypt очень простое и красивое решение. У него есть пакет только для консольного использования. Его очень просто изучить и использовать. http://www.truecrypt.org

Для этой цели я бы предложил шифрование FUSE (например, Encfs) - для меньших данных я бы использовал gpg.

Это fs, реализованное в пространстве пользователя, поэтому вам не нужны какие-либо особые привилегии.

Есть несколько файловых систем Linux, предназначенных для шифрования данных. Вы уже думали о ЛЮКС например.?

Очень простой способ зашифровать один файл:

gpg -c filename.ext

Вам дважды будет предложено ввести кодовую фразу, и gpg создаст filename.ext.gpg. Загрузите зашифрованный файл в облачный сервис. Для восстановления файла используйте:

gpg filename.ext.gpg

Которая воссоздаст filename.ext. Обратите внимание, что незашифрованный файлы не являются безопасными, и соответствующие данные останутся на вашем носителе даже после удаления. Только контейнер gpg безопасен. EncFS - более практичная альтернатива облачному шифрованию на уровне файлов.