GrapheneOS. Termux. Автоматическое шифрование фото.
В Tails.
Генерируем ключевую пару GnuPG и экспортируем публичный ключ.
Подключаемся к смартфону по SSH.
В GrapheneOS.
Устанавливаем приложение Termux:API для предоставления Termux доступа к системным функциям. Перезапускаем Termux.
Устанавливаем в Termux необходимые пакеты
~ $ pkg update && pkg install gnupg secure-delete exiftool termux-api termux-services openssl-tool
Импортируем созданный в Tails публичный ключ GnuPG. Создаём текстовый файл
~ $ nano ~/public.asc
Вставляем в него текст ключа, сохраняем и импортируем ключ.
~ $ gpg --import ~/public.asc
Смотрим отпечаток ключа.
~ $ gpg --list-keys
[keyboxd]
---------
pub rsa4096 2024-06-24 [SCA]
8C9D7287BC1A1E2D908354D165D4821C7D154377
uid [ unknown] Atos <atos@pasaremos.net>
sub rsa3072 2024-06-24 [E]
Предоставляем termux доступ к файлам в хранилище.
~ $ termux-setup-storage
Предоставляем Termux доступ к геолокации.
~ $ termux-location
Создаём файл для скрипта
~ $ nano /data/data/com.termux/files/usr/bin/crypt_photo
и помещаем туда текст скрипта.
#!/data/data/com.termux/files/usr/bin/sh
while true; do sleep 1
if [ -e ~/storage/dcim/Camera/*.jpg ]; then
rnd=$(openssl rand -hex 20)
exiftool -Comment="$(termux-location)" ~/storage/dcim/Camera/*.jpg
gpg -r 8C9D7287BC1A1E2D908354D165D4821C7D154377 --trust-model always --encrypt-files ~/storage/dcim/Camera/*.jpg
mv ~/storage/dcim/Camera/*.jpg.gpg $HOME/data/${rnd}
sleep 40
shred -uz ~/storage/dcim/Camera/*
fi
done
#!/data/data/com.termux/files/usr/bin/sh
― указываем командный интерпретатор.
while true; do sleep 1
― организуем бесконечный цикл.
if [ -e ~/storage/dcim/Camera/*.jpg ]; then
― проверяем наличие в каталоге ~/storage/dcim/Camera/ файлов с расширением .jpg. В случае если они присутствуют
rnd=$(openssl rand -hex 20)
― генерируем случайную последовательность из двадцати символов и заносим её в переменную rnd.
exiftool -Comment="$(termux-location)" ~/storage/dcim/Camera/*.jpg
― создаём в файле .jpg тег Комментарий
и заносим в него значение геолокации.
gpg -r 8C9D7287BC1A1E2D908354D165D4821C7D154377 --trust-model always --encrypt-files ~/storage/dcim/Camera/*.jpg
― шифруем файл .jpg с помощью GnuPG открытым ключом с отпечатком 8C9D7287BC1A1E2D908354D165D4821C7D154377
mv ~/storage/dcim/Camera/*.jpg.gpg $HOME/data/${rnd}
― перемещаем зашифрованный файл .jpg и переименовываем его в сохранённую в переменной rnd случайную последовательность из двадцати символов.
sleep 40
― величина паузы для ожидания перемещения файла. Регулируйте самостоятельно в зависимости от производительности устройства. При низком значении возможно повреждение шифрованного файла и невозможность расшифровки.
shred -uz ~/storage/dcim/Camera/*
― удаление всех файлов в каталоге ~/storage/dcim/Camera/ в перезаписью занимаего ими места в файловой системе.
fi
― если файлов с расширением .jpg в каталоге ~/storage/dcim/Camera/ не обнаружено выполнить следующую команду.
done
― вернуться в начало цикла while.
Сохраняем изменения в файле. <Ctrl>+<X>
<Y>
.
Выдаём скрипту права на выполнение.
~ $ chmod 700 /data/data/com.termux/files/usr/bin/crypt_photo
Создаём каталог для хранения шифрованных файлов.
~ $ mkdir ~/data
Создаём юнит службы runit для управления и отладки скрипта.
~ $ mkdir -p /data/data/com.termux/files/usr/var/service/crypt_photo/log
Создаём скрипт управления ведением журнала.
~ $ nano /data/data/com.termux/files/usr/var/service/crypt_photo/log/run
И помещаем туда текст.
#!/data/data/com.termux/files/usr/bin/sh
svlogger="/data/data/com.termux/files/usr/share/termux-services/svlogger"
exec "${svlogger}" "$@"
Сохраняем изменения в файле. <Ctrl>+<X>
<Y>
. Выдаём права для запуска скрипта.
~ $ chmod 700 /data/data/com.termux/files/usr/var/service/crypt_photo/log/run
Создаём скрипт управления службой.
~ $ nano /data/data/com.termux/files/usr/var/service/crypt_photo/run
И помещаем туда текст.
#!/data/data/com.termux/files/usr/bin/sh
exec crypt_photo 2>&1
Сохраняем изменения в файле. <Ctrl>+<X>
<Y>
. Выдаём права для запуска скрипта.
~ $ chmod 700 /data/data/com.termux/files/usr/var/service/crypt_photo/run
Создаём файл останова службы.
~ $ touch /data/data/com.termux/files/usr/var/service/crypt_photo/down
Для управления службой используем команды:
~ $ sv-enable crypt_photo
― запускать службу при запуске Termux.
~ $ sv up crypt_photo
― запустить службу.
~ $ sv down crypt_photo
― остановить службу.
~ $ sv-disable crypt_photo
― прекратить запускать службу при запуске Termux.
Включаем геолокацию, дожидаемся определения координат. Можно контролировапть этот момент с помощью приложения GPSTest. Запускаем камеру. Включаем службу ~ $ sv up crypt_photo
. Начинаем фотографирование. Дожидаемся появления в каталоге ~/data шифрованных файлов. Монтируем с помощью sshfs файловую систему смартфона по sftp и переносим их в Tails.
В Tails.
Расшифровываем файлы с помощью GnuPG секретным ключом созданным в начале руководства. Проверяем наличие тега Комментарий
в расшифрованном файле.
amnesia@amnesia:~$ exiftool -lang ru /путь/до/расшифрованного/IMG_XXXXXXXX_XXXXXX_XXX.jpg
Если всё в порядке, то…
В GrapheneOS.
Удаляем старые шифрованные фото, уже перенесённые в Tails.
~ $ shred -uz ~/data/*
…в скрипте ведения журнала службы
~ $ nano /data/data/com.termux/files/usr/var/service/crypt_photo/log/run
Выключаем ведение журнала, комментируем строки
#!/data/data/com.termux/files/usr/bin/sh
#svlogger="/data/data/com.termux/files/usr/share/termux-services/svlogger"
#exec "${svlogger}" "$@"
Сохраняем изменения в файле. <Ctrl>+<X>
<Y>
.
Убираем права на выполнение.
~ $ chmod 600 /data/data/com.termux/files/usr/var/service/crypt_photo/log/run
Перезапускаем Tremux.
Удаляем файлы журналов.
~ $ shred -uz /data/data/com.termux/files/usr/var/log/sv/crypt_photo/*
Придумайте собственное название службы crypt_photo
и путь для каталога хранения шифрованных фото ~/data
. Если ваш каталог для хранения шифрованных фото будет находиться не в домашнем каталоге пользователя, то скрипте /data/data/com.termux/files/usr/bin/ваше-имя-службы в строке mv ~/storage/dcim/Camera/*.jpg.gpg $HOME/data/${rnd}
вместо $HOME/data указывайте полный путь, начинающийся с /data/data/com.termux/files/