💾 Archived View for tilde.team › ~rami › alias_gpg.gmi captured on 2023-07-10 at 15:43:38. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2023-01-29)
-=-=-=-=-=-=-
רמי
SUBJECT: GNUPG: Алиасы для .bashrc
AUTHOR: Rami Rosenfeld
DATE: 09/10/22
TIME: 01.00
LANG: ru, en
LICENSE: GNU FDL 1.3
TAGS: gnu, gnome, software, opensource, linux, system, man, manual, bash, privacy, security, gnupg, pgp, alias
Два простых алиаса GNUPG для .bashrc, сжимающих данные в текущем каталоге, симметрично шифрующих и уничтожающих исходный архив + расшифровывающих содержимое. Удобны, быстры, позволяют не запоминать длинные команды. Возможная область применения - создание защищенных резервных копий пользовательских файлов и каталогов (с последующим хранением на внешних носителях или в "облаке").
Важно! Игорь Павлов, создатель архиватора 7z, предупреждает в своем руководстве, что 7z НЕ ПОДДЕРЖИВАЕТ сохранение UNIX-свойств owner:group (владелец:группа) отдельных файлов и каталогов. Поэтому Алиас 1 (Crypt) не следует использовать для системных файлов и каталогов, у которых важно сохранить вышеуказанные параметры. Для преодоления этой проблемы я советую предварительно архивировать данные с помощью tar - см. Алиас 2 (tarcrypt), а лишь затем сжимать их 7z и шифровать GNUPG.
В .bashrc необходимо разместить следующие алиасы и затем перегрузить Bash.
АЛИАС 1 (crypt)
Симметричное (парольное) шифрование содержимого текущего каталога при помощи GNUPG (алгоритм AES256). Команда максимально сожмет данные во временный архив формата 7z, используя в качестве имени текущую дату и время, затем зашифрует его (запросив пароль) и уничтожит временный архив при помощи 7-проходного перезаписывания командой shred.
alias crypt='7z a -mx=9 $(date "+%Y-%m-%d-at-%T").7z * && gpg2 --symmetric --cipher-algo=AES256 *.7z && shred -n 7 -fuzv *.7z && echo -e "\a\n Данные сжаты и зашифрованы. Временный архив уничтожен"'
Примечание: Не располагайте в текущем каталоге никаких сторонних данных (файлов, каталогов, архивов), которые не предназначены для обработки.
Примечание: Не используйте Алиас 1 для обработки априорно несжимаемых файлов, например мультимедийных: jpg, jpeg, webm, png, mp3, etc - это лишняя потеря времени. Для создания защищенных архивов с ними используйте архиватор tar (он работает без компрессии и практически молниеносно) - см. ниже.
АЛИАС 2 (tarcrypt)
alias tarcrypt='tar --create --file archive.tar --verbose *.* && gpg2 --symmetric --cipher-algo=AES256 archive.tar && shred -n 7 -fuzv archive.tar && echo -e "\a\n Данные архивированы (но не сжаты) и зашифрованы. Временный архив уничтожен"'
Примечание: Для сохранения свойств owner:group сначала создайте архив в формате tar, затем сожмите его архиватором 7z и потом зашифруйте gpg2.
Соответственно, при применении tar необходимые изменения следует внести и в Алиас 3 (decrypt) - см. ниже.
АЛИАС 3 (decrypt)
Расшифрование симметрично зашифрованного файла, полученного в пп. 1 или 2.
Важно! После набора алиаса в командной строке необходимо вставить пробел и имя зашифрованного архива.
По умолчанию файл будет расшифрован в текущий каталог под именем decrypted-archive.*. В ином случае (без указания файла вывода) существует опасность, что в STDOUT отобразится бинарный файл.
alias decrypt='gpg2 --decrypt --output decrypted-archive.7z'
При использовании Алиаса 2 замените в строке выше "decrypted-archive.7z" на "decrypted-archive.tar".
alias decrypt='gpg2 --decrypt --output decrypted-archive.tar'
ПРИМЕР 1. Создание архива и его шифрование:
$ ls
-rw-------. 1 20K 2022-10-04 23:10 test_file_1.txt
-rw-------. 1 40K 2022-10-08 15:39 test_file_2.txt
-rw-------. 1 60K 2022-10-08 15:39 test_file_3.txt
$ crypt
Scanning the drive:
3 files, 121143 bytes (119 KiB)
Creating archive: 2022-10-08-at-15:40:13.7z
Items to compress: 3
Files read from disk: 3
Archive size: 5134 bytes (6 KiB)
Everything is Ok
[ЗАПРОС ПАРОЛЬНОЙ ФРАЗЫ]
shred: '2022-10-08-at-15:40:13.7z': проход 1/8 (random)…
shred: '2022-10-08-at-15:40:13.7z': удаление
shred: '2022-10-08-at-15:40:13.7z': переименован в 0000
shred: '2022-10-08-at-15:40:13.7z': удалён
[ВЫВОД КОМАНДЫ SHRED СОКРАЩЕН]
"Данные сжаты и зашифрованы. Временный архив уничтожен"
$ ls
-rw-r--r--. 1 5,2K 2022-10-08 15:40 2022-10-08-at-15:40:13.7z.gpg
-rw-------. 1 20K 2022-10-04 23:10 test_file_1.txt
-rw-------. 1 40K 2022-10-08 15:39 test_file_2.txt
-rw-------. 1 60K 2022-10-08 15:39 test_file_3.txt
ПРИМЕР 2
Расшифрование архива:
$ decrypt 2022-10-08-at-15:40:13.7z.gpg
[ВВОД ПАРОЛЬНОЙ ФРАЗЫ]
gpg: AES256.CFB encrypted data
gpg: зашифровано одной фразой-паролем
$ ls
-rw-r--r--. 1 5,2K 2022-10-08 15:40 2022-10-08-at-15:40:13.7z.gpg
-rw-r--r--. 1 5,1K 2022-10-08 15:46 decrypted-archive.7z
-rw-------. 1 20K 2022-10-04 23:10 test_file_1.txt
-rw-------. 1 40K 2022-10-08 15:39 test_file_2.txt
-rw-------. 1 60K 2022-10-08 15:39 test_file_3.txt
Тестирование расшифрованного архива на ошибки:
$ 7z t decrypted-archive.7z
[ВЫВОД КОМАНДЫ 7Z СОКРАЩЕН]
Path = decrypted-archive.7z
Type = 7z
Physical Size = 5134
Headers Size = 203
Method = LZMA2:17
Solid = +
Blocks = 1
Everything is Ok
Files: 3
Size: 121143
Compressed: 5134
Подробнее см.: man gpg2, 7z, tar
The GNU Privacy Guard Official
🄯 Rami Rosenfeld, 2022. GNU FDL 1.3.