Jomel.Tr

Как подключить и настроить gocryptfs в YandexCloud

Как подключить и настроить gocryptfs в YandexCloud

Опубликовано в Сентябре 2024

Настройка GocryptFS с облачным хранилищем

1. Установка необходимых пакетов

Установите openssl:

paru -S openssl

Установите клиент Яндекс.Диска (если используете его):

paru -S aur/yandex-disk --noconfirm

(Опционально) Установите man-страницы на русском языке:

paru -S man-pages-ru

2. Настройка Яндекс.Диска

2.1. Инициализация Яндекс.Диска

Запустите настройку Яндекс.Диска:

yandex-disk setup

Следуйте инструкциям на экране, чтобы авторизоваться и выбрать каталог для синхронизации (например, ~/Yandex.Disk).

2.2. Запуск синхронизации

Запустите синхронизацию с облаком:

yandex-disk start

Теперь ваш каталог ~/Yandex.Disk будет синхронизироваться с Яндекс.Диском.

3. Создание зашифрованной файловой системы

Создайте две папки:

  • Data — для хранения зашифрованных данных (будет синхронизироваться с облаком).
  • GoCryptFS — для доступа к расшифрованным данным.
mkdir -p ~/Yandex.Disk/Data ~/GoCryptFS

Инициализация gocryptfs:

gocryptfs -init ~/Yandex.Disk/Data -plaintextnames

Появится приглашение ввести пароль — запомните его, он не восстанавливается.

После инициализации появится файл конфигурации:

~/Yandex.Disk/Data/gocryptfs.conf

5. Использование символической ссылки для .ssh (пример использования Яндекс.Диск)

Переместите папку .ssh в зашифрованную папку GoCryptFS:

mv ~/.ssh ~/GoCryptFS/

Создайте символическую ссылку:

ln -s ~/GoCryptFS/.ssh ~/.ssh

Настройте права доступа:

chmod 600 ~/.ssh/*
chmod 644 ~/.ssh/*.pub
chmod 700 ~/.ssh

6. Размонтирование GoCryptFS

После завершения работы с зашифрованными данными размонтируйте GoCryptFS:

fusermount -u ~/GoCryptFS

7. Автоматизация (опционально)

Создайте скрипт для автоматического монтирования GoCryptFS:

Скрипт mount_gocryptfs.sh:

#!/bin/bash
set -euo pipefail

ENCRYPTED_DIR="$HOME/Yandex.Disk/Data"
MOUNT_POINT="$HOME/GoCryptFS"

# Монтирование
if ! mountpoint -q "$MOUNT_POINT"; then
    echo "Введите пароль для gocryptfs:"
    gocryptfs "$ENCRYPTED_DIR" "$MOUNT_POINT"
    echo "[+] gocryptfs смонтирован в $MOUNT_POINT"
else
    echo "[i] Уже смонтировано: $MOUNT_POINT"
fi

# Символические ссылки
declare -A LINKS=(
    [".ssh"]="$MOUNT_POINT/.ssh"
    ["KeeP"]="$MOUNT_POINT/KeeP"
    ["Work"]="$MOUNT_POINT/Work"
    #["PyCharmMiscProject"]="$MOUNT_POINT/PyCharmMiscProject"
    #["GoLand"]="$MOUNT_POINT/GoLand"
)

for NAME in "${!LINKS[@]}"; do
    TARGET="${LINKS[$NAME]}"
    LINK="$HOME/$NAME"
    
    if [ ! -e "$TARGET" ]; then
        echo "[!] Цель не существует: $TARGET — пропускаю"
        continue
    fi
    
    if [ ! -L "$LINK" ]; then
        # Бекапим если есть реальная папка/файл
        [ -e "$LINK" ] && mv "$LINK" "${LINK}.bak.$(date +%s)"
        ln -s "$TARGET" "$LINK"
        echo "[+] Создана ссылка: $LINK -> $TARGET"
    fi
done

# Права доступа
[ -L "$HOME/.ssh" ] && chmod 700 "$MOUNT_POINT/.ssh"
[ -L "$HOME/.ssh" ] && chmod 600 "$MOUNT_POINT/.ssh/"* 2>/dev/null || true
[ -L "$HOME/.ssh" ] && chmod 644 "$MOUNT_POINT/.ssh/"*.pub 2>/dev/null || true
[ -L "$HOME/KeeP" ] && chmod 700 "$MOUNT_POINT/KeeP"

echo "[+] Готово"

Сделайте скрипт исполняемым:

chmod +x mount_gocryptfs.sh

Создайте скрипт для автоматического монтирования GoCryptFS:

Скрипт unmount_gocryptfs.sh:

#!/bin/bash
# Размонтирование GoCryptFS
set -euo pipefail

MOUNT_POINT="$HOME/GoCryptFS"

if mountpoint -q "$MOUNT_POINT"; then
    fusermount -u "$MOUNT_POINT"
    
    if mountpoint -q "$MOUNT_POINT"; then
        # Принудительное размонтирование если зависло
        fusermount -uz "$MOUNT_POINT"
        sleep 1
    fi
    
    if ! mountpoint -q "$MOUNT_POINT"; then
        echo "[+] GoCryptFS размонтирован"
    else
        echo "[!] Ошибка: не удалось размонтировать $MOUNT_POINT"
        echo "    Попробуй: sudo fusermount -uz $MOUNT_POINT"
        exit 1
    fi
else
    echo "[i] Не примонтировано: $MOUNT_POINT"
fi

Сделайте скрипт исполняемым:

chmod +x unmount_gocryptfs.sh

8. Полезные команды

Просмотр документации по EncFS:

man gocryptfs

Краткая справка по GoCryptFS:

gocryptfs --help

Итог

  • Зашифрованная папка: ~/Yandex.Disk/Data.
  • Папка для доступа к данным: ~/GoCryptFS.
  • Файл конфигурации шифруется с помощью OpenSSL и хранится в облаке.
  • Папка .ssh хранится в зашифрованной папке и доступна через символическую ссылку.