gocryptfs — шифрованная файловая система в пространстве пользователя. Она не шифрует диск целиком: вы создаёте каталог-контейнер, монтируете его и работаете с файлами как обычно. Шифруются и содержимое, и имена файлов, а на диске остаётся набор нечитаемых файлов. Это удобно для облачной синхронизации и для защиты данных украденного ноутбука.

Установка и требования

Нужны FUSE и сам пакет gocryptfs. В большинстве дистрибутивов FUSE уже собран в ядре, а пользовательские утилиты стоят по умолчанию. Проверьте версию: ветка 2.x актуальна и содержит команду проверки целостности.

sudo apt install gocryptfs fuse3
sudo dnf install gocryptfs fuse3
gocryptfs -version
fusermount3 --version

В старых системах утилита называется fusermount без тройки. Права root для работы не нужны: контейнер монтируется от вашего пользователя, а доступ к нему регулируется обычными правами файлов.

Создание контейнера

Шифрованный каталог должен быть пустым, точка монтирования — тоже. При инициализации gocryptfs создаёт файл gocryptfs.conf с зашифрованным мастер-ключом и просит пароль. Пароль нигде не хранится, восстановить его нельзя; без gocryptfs.conf не восстановить и мастер-ключ.

mkdir -p ~/cipher ~/plain ~/vault
gocryptfs -init ~/cipher
gocryptfs -speed
gocryptfs -init -scryptn 18 ~/vault

Параметр -scryptn повышает стоимость перебора пароля, но увеличивает время разблокировки. Значение 18 — разумный компромисс для слабых машин; на быстром процессоре можно оставить 16. Команда -speed показывает скорость шифрования с учётом AES-NI и полезна, чтобы понять, хватит ли производительности для больших файлов.

Монтирование и работа

После монтирования в ~/plain появляется обычный каталог: создавайте файлы, редактируйте, удаляйте. Всё, что записано, шифруется на лету. Размонтирование желательно перед копированием контейнера и обязательно перед выключением, иначе часть данных останется в кэше.

gocryptfs ~/cipher ~/plain
gocryptfs -idle 15m ~/cipher ~/plain
fusermount3 -u ~/plain
mount | grep gocryptfs

Ключ -idle автоматически размонтирует контейнер после указанного простоя — хорошая страховка, если вы забыли закрыть сеанс. Для доступа другим пользователям нужен -allow_other и строка user_allow_other в /etc/fuse.conf; включайте это только осознанно.

Что видно снаружи

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

  • Имена файлов и каталогов зашифрованы.
  • Содержимое защищено AES-256-GCM.
  • Размеры, количество и время изменения остаются заметны.
  • Факт наличия контейнера скрыть нельзя.

Если метаданные критичны, используйте контейнер целиком в образе диска или полнодисковое шифрование. Для защиты от кражи ноутбука и от любопытного облачного провайдера возможностей gocryptfs обычно достаточно.

Отдельно учтите, что программа, запущенная от вашего пользователя, видит расшифрованные файлы. Шифрование защищает диск и резервные копии, но не заменяет антивирус и не спасает от вредоносного кода в активном сеансе.

Автоматизация и удобство

Пароль можно передавать через внешнюю программу ключом -extpass, например через keyring рабочего стола. Это удобнее ручного ввода, но пароль оказывается в хранилище сеанса. Для постоянной работы соберите user-юнит systemd — он запустит монтирование при входе и размонтирует контейнер при выходе. Файл ~/.config/systemd/user/gocryptfs.service:

[Unit]
Description=Шифрованный контейнер gocryptfs
[Service]
Type=simple
ExecStart=/usr/bin/gocryptfs -f -idle 15m -extpass "/usr/bin/secret-tool lookup service gocryptfs" %h/cipher %h/plain
ExecStop=-/usr/bin/fusermount3 -u %h/plain
Restart=on-failure
[Install]
WantedBy=default.target

Пароль предварительно положите в keyring командой secret-tool store —label=gocryptfs service gocryptfs. После сохранения юнита включите его и проверьте статус:

systemctl --user daemon-reload
systemctl --user enable --now gocryptfs.service
systemctl --user status gocryptfs.service

Проверьте, что secret-tool возвращает пароль в неинтерактивном сеансе: демон пользователя не всегда имеет доступ к разблокированному keyring. Если это не работает, оставьте ручной ввод — надёжнее, чем хранить пароль в открытом файле.

Резервные копии

Копировать нужно шифрованный каталог, а не точку монтирования. Пока контейнер размонтирован, ~/cipher можно архивировать и синхронизировать любым способом. Обязательно сохраните gocryptfs.conf отдельно: без него данные не восстановить даже при известном пароле.

fusermount3 -u ~/plain
rsync -a --delete ~/cipher/ /mnt/backup/cipher/
cp ~/cipher/gocryptfs.conf /mnt/backup/gocryptfs.conf.bak
sha256sum ~/cipher/gocryptfs.conf

Не отправляйте в облако расшифрованный каталог: смысл схемы теряется. Если синхронизация идёт постоянно, помните, что незавершённая запись может дать повреждённый файл — версионные бэкапы надёжнее зеркала. Когда контейнер лежит на внешнем SSD, размонтируйте его перед отключением кабеля: иначе кэш не успеет записаться и появится ошибка ввода-вывода.

Проверка целостности

Команда -fsck проверяет размонтированный шифрованный каталог и сообщает о повреждённых файлах. Запускайте её после сбоев питания и перед важным копированием. Учтите, что проверка не восстанавливает данные, а только диагностирует.

gocryptfs -fsck ~/cipher
gocryptfs -passwd ~/cipher
gocryptfs -ro ~/cipher ~/plain
lsof +D ~/plain

Смена пароля перешифровывает мастер-ключ, но не сами файлы. Режим -ro монтирует контейнер только для чтения — полезно, когда нужно посмотреть архив, не рискуя что-то изменить. Если размонтирование не проходит, найдите процессы с открытыми файлами через lsof или fuser. Следите за свободным местом: заполненный диск даёт ошибки записи и может повредить файлы внутри контейнера.

Диагностика

  • «mountpoint is not empty» — точка монтирования должна быть пустой.
  • «fuse: device not found» — не загружен модуль fuse или нет прав.
  • Медленная работа — проверьте -speed и размер файлов, FUSE даёт накладные расходы.
  • Контейнер не открывается — сверьте пароль и сохранность gocryptfs.conf.
  • Ошибка ввода-вывода — сначала размонтируйте, затем запустите -fsck.

Не монтируйте контейнер с сетевых файловых систем и не храните его внутри каталога, который сам синхронизируется в момент записи. Для диагностики используйте dmesg и journalctl —user -b: они показывают ошибки FUSE и таймауты.

Чек-лист

  • Пароль длинный и уникальный, есть менеджер паролей.
  • Копия gocryptfs.conf лежит отдельно от контейнера.
  • Контейнер размонтирован перед бэкапом и выключением.
  • В облако уходит только шифрованный каталог.
  • Проверка -fsck выполняется после сбоев.

Итог

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

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте