Безопасная работа с облачным хранилищем через файловый менеджер держится на трёх практиках: клиентское шифрование данных, минимальные права для токенов доступа и регулярная ротация ключей. Провайдер в такой схеме видит только шифротекст, а каждая операция с файлами выполняется от вашего имени по токену. Главная цель атак - именно токен.
Токен - уникальная строка символов, которая служит ключом доступа к сессии пользователя. С ним можно выполнять все действия от имени владельца без повторного ввода пароля или кода 2FA. Публичный разбор механики токенов показывает это на примере Discord: перехваченный токен даёт полный доступ к аккаунту и позволяет действовать от имени владельца. Логика та же у любого сервиса с токенной аутентификацией, включая облачные хранилища и панели файловых менеджеров.
Дальше - рабочая схема целиком: карта рисков, клиентское шифрование на rclone crypt и Cryptomator, scope токенов и права, хранение конфигов с секретами, ротация и команды проверки.
Почему облачное хранилище через файловый менеджер - это риск в 2026 году
rclone, Cyberduck, смонтированный WebDAV или веб-панель провайдера работают поверх API. Каждая операция, список, чтение, запись, удаление, подписана токеном или ключом доступа. Безопасность данных равна безопасности ключа: провайдер не различит, кто именно нажал «удалить».
Где именно утекают токены и учётные данные
В браузере токен лежит в локальном хранилище (localStorage) и автоматически отправляется серверу при каждом запросе. Любой скрипт на странице, включая сторонний виджет или код, внедрённый через XSS, может прочитать это значение. Описание рисков токенов перечисляет и остальные каналы утечки, которые встречаются в реальных инцидентах.
- Вредоносное ПО на рабочей машине. Инфостилеры читают ~/.config/rclone/rclone.conf, ~/.aws/credentials, историю команд и localStorage браузера.
- Фишинговые сайты, имитирующие интерфейс сервиса. Введённый на поддельной странице код подтверждения уходит напрямую атакующему.
- Публикация в открытом доступе: коммит конфига в Git, токен в логе CI, скриншот с ключом в тикете или в чате поддержки.
- Незащищённые каналы передачи. Конфиг отправляют по HTTP, по почте или в мессенджере, где содержимое не шифруется на стороне отправителя.
- Слишком широкие права. Один токен на все задачи и все бакеты: утечка открывает доступ к данным, с которыми этот токен работать не должен.
Проверить свой клиент просто: в веб-интерфейсе откройте инструменты разработчика по пути Application, затем Local Storage и найдите ключ с именем token. Ровно тот же путь используют инфостилеры, только в автоматическом режиме.
Вывод короткий: утёк токен - считайте аккаунт скомпрометированным. Ротация нужна сразу, а не в следующем спринте.
Почему 2FA не спасает при краже токена
2FA закрывает момент входа и не защищает уже выданный токен. Именно поэтому токен позволяет работать от имени пользователя без повторного ввода пароля или кода подтверждения.
| Что закрывает 2FA | Что остаётся незакрытым |
|---|---|
| Вход по украденному паролю | Действия по уже выданному токену |
| Повторный вход с нового устройства | Запросы к API от имени пользователя |
| Автоматизированный перебор пароля | Скрипты и CI с долгоживущим токеном внутри |
Защита токенов доступа - отдельная задача: короткий TTL, ограниченный scope, хранение в защищённом хранилище, мониторинг использования, мгновенный отзыв. Сам второй фактор остаётся нужным: как выбрать автономный вариант, разбираем в материале про open-source 2FA-аутентификаторы.
Клиентское шифрование: rclone crypt и Cryptomator на практике
Клиентское шифрование закрывает содержимое и имена файлов до отправки на сервер: провайдер получает шифротекст, а ключи не покидают вашу машину. Это отличается от серверного шифрования на уровне диска или массива, где ключом управляет владелец системы хранения. Разницу подходов и гибридные модели мы разбираем в материале про клиентское, серверное и гибридное шифрование.
| Критерий | rclone crypt | Cryptomator |
|---|---|---|
| Интерфейс | CLI и конфиг | GUI, виртуальный диск |
| Где применяют | Серверы, скрипты, mount, CI | Рабочие станции, несколько облаков |
| Шифрование имён файлов и структуры папок | Да, через filename_encryption | Да, по умолчанию |
| Автоматизация без человека | Да | Ограниченно, нужна CLI-обвязка |
| Совместная работа | Общий remote и общий ключ | Общий vault и пароль |
| Стоимость | Свободная лицензия | Ядро свободное, мобильные клиенты могут требовать покупки |
Настройка rclone crypt: конфиг и команды
Схема из пяти шагов: подключить облако, поставить crypt поверх, задать пароль и соль, включить шифрование имён, проверить результат.
- Создайте remote к облаку. Тип зависит от провайдера: s3, drive, dropbox, onedrive, webdav. Токен выдавайте под конкретную задачу, а не под весь аккаунт.
- Создайте crypt-remote поверх уже готового remote.
- Сгенерируйте password и password2 (соль) командой rclone obscure. Это два разных значения, и оба нужны для доступа.
- Включите filename_encryption=standard и directory_name_encryption=true, иначе имена файлов останутся открытыми.
- Проверьте работу: список, копирование тестового файла, cryptcheck.
[cloud] type = s3 provider = Other endpoint = https://s3.example.com access_key_id = PLACEHOLDER_ACCESS_KEY secret_access_key = PLACEHOLDER_SECRET_KEY [crypt] type = crypt remote = cloud:backup filename_encryption = standard directory_name_encryption = true password = OBSCURED_PASSWORD password2 = OBSCURED_SALT
Значения для password и password2 получают так:
rclone obscure 'ваш-пароль' rclone obscure 'ваша-соль'
Создание remote и проверка:
rclone config create cloud s3 provider=Other endpoint=https://s3.example.com rclone config create crypt crypt remote=cloud:backup filename_encryption=standard directory_name_encryption=true rclone lsd crypt: rclone copy ./test.bin crypt: --progress rclone cryptcheck crypt: cloud:backup rclone copy crypt: cloud:backup --crypt-show-mapping --dry-run
Флаг --crypt-show-mapping показывает соответствие открытых имён и объектов в облаке, удобно для отладки и для проверки, что структура каталогов действительно скрыта. Имена флагов и параметров сверяйте с версией rclone командой rclone version и официальной документацией: между релизами синтаксис меняется.
Пароль и соль храните отдельно от конфига, например в менеджере секретов. Потеря обоих значений означает потерю данных: провайдер их не восстановит, у него есть только шифротекст.
Cryptomator: когда удобнее виртуальный диск
Cryptomator подходит, когда нужен графический интерфейс и работа с несколькими облачными провайдерами одновременно. Vault создаётся локально, шифрование идёт до синхронизации, а смонтированный диск выглядит как обычная папка.
- Создайте vault, задайте пароль и выберите шифр AES-256.
- Смонтируйте vault и работайте с файлами через проводник или Finder.
- Держите пароль vault в защищённом хранилище, а не в заметке рядом с папкой.
- Учитывайте ограничения: на больших объёмах виртуальный диск даёт меньшую скорость, чем rclone mount, а серверные автоматизации без CLI требуют дополнительной обвязки.
- Для совместной работы нескольких человек общий vault удобнее, но конфликты синхронизации придётся разбирать вручную.
Выбор простой: сервер, скрипт, бэкап по расписанию - rclone crypt. Рабочая станция, GUI и несколько облаков сразу - Cryptomator. Оба инструмента можно совмещать: шифровать разные наборы данных разными ключами.
Управление доступом: права, scope токенов и принцип наименьших привилегий
Принцип наименьших привилегий для облачного хранилища означает, что у каждой задачи свой токен и свой набор операций. Бэкап пишет в один префикс и не читает остальное, синхронизация читает и пишет, CI получает временные credentials. Токен администратора в повседневной работе не нужен.
Scoped-токены: как ограничить ущерб от утечки
Scoped-токен ограничен бакетом, префиксом, набором операций и сроком жизни. Минимальная политика для бэкапа в S3-совместимое хранилище выглядит так:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:ListBucket"],
"Resource": ["arn:aws:s3:::my-bucket"]
},
{
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:PutObject"],
"Resource": ["arn:aws:s3:::my-bucket/backup/*"]
}
]
}
Обратите внимание на разделение ресурсов: ListBucket применяется к бакету целиком, GetObject и PutObject - к объектам внутри префикса. Так токен не увидит соседние каталоги и не сможет удалять данные. Для Google Drive аналог ограничения - scope drive.file вместо полного drive, для rclone - отдельный remote с отдельным токеном на каждую задачу.
Проверить, что токен не может лишнего, можно без реальной попытки:
aws iam simulate-principal-policy --policy-source-arn arn:aws:iam::123456789012:user/backup-bot --action-names s3:DeleteObject --resource-arns arn:aws:s3:::my-bucket/backup/test.bin
Ожидаемый результат - implicitDeny. Если для удаления возвращается allowed, права выданы шире, чем нужно.
Проверка прав: команды и аудит
Права разъезжаются со временем: кто-то добавил разрешение для отладки и забыл убрать, старый ключ остался активным после ухода сотрудника. Поэтому аудит прав идёт по расписанию, а не разово.
aws s3api get-bucket-acl --bucket my-bucket aws s3api get-bucket-policy --bucket my-bucket aws iam list-attached-user-policies --user-name backup-bot aws iam generate-credential-report aws iam get-credential-report --query 'Content' --output text | base64 -d rclone about crypt: rclone lsd cloud:
Политика бакета с Principal "*" и без Condition означает публичный доступ: это повод немедленно закрыть бакет. Отчёт по credentials показывает дату создания ключей и время последнего использования, по нему видно заброшенные ключи. Для команды с несколькими админами держите список активных токенов и сверяйте его с ожидаемым. Как выстроить аудит скриптов и прав sudo, разбираем в материале про безопасность скриптов администрирования.
Хранение секретов в конфигурациях: где нельзя и как правильно
Секреты нельзя держать в открытом виде в репозитории, в .env с правами 644, в rclone.conf с доступом для всех, в Docker-образе и в аргументах командной строки: пароль в параметре --password виден в ps и остаётся в истории shell. Переменные окружения тоже не универсальная защита: содержимое /proc/PID/environ читает владелец процесса и root.
rclone.conf: права, владелец и защита пароля
Пароль в rclone.conf хранится в obscured-виде. Это кодирование, а не шифрование: значение восстанавливается командой rclone reveal. Значит, файл должен быть доступен только владельцу.
mkdir -p ~/.config/rclone chmod 700 ~/.config/rclone install -m 600 /dev/null ~/.config/rclone/rclone.conf chown rclone:rclone ~/.config/rclone/rclone.conf ls -l ~/.config/rclone/rclone.conf
Для сервиса заведите отдельного пользователя rclone без shell и передавайте конфиг через systemd credentials, чтобы файл не лежал в домашнем каталоге:
[Unit] Description=Mount encrypted cloud storage [Service] User=rclone Group=rclone LoadCredential=rclone_conf:/etc/rclone/rclone.conf ExecStart=/usr/bin/rclone mount --config=%d/rclone_conf crypt: /mnt/cloud Restart=on-failure [Install] WantedBy=multi-user.target
Директива LoadCredential и спецификатор %d работают в systemd 247 и новее: файл попадает в приватный каталог процесса с правами только для чтения. Дополнительно конфиги шифруют через pass, age или sops, а ключ хранят отдельно от зашифрованного файла. Как разделять конфигурацию и секреты в проекте, разобрано в статье про версионирование конфигураций и хранение секретов вне репозитория.
Секреты в CI/CD: OIDC вместо долгоживущих токенов
Долгоживущий ключ в пайплайне - постоянный риск: он попадает в логи, в артефакты, в кеш раннера. OIDC-федерация убирает сам секрет: раннер получает временные credentials под конкретный запуск.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {"Federated": "arn:aws:iam::123456789012:oidc-provider/token.actions.githubusercontent.com"},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {"token.actions.githubusercontent.com:aud": "sts.amazonaws.com"},
"StringLike": {"token.actions.githubusercontent.com:sub": "repo:org/repo:ref:refs/heads/main"}
}
}
]
}
Условие по sub привязывает роль к конкретному репозиторию и ветке: чужой пайплайн роль не получит. rclone в CI тогда работает с временными credentials из окружения и не хранит ключи в секретах пайплайна.
Ротация ключей шифрования и токенов доступа
Ротация ограничивает окно компрометации: даже если ключ утёк, ущерб ограничен сроком его жизни. Общий план ротации ключей и чек-лист на 12 пунктов есть в разборе практических схем шифрования, ниже - конкретные шаги для облачного хранилища.
Пошаговая ротация rclone crypt без потери данных
Смена ключа клиентского шифрования означает перешифрование всех данных: старый remote остаётся рабочим, пока новый не проверен.
rclone config create newcrypt crypt remote=cloud:backup filename_encryption=standard directory_name_encryption=true rclone copy oldcrypt: newcrypt: --progress --transfers 8 --checkers 8 rclone cryptcheck newcrypt: cloud:backup rclone check oldcrypt: newcrypt: --one-way rclone about newcrypt:
- Создайте новый crypt-remote с новыми password и password2.
- Скопируйте данные из старого remote в новый. На больших объёмах это часы трафика, планируйте окно.
- Проверьте расшифровку нового remote через rclone cryptcheck и сравните наборы файлов через rclone check.
- Переключите mount, systemd unit и cron-задачи на новый remote.
- Убедитесь, что задачи отработали, и только после этого удаляйте старый remote и отзывайте старый токен.
Для S3-совместимых хранилищ с версионированием объектов старые версии остаются доступны по API, если их не удалить явно. Это запасной вариант, если проверка выявила расхождение.
Ротация токенов доступа: чек-лист
- Соберите инвентаризацию активных токенов: где лежат, какая задача их использует, какой scope выдан.
- Выпустите новый токен с тем же минимальным scope.
- Обновите конфиги и секреты на новое значение, проверьте права на файлы после правки.
- Проверьте доступ практической операцией: rclone lsd, запись и чтение тестового файла.
- Отзовите старый токен в панели провайдера.
- Проверьте логи на использование старого токена после отзыва: успешных запросов быть не должно.
Ориентир по срокам: токены доступа меняйте раз в 90 дней или чаще, ключи шифрования - по вашей политике, обычно раз в год и внепланово при подозрении на компрометацию. Отзыв делайте после проверки нового токена, иначе получите простой в бэкапах.
Чек-лист и команды проверки безопасности схемы
Команды проверки: что запускать и как читать вывод
| Команда | Что проверяет | Норма |
|---|---|---|
| rclone cryptcheck crypt: cloud:backup | Корректность расшифровки и совпадение хешей | Все файлы OK, ошибок нет |
| rclone check oldcrypt: newcrypt: --one-way | Полноту переноса после ротации | Нет строк missing и differences |
| rclone about crypt: | Доступ к хранилищу и квоты | Показывает объём, а не ошибку 403 |
| aws s3api get-bucket-policy --bucket my-bucket | Публичность доступа | Нет Principal "*" без Condition |
| aws iam simulate-principal-policy | Эффективные права токена | allowed только для нужных действий |
| ls -l ~/.config/rclone/rclone.conf | Права на файл с секретами | -rw------- и владелец rclone |
Чек-лист из 12 пунктов, который стоит прогонять после каждого изменения схемы:
- Клиентское шифрование включено для всех данных, которые уходят в облако.
- Имена файлов и структура папок тоже зашифрованы.
- Пароль и соль хранятся отдельно от rclone.conf.
- rclone.conf имеет права 600 и владельца-сервисного пользователя.
- Для сервисов используется отдельный пользователь без shell.
- Токены выданы под конкретную задачу, без прав администратора.
- Scope ограничен бакетом, префиксом и набором операций.
- Срок жизни токена короткий, есть план ротации.
- В CI применяется OIDC, долгоживущих секретов в пайплайне нет.
- Логирование доступа к хранилищу включено, аномалии отслеживаются.
- Целостность проверяется через rclone cryptcheck после каждой ротации.
- Инвентаризация ключей и токенов актуальна, лишние отозваны.
Сценарии внедрения: как это работает в разных стеках
Минимальный безопасный старт за 30 минут
- Создайте remote к облаку с токеном, у которого нет прав на удаление чужих префиксов.
- Поставьте crypt-remote поверх: rclone config create crypt crypt remote=cloud:backup.
- Выставьте права: chmod 700 ~/.config/rclone и chmod 600 ~/.config/rclone/rclone.conf.
- Вынесите пароль и соль в менеджер секретов, оставив в конфиге только obscured-значения.
- Проверьте результат: rclone cryptcheck crypt: cloud:backup.
Этого достаточно для базовой защиты. Ротация, аудит и мониторинг добавляются позже, когда схема уже работает.
Дальше сценарии расходятся по стекам:
- Одиночный сервер. rclone mount через systemd unit с LoadCredential, отдельный пользователь без shell, шифрование ключом, который хранится вне конфига.
- CI/CD. OIDC-федерация вместо статичного ключа, временные credentials на время шага, rclone получает их из окружения. Если провайдер поддерживает scoped-токены, ограничьте их отдельным префиксом.
- Команда с несколькими облаками. Cryptomator на рабочих станциях и общий пароль vault в менеджере секретов, rclone crypt на серверной стороне для бэкапов. Проверьте, что оба контура используют разные ключи.
- Бэкапы в S3-совместимое хранилище. rclone crypt поверх MinIO или другого S3-совместимого сервиса, политика только на префикс backup, версионирование объектов и ротация раз в год.
Совместимость широкая: AWS S3, Google Drive, Dropbox, Yandex Disk, MinIO и прочие бэкенды rclone работают с crypt одинаково, потому что шифрование идёт на вашей стороне. Стоимость внедрения сводится к времени инженера и трафику при ротации.
Что изменилось в 2026 году и что делать дальше
Рабочая практика смещается к короткоживущим credentials: токен под конкретную задачу с коротким TTL вместо одного ключа на всё. Клиентское шифрование переходит из опции в обязательный слой, если данные уходят за пределы вашего периметра. Если провайдер поддерживает OIDC-федерацию и scoped-токены, переходите на них и не храните долгоживущие ключи там, где можно обойтись временными.
Следующий шаг: прогоните чек-лист выше по своей схеме, настройте ротацию по расписанию и включите мониторинг аномалий в логах доступа. Повторяйте проверку после каждого изменения: новый скрипт, новый бакет или новый пайплайн возвращают часть вопросов, которые уже были закрыты.
Ограничение материала: механика токенов и связанные риски описаны по публичному разбору, который построен на примере Discord. Конкретные параметры rclone, Cryptomator, systemd и IAM сверяйте с документацией вашей версии инструмента и проверяйте на тестовом хранилище до работы с продакшн-данными. Источник по токенам: публичный разбор регистрации аккаунтов и токенов.