Облачное шифрование

  • Автор темы Автор темы Pendalf
  • Дата начала Дата начала
Статус
В этой теме нельзя размещать новые ответы.

Pendalf

Местный
Подтвержденный
Сообщения
2.815
Реакции
4.828
Продажи
6
Сказ о том, как сохранить свои файлики в случае пиздеца.

В прошлой , я рассказал вкратце, как и что шифровать, вообще для чего шифровать.
Теперь постараюсь помочь сохранить нашифрованное.

В случае потери доступа к своему оборудованию, нужно успеть получить доступ к своим важным файлам. К логинам и паролям, файлам кошельков, важным документам. Допустим технику изъяли, либо вы сбежали в одних трусах, и все ваше добро захвачено врагом. В таких случаях и пригодилось шифрование, доступа к вашим секретам нет, но нужно все же поменять «пароли и явки», добыть деньги скопленные на чёрный день, а у вас из вещей трусы и шлёпанцы… В 21 веке найти компьютер с доступом в интернет не так сложно, как 20 лет назад.

И так, предпримем ещё один шаг к надёжности. Надёжнее бэкапа ничего нет, но и доступ к бэкапу нужно ограничить. Да и сам бэкап придётся доверить третьим лицам. Да, можно и нужно нашифровать флешек, заныкать в секретных местах, бэкапов много не бывает. Но самое важное и необходимое занимает совсем немного места, единицы мегабайт.

Мы можем нашифровать криптоконтейнеров, зарегать аккаунтов на файлопомойках и хранить там, и это правильно. Но у контейнеров есть один неприятный момент, их нужно регулярно обновлять, синхронизировать данные. В общем, можно разделить данные на 2 типа, регулярно обновляемые - динамические, и требующие актуальность, и на хранимые неопределённо долго — статичные.

Статичные данные вполне надёжно хранить в криптоконтейнерах, а криптоконтейнеры в облачных хранилищах. С динамическими данными несколько сложнее.

Я использовал 2 системы хранения, проверенные временем. У каждой есть достоинства и недостатки. Обе работают на модуле ядра FUSE. Вся дальнейшая статья о работе в Linux.

1) SSHFS, это удалённая файловая система, когда у вас есть доверенный сервер, с root доступом, в надежном месте, где физически его никто не тронет, там можно организовать шифрованный /home раздел, где и будут хранится ваши файлы. Монтируя скриптом по сети на рабочий компьютер ваш каталог с файлами, вы «прозрачно» работаете с ними, перетаскивая и синхронизируя данные. Минусы — это затупы по сети, особенно если ваш сервер в TOR. Есть драйвер коммерческий под Windows для этой системы, и можно работать из под «винды», но это неудобно.

2)EncFS. Система имеет уязвимости, в основном уязвимости связанные с доступом к компу, я считаю что эти уязвимости не критичны, и зашифрованные файлы прочесть владельцы хостинга не смогут, а извлечь, зная пароль будет достаточно просто. Кстати, никто не мешает совместно использовать EncFS и SSHFS, но по мне будет некоторый оверхед, если конечно сервер приватный, иначе, даже нужно их использовать совместно.

Я постараюсь рассмотреть и описать обе эти системы.
Установка на Debian based дистрибутивы. Поставим сразу обе программы.

Bash:
sudo apt update
sudo apt install sshfs encfs libpam-encfs

SSHFS

Первое, что нужно выполнить — ознакомиться со справкой по командам.

Bash:
sshfs --help

Makefile:
usage: sshfs [user@]host:[dir] mountpoint [options]

general options:
    -o opt,[opt...]        mount options
    -h   --help            print help
    -V   --version         print version

SSHFS options:
    -p PORT                equivalent to '-o port=PORT'
    -C                     equivalent to '-o compression=yes'
    -F ssh_configfile      specifies alternative ssh configuration file
    -1                     equivalent to '-o ssh_protocol=1'
    -o reconnect           reconnect to server
    -o delay_connect       delay connection to server
    -o sshfs_sync          synchronous writes
    -o no_readahead        synchronous reads (no speculative readahead)
    -o sync_readdir        synchronous readdir
    -o sshfs_debug         print some debugging information
    -o cache=BOOL          enable caching {yes,no} (default: yes)
    -o cache_max_size=N    sets the maximum size of the cache (default: 10000)
    -o cache_timeout=N     sets timeout for caches in seconds (default: 20)
    -o cache_X_timeout=N   sets timeout for {stat,dir,link} cache
    -o cache_clean_interval=N
                           sets the interval for automatic cleaning of the
                           cache (default: 60)
    -o cache_min_clean_interval=N
                           sets the interval for forced cleaning of the
                           cache if full (default: 5)
    -o workaround=LIST     colon separated list of workarounds
             none             no workarounds enabled
             [no]rename       fix renaming to existing file (default: off)
             [no]truncate     fix truncate for old servers (default: off)
             [no]buflimit     fix buffer fillup bug in server (default: on)
             [no]fstat        fix fstat for old servers (default: off)
    -o idmap=TYPE          user/group ID mapping (default: none)
             none             no translation of the ID space
             user             only translate UID/GID of connecting user
             file             translate UIDs/GIDs contained in uidfile/gidfile
    -o uidfile=FILE        file containing username:remote_uid mappings
    -o gidfile=FILE        file containing groupname:remote_gid mappings
    -o nomap=TYPE          with idmap=file, how to handle missing mappings
             ignore           don't do any re-mapping
             error            return an error (default)
    -o ssh_command=CMD     execute CMD instead of 'ssh'
    -o ssh_protocol=N      ssh protocol to use (default: 2)
    -o sftp_server=SERV    path to sftp server or subsystem (default: sftp)
    -o directport=PORT     directly connect to PORT bypassing ssh
    -o slave               communicate over stdin and stdout bypassing network
    -o disable_hardlink    link(2) will return with errno set to ENOSYS
    -o transform_symlinks  transform absolute symlinks to relative
    -o follow_symlinks     follow symlinks on the server
    -o no_check_root       don't check for existence of 'dir' on server
    -o password_stdin      read password from stdin (only for pam_mount!)
    -o SSHOPT=VAL          ssh options (see man ssh_config)

FUSE options:
    -d   -o debug          enable debug output (implies -f)
    -f                     foreground operation
    -s                     disable multi-threaded operation

    -o allow_other         allow access to other users
    -o allow_root          allow access to root
    -o auto_unmount        auto unmount on process termination
    -o nonempty            allow mounts over non-empty file/dir
    -o default_permissions enable permission checking by kernel
    -o fsname=NAME         set filesystem name
    -o subtype=NAME        set filesystem type
    -o large_read          issue large read requests (2.4 only)
    -o max_read=N          set maximum size of read requests

    -o hard_remove         immediate removal (don't hide files)
    -o use_ino             let filesystem set inode numbers
    -o readdir_ino         try to fill in d_ino in readdir
    -o direct_io           use direct I/O
    -o kernel_cache        cache files in kernel
    -o [no]auto_cache      enable caching based on modification times (off)
    -o umask=M             set file permissions (octal)
    -o uid=N               set file owner
    -o gid=N               set file group
    -o entry_timeout=T     cache timeout for names (1.0s)
    -o negative_timeout=T  cache timeout for deleted names (0.0s)
    -o attr_timeout=T      cache timeout for attributes (1.0s)
    -o ac_attr_timeout=T   auto cache timeout for attributes (attr_timeout)
    -o noforget            never forget cached inodes
    -o remember=T          remember cached inodes for T seconds (0s)
    -o nopath              don't supply path if not necessary
    -o intr                allow requests to be interrupted
    -o intr_signal=NUM     signal to send on interrupt (10)
    -o modules=M1[:M2...]  names of modules to push onto filesystem stack

    -o max_write=N         set maximum size of write requests
    -o max_readahead=N     set maximum readahead
    -o max_background=N    set number of maximum background requests
    -o congestion_threshold=N  set kernel's congestion threshold
    -o async_read          perform reads asynchronously (default)
    -o sync_read           perform reads synchronously
    -o atomic_o_trunc      enable atomic open+truncate support
    -o big_writes          enable larger than 4kB writes
    -o no_remote_lock      disable remote file locking
    -o no_remote_flock     disable remote file locking (BSD)
    -o no_remote_posix_lock disable remove file locking (POSIX)
    -o [no_]splice_write   use splice to write to the fuse device
    -o [no_]splice_move    move data while splicing to the fuse device
    -o [no_]splice_read    use splice to read from the fuse device

Module options:

[iconv]
    -o from_code=CHARSET   original encoding of file names (default: UTF-8)
    -o to_code=CHARSET        new encoding of the file names (default: UTF-8)

[subdir]
    -o subdir=DIR        prepend this directory to all paths (mandatory)
    -o [no]rellinks        transform absolute symlinks to relative

Так же посмотрим мануал man sshfs данные нам пригодятся.

Давайте протестируем эту файловую систему прям на своем компьютере, без поиска приватных серверов. Если не установлен SSH сервер в системе, то нужно установить.

Добавим пользователя и зададим ему новый пароль.

Bash:
sudo adduser testcrypt

adduser.png


Попробуем соединиться по ssh

Bash:
ssh testrypt@localhost

ssh-connect.png


Если соединение прошло успешно, выполним пару команд:
Bash:
pwd
ls -al
mkdir securefiles
ls -al

makefolder.png

Хорошо, вот что мы имеем: настроенный ssh сервер, каталог securefiles в домашней директории пользователя testcrypt и теперь нам нужно научиться удалённо монтировать каталог securefiles к своей системе.

Создадим в домашней директории нашего локального пользователя каталог, например remotefs (я создал еще одного пользователя spyadmin для удобства тестирования)
Bash:
mkdir remotefs
ls -al
makefolder2.png

Теперь попытаемся смонтировать удалённый каталог
Напомним формат usage: sshfs [user@]host:[dir] mountpoint [options]
Bash:
sshfs testcrypt@localhost:securefiles ~/remotefs -o allow_other
Опция -o allow_other позволяет работать с файлами другим пользователям системы.

Давайте посмотрим, что у нас получилось.
Проверим что смонтировано у нас.
Bash:
df -h
видим такую строчку
testcrypt@localhost:securefiles 109G 45G 60G 43% /home/spyadmin/remotefs

remote-mount.png


значит наш удалённый каталог смонтировался успешно.
Попробуем в каталог remotefs записать что-нибудь.
Bash:
cd remotefs/
touch testfile.txt
echo Hello! > testfile.txt

теперь перейдем на «удаленный сервер» и прочтём что туда записалось

Bash:
cd securefiles/
ls -al

видим вывод
-rw-r--r-- 1 testcrypt testcrypt 7 фев 7 13:03 testfile.txt

Прочитаем.
Bash:
cat testfile.txt
goodtest.png


Как видим, все записалось.
Теперь отмонтируем удаленный каталог на локальной системе

Bash:
fusermount -u remotefs
ls remotefs
df -h
unmountfs.png


Как видим, пропал на нашей локальной системе файл и точка монтирования.
Поздравляю! Мы успешно изобрели свой собственный локальный Dropbox с защищённой передачей файлов по ssh
Таким образом, мы можем хранить свои секреты далеко и надежно.
Хорошая на хабре на тему SSHFS.

EncFS
Прежде чем приступить к EncFS, я бы предложил установить Dropbox. Протестировать функционал можно и локально, но без облачного хранилища это не имеет смысла. Вообще можно установить любое облачное хранилище, скорее дело вкуса и опыта.
Для Linux предлагается deb и rpm пакеты, а так же исходный код для самостоятельной компиляции.
Для установки в Debian нужно скачать файл (у меня 64 битная версия системы), и установить зависимости.
Bash:
sudo dpkg -i dropbox_2020.03.04_amd64.deb
Возможно понадобится такая команда для поправки зависимостей
Bash:
sudo apt --fix-broken install
или такая
Bash:
sudo apt-get -f install
Надеюсь с установкой Dropbox вы справились, а так же с регистрацией в этом сервисе. Либо в вашем любимом сервисе по хранению данных.
Сам пакет мы установили еще в начале статьи, теперь нужно его настроить.
Настроить его можно либо для ручного монтирования, либо для автоматического при входе в систему. Второе несомненно удобнее.
И так, первый вариант
Bash:
mkdir -p ~/Dropbox/.private ~/unprivate
encfs ~/Dropbox/.private ~/unprivate
Далее, нужно выбрать режим эксперта (можно и не выбирать, будут использованы дефолтные установки) и донастроить параметры шифрования на свой вкус. В том числе задать пароль, следует задать пароль равный вашему пользователю, если хотите настроить автоматическое монтирование каталога unprivate.
В каталог unprivate будет смонтирован скрытый каталог .private в котором будут храниться зашифрованные файлы. После размонтирования, каталог unprivate будет пустой и файлы будут хранится в ~/Dropbox/.private только в зашифрованном виде.
Проверим, что у нас получилось.
Bash:
cd unprivate
ls
cd ~/Dropbox/.private
ls
Как видим в каталоге unprivate лежит файлик test.txt
А в каталоге Dropbox уже лежит его зашифрованная версия.
test-encfs.png


В файловом менджере появился диск unprivate с соответствующим файлом

test-encfs2.png


А на аккаунте Dropbox появился каталог .private и файл в зашифрованном виде. И служебный файл настроек .encfs6.xml для EncFS, который подхватится на другом подключенном устройстве при расшифровке.

dropbox.png

Для размонтирования нужно выполнить команду

Bash:
encfs -u ~/unprivate
Или кликнуть мышью в менеджере и отключить том.
Можно написать коротенькие скрипты, или просто ярлыки с командами и на этом все.

Настроим автоматическое монтирование
Bash:
sudo mcedit /etc/security/pam_encfs.conf
для того что бы отключить автоматическое размонтирование при простое закомментируем строку:
Bash:
# encfs_default --idle=1
Хотя вроде и с ней все работает нормально.
В конце файла создадим еще строку, кстати в конце файла есть символы переноса строки, они должны остаться.
Дописываем по аналогии со строками в файле
Bash:
* Dropbox/.private unprivate -v allow_other
Именно эта строка указывает на автоматическое монтирование EncFS при входе пользователя в систему. Пути могут быть как относительно домашнего каталога, так и полные.
Если синхронизируемые папки находятся вне домашнего каталога, то придётся вместо «*» прописать логин пользователя.
Сохраняем файл и переходим к следующему.
Bash:
sudo mcedit /etc/fuse.conf
где раскомментируем строку позволяющую опции монтирования не-root пользователям:
Bash:
user_allow_other
и сохраним файл.

Все. Подробнее можно ознакомиться в справке программы, и вот хорошая статья на убунту
Теперь остается выучить наизусть Email, пароль к нему и ключ шифрования )
 
Дохуя конечно что непонял, ну а так безусловно LIKE.
Волшебник)
 
@Pendalf красава знает толк в шифровании особенно в огнестрелном ))) статья зачёт.
 
Статус
В этой теме нельзя размещать новые ответы.

Похожие темы

Необходимость делать бекапы – своих проектов, сид фраз и паролей – становится очевидной после первого обыска или просто вышедшего из строя компьютера. Большинство учится на своих ошибках и тут как повезёт: кто-то теряет код-базу за месяц работы, а кто-то до сих пор грызёт себе локти из-за того...
Ответы
7
Просмотры
Вводные: Изображение ← цвет (RGB) ← 3 RGB = 3 байта (24 бита). В 1 пикселе 3 младших бита, их изменение невозможно идентифицировать визуально, вместо них мы запишем данные. Можно использовать больше. Разумнее прятать в несколько изображений. Изображение .jpg 1920х1080 пикселей содержит 52 432...
Ответы
1
Просмотры
445
Environment - Linux Medium В прошлый раз мы начали с прохождения лёгкой машины и как я писал в первой статье, пойдём по нарастающей. Начнем прохождение машины, как всегда, с первичных сканов. Результаты сканирования с помощью Nmap показали только два открытых порта: 22/tcp open ssh syn-ack...
Ответы
2
Просмотры
768
Как правильно чистить устройство перед продажей или передачей ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Продал телефон, отдал ноутбук, выкинул флешку. Думаешь данные удалены? Скорее всего нет Обычное "удаление" и даже "сброс к заводским" не стирает данные физически. Они остаются на диске и...
Ответы
0
Просмотры
163
Приветствую, киберсамурай Для начала необходимо оплатить и поднять сервер. Можешь выбрать любой хостинг по сути, но советую тот, на котором можно оплачивать сервер в крипте. Карты с дропами есть не у всех, да и заведомо выбирать сервис, который не поддерживает оплату в крипте, я не советую...
Ответы
5
Просмотры
Назад
Сверху Снизу