PBS: Безопасное подключение к PVE через API и шифрованием
Введение
В этом руководстве объясняется, как подключить Proxmox VE к Proxmox Backup Server с помощью Proxmox API-токенов, прав, ограниченных namespace, и клиентского шифрования. Такой подход повышает безопасность Proxmox VE, потому что Proxmox VE не требуется полный пароль пользователя PBS, а сервер резервного копирования не получает доступ к незашифрованным данным резервных копий VM.
Вы настроите безопасную аутентификацию с API-токеном, зарегистрируете хранилище Proxmox Backup Server в Proxmox VE, включите клиентское шифрование резервных копий, а также настроите расписания prune и garbage collection, чтобы datastore не занял все доступное хранилище.
Предварительные требования
Целевая аудитория: системные администраторы среднего уровня.
Ожидаемое время выполнения: 45-60 минут.
Итоговая цель: к концу этого руководства у вас будет безопасный репозиторий резервных копий Proxmox, подключенный к Proxmox VE с ограниченным доступом через API-токен, зашифрованными резервными копиями VM и параметрами retention, которые соответствуют емкости вашего хранилища.
Требуемая среда:
- Proxmox VE 8.x или новее.
- Proxmox Backup Server 3.x или новее.
- Административный доступ к веб-интерфейсу или shell Proxmox VE.
- Административный доступ к веб-интерфейсу или shell Proxmox Backup Server.
- Существующий datastore PBS.
- Сетевое подключение от Proxmox VE к PBS по TCP-порту 8007.
- Достаточная емкость datastore для запланированного окна retention резервных копий.
Примерные значения, используемые в этом руководстве:
| Placeholder | Пример значения | Описание |
|---|---|---|
<PBS_HOST> |
pbs.example.com |
Имя хоста или IP-адрес PBS |
<PBS_PORT> |
8007 |
Порт PBS API по умолчанию |
<DATASTORE> |
backup-store |
Имя datastore PBS |
<NAMESPACE> |
pve-prod |
Namespace для этого источника Proxmox VE |
<PBS_USER> |
pve-backup@pbs |
Пользователь PBS, созданный для Proxmox VE |
<TOKEN_NAME> |
pve-token |
Имя API-токена |
<TOKEN_ID> |
pve-backup@pbs!pve-token |
Полный ID API-токена PBS |
<PVE_STORAGE_ID> |
pbs-secure |
Storage ID, отображаемый в Proxmox VE |
<PBS_FINGERPRINT> |
AA:BB:CC:... |
Fingerprint сертификата PBS |
API-токены Proxmox Backup Server состоят из ID токена и секрета. Секрет отображается только один раз при создании токена, поэтому сразу сохраните его в менеджере паролей. В документации Proxmox указано, что API-токены полезны для простого отзыва и для ограничения прав для каждого клиента.
Шаг 1: Спланируйте безопасную схему резервного копирования Proxmox
Перед изменением конфигурации определите, как Proxmox VE должен получать доступ к PBS.
Используйте такую схему:
| Компонент | Рекомендуемая настройка |
|---|---|
| Authentication | API-токен вместо пароля пользователя |
| Access scope | Namespace datastore, а не весь datastore |
| PBS role | DatastoreBackup плюс DatastoreReader, если требуется просмотр для восстановления |
| Encryption | Клиентское шифрование включено в Proxmox VE |
| Retention | PBS prune job или политика retention datastore |
| Space cleanup | Запланированный garbage collection после pruning |
| Compromise response | Отозвать токен и создать замену |
Эта схема следует принципу минимальных привилегий. Proxmox Backup Server использует права на основе ролей и путей. Доступ можно назначить конкретному datastore или пути namespace, например /datastore/<DATASTORE>/<NAMESPACE>.
Шаг 2: Создайте отдельного пользователя PBS
Войдите в shell PBS от имени root или другого администратора.
Создайте отдельного пользователя PBS realm для Proxmox VE:
proxmox-backup-manager user create <PBS_USER> \ --comment "Proxmox VE backup user"
Ожидаемый результат: пустой вывод или сообщение
User '<PBS_USER>' created.
Проверьте, что пользователь существует:
proxmox-backup-manager user list
Ожидаемый результат:
userid enable expire comment <PBS_USER> 1 Proxmox VE backup user root@pam 1 Superuser
У недавно созданного пользователя PBS или API-токена по умолчанию нет прав. Перед тем как Proxmox VE сможет использовать его, необходимо явно назначить доступ.
Шаг 3: Создайте namespace для резервных копий Proxmox VE
Namespace позволяет отделить один хост или кластер Proxmox VE от других источников резервного копирования внутри того же datastore. Это полезно для безопасной аутентификации резервного копирования Proxmox, потому что права можно ограничить только этим namespace.
Namespace можно создать через веб-интерфейс PBS:
- Откройте веб-интерфейс PBS.
- Перейдите в Datastore.
- Выберите
<DATASTORE>. - Откройте Content.
- Нажмите Add Namespace.
- Введите
<NAMESPACE>. - Нажмите Create.

Ожидаемый результат: PBS создает namespace в выбранном datastore.
Если вы предпочитаете командную строку, используйте команду namespace PBS client:
proxmox-backup-client namespace create <NAMESPACE> \ --repository root@pam@localhost:<DATASTORE>
Пароль необходимо ввести при создании пространства имен. Для автоматизированных скриптов установите переменные среды PBS_PASSWORD и PBS_FINGERPRINT.
Ожидаемый результат: пустой вывод или сообщение
Namespace '<NAMESPACE>' created.
Шаг 4: Сгенерируйте API-токен
Создайте API-токен для пользователя PBS через веб-интерфейс, перейдя в раздел Configuration → Access Control → API Token → Add:

Вы можете сгенерировать API-токен для пользователя PBS через интерфейс командной строки:
proxmox-backup-manager user generate-token <PBS_USER> <TOKEN_NAME>
Ожидаемый вывод:
{ "tokenid": "<TOKEN_ID>", "value": "<TOKEN_SECRET>" }
Сразу сохраните <TOKEN_SECRET>. После создания его нельзя отобразить повторно.
Не вставляйте секрет токена в чаты, документацию, shell history, тикет-системы или скриншоты. Храните его в менеджере паролей или другом утвержденном хранилище секретов.
Шаг 5: Назначьте права по принципу минимальных привилегий
Права API-токена в PBS рассчитываются на основе ACL токена, а затем пересекаются с правами родительского пользователя. На практике и пользователю, и токену нужен соответствующий доступ, а токен никогда не может делать больше, чем его родительский пользователь.
Выдайте родительскому пользователю доступ для резервного копирования только к нужному namespace:
proxmox-backup-manager acl update \ /datastore/<DATASTORE>/<NAMESPACE> DatastoreBackup \ --auth-id <PBS_USER>
Выдайте токену ту же роль для резервного копирования:
proxmox-backup-manager acl update \ /datastore/<DATASTORE>/<NAMESPACE> DatastoreBackup \ --auth-id <TOKEN_ID>
Если вы хотите, чтобы Proxmox VE мог просматривать и восстанавливать существующие собственные резервные копии из того же namespace, также добавьте DatastoreReader:
proxmox-backup-manager acl update \ /datastore/<DATASTORE>/<NAMESPACE> DatastoreReader \ --auth-id <PBS_USER> proxmox-backup-manager acl update \ /datastore/<DATASTORE>/<NAMESPACE> DatastoreReader \ --auth-id <TOKEN_ID>
Проверьте ACL:
proxmox-backup-manager acl list
Ожидаемый вывод:
ugid path roleid <PBS_USER> /datastore/<DATASTORE>/<NAMESPACE> DatastoreBackup <TOKEN_ID> /datastore/<DATASTORE>/<NAMESPACE> DatastoreBackup <PBS_USER> /datastore/<DATASTORE>/<NAMESPACE> DatastoreReader <TOKEN_ID> /datastore/<DATASTORE>/<NAMESPACE> DatastoreReader
Шаг 6: Запишите fingerprint сертификата PBS
Если PBS использует самоподписанный сертификат, Proxmox VE должен доверять fingerprint PBS.
На сервере PBS выполните:
proxmox-backup-manager cert info | grep Fingerprint
Ожидаемый вывод:
Fingerprint (sha256): <PBS_FINGERPRINT>
Сохраните fingerprint для следующего шага.
Документация Proxmox показывает workflow с fingerprint для самоподписанных сертификатов PBS при добавлении PBS storage в Proxmox VE.
Шаг 7: Добавьте PBS storage в Proxmox VE
Войдите в shell Proxmox VE от имени root.
Добавьте PBS storage, используя ID API-токена в качестве username. Введите секрет токена при запросе:
pvesm add pbs <PVE_STORAGE_ID> \ --server <PBS_HOST> \ --port <PBS_PORT> \ --datastore <DATASTORE> \ --namespace <NAMESPACE> \ --username <TOKEN_ID> \ --fingerprint <PBS_FINGERPRINT> \ --password
При запросе вставьте секрет API-токена:
Enter Password: <TOKEN_SECRET>
Ожидаемый результат: Proxmox VE добавляет конфигурацию PBS storage.
Проверьте storage:
pvesm status --storage <PVE_STORAGE_ID>
Ожидаемый вывод:
Name Type Status Total Used Available % <PVE_STORAGE_ID> pbs active ...
При использовании токена API с ограничением по пространству имен значения Total, Used и Available могут отображаться как 0, даже если статус active. Такое поведение является нормальным.
Вы также можете настроить это из веб-интерфейса Proxmox VE:
- Откройте Datacenter.
- Перейдите в Storage.
- Нажмите Add.
- Выберите Proxmox Backup Server.
- Установите ID равным
<PVE_STORAGE_ID>. - Установите Server равным
<PBS_HOST>. - Установите Datastore равным
<DATASTORE>. - Установите Namespace равным
<NAMESPACE>. - Установите Username равным
<TOKEN_ID>. - Установите Password равным секрету API-токена.
- Установите Fingerprint равным
<PBS_FINGERPRINT>, если это требуется. - Нажмите Add.

Ожидаемый результат: storage появляется в хранилищах Proxmox VE и отображается как active.
Шаг 8: Включите клиентское шифрование
Клиентское шифрование защищает данные резервной копии до того, как они покинут Proxmox VE. PBS хранит зашифрованные резервные копии VM, но ключ шифрования остается на стороне Proxmox VE. Это повышает безопасность резервного копирования Proxmox VE, потому что компрометация только datastore PBS не раскрывает содержимое дисков VM.
В веб-интерфейсе Proxmox VE:
- Откройте Datacenter.
- Перейдите в Storage.
- Выберите
<PVE_STORAGE_ID>. - Нажмите Edit.
- Перейдите на вкладку Encryption и выберите пункт Auto-generate a client encryption key.
- Сгенерируйте новый ключ, если это новый безопасный репозиторий резервных копий.
- Сохраните резервную копию ключа шифрования в менеджере паролей или offline secret vault.
- Нажмите OK.

Ожидаемый результат: новые резервные копии в этот PBS storage шифруются на стороне клиента.
Потеря ключа шифрования может сделать зашифрованные резервные копии невосстановимыми. Храните ключ отдельно от хоста Proxmox VE и протестируйте доступ к восстановлению, прежде чем полагаться на этот набор резервных копий.
Рекомендации по обращению с ключом:
| Практика | Причина |
|---|---|
| Store the key outside the Proxmox VE cluster | Защищает от потери кластера |
| Restrict file permissions | Уменьшает локальное раскрытие |
| Back up the key offline | Обеспечивает disaster recovery |
| Do not store the key on PBS only | Потеря или компрометация PBS не должна блокировать восстановление |
| Test restore with the key | Подтверждает, что восстановление работает до инцидента |
Шаг 9: Создайте backup job в Proxmox VE
Создайте backup job, который записывает данные в зашифрованный PBS storage.
В веб-интерфейсе Proxmox VE:
- Откройте Datacenter.
- Перейдите в Backup.
- Нажмите Add.
- Выберите nodes, VM или containers, которые нужно защитить.
- Установите Storage равным
<PVE_STORAGE_ID>. - Выберите расписание, например ежедневно в 02:00.
- Установите mode в соответствии с вашей рабочей нагрузкой.
- Оставьте retention пустым, если pruning будет управляться PBS.
- Нажмите Create.

Ожидаемый результат: Proxmox VE создает запланированный backup job, который записывает зашифрованные резервные копии в PBS.
Шаг 10: Настройте параметры prune
Pruning определяет, какие backup snapshots остаются видимыми и доступными для восстановления. Он не удаляет все неиспользуемые chunks с диска немедленно. PBS prune jobs можно настроить на вкладке Prune & GC или с помощью proxmox-backup-manager prune-job. В документации Proxmox указано, что конфигурация prune job хранится в /etc/proxmox-backup/prune.cfg.
Распространенная политика retention для ежедневных резервных копий VM:
| Параметр | Значение | Значение |
|---|---|---|
keep-daily |
7 | Хранить одну резервную копию в день за последние 7 дней |
keep-weekly |
4 | Хранить одну резервную копию в неделю за последние 4 недели |
keep-monthly |
6 | Хранить одну резервную копию в месяц за последние 6 месяцев |
Настройте эту политику на datastore:
proxmox-backup-manager prune-job create <JOB_ID> \ --store <DATASTORE> \ --ns <NAMESPACE> \ --keep-daily 7 \ --keep-weekly 4 \ --keep-monthly 6 \ --prune-schedule "03:00"
Ожидаемый результат: PBS применяет retention и запускает pruning ежедневно в 03:00.
Для datastore меньшего размера используйте более короткую политику:
proxmox-backup-manager prune-job create <JOB_ID> \ --store <DATASTORE> \ --ns <NAMESPACE> \ --keep-daily 3 \ --keep-weekly 2 \ --keep-monthly 1 \ --prune-schedule "03:00"
Ожидаемый результат: PBS хранит меньше restore points и потребляет меньше места.
Не задавайте большие значения, такие как keep-daily 90, keep-weekly 52 и keep-monthly 36, если вы не рассчитали требуемую емкость. Дедупликация резервных копий помогает, но она не делает хранилище безлимитным.
Шаг 11: Оцените объем хранилища для резервных копий
PBS дедуплицирует chunks, поэтому потребление хранилища не равно простому умножению полного размера VM на количество резервных копий. Однако вам все равно нужна консервативная оценка.
Используйте эту формулу:
Estimated required capacity = initial full protected data + changed data per backup * retained backup points + safety margin
Пример 1: Небольшая среда
| Значение | Величина |
|---|---|
| Protected VM data | 600 GiB |
| Average daily change rate | 3 percent |
| Changed data per day | 18 GiB |
| Retention | 7 daily, 4 weekly, 6 monthly |
| Approximate retained points | 17 |
| Changed data estimate | 306 GiB |
| Safety margin | 30 percent |
Расчет:
600 GiB + (18 GiB * 17) = 906 GiB 906 GiB * 1.30 = 1177.8 GiB
Рекомендуемая емкость datastore: не менее 1.2 TiB, желательно 1.5 TiB или больше.
Пример 2: Более крупная production-среда
| Значение | Величина |
|---|---|
| Protected VM data | 4 TiB |
| Average daily change rate | 5 percent |
| Changed data per backup | 204.8 GiB |
| Retention | 14 daily, 8 weekly, 12 monthly |
| Approximate retained points | 34 |
| Changed data estimate | 6.8 TiB |
| Safety margin | 30 percent |
Расчет:
4 TiB + (204.8 GiB * 34) = 10.8 TiB 10.8 TiB * 1.30 = 14.04 TiB
Рекомендуемая емкость datastore: не менее 14 TiB, желательно 16 TiB или больше.
Эти примеры намеренно консервативны. Фактическое использование зависит от churn VM, поведения гостевой файловой системы, compression, deduplication, частоты резервного копирования и того, как часто большие файлы перезаписываются внутри гостевых систем.
Шаг 12: Настройте Garbage Collection
Garbage collection (GC) - это процесс, который фактически удаляет неиспользуемые chunks из datastore. Pruning удаляет backup snapshots в соответствии с правилами retention, но chunks могут оставаться на диске, если другие snapshots все еще ссылаются на них или если они все еще находятся внутри safety window.
Garbage collection PBS имеет две фазы:
| Фаза | Что происходит |
|---|---|
| Mark | PBS читает index files и обновляет access time для referenced chunks |
| Sweep | PBS сканирует chunks и удаляет chunks старше cutoff time, если на них не ссылается ни один snapshot |
PBS использует cutoff на основе самого старого запущенного backup writer или 24 часов и 5 минут до времени запуска GC. Chunks внутри этого grace period логируются как pending removals вместо немедленного удаления. Это защищает выполняющиеся резервные копии и учитывает поведение filesystem relatime.
Запланируйте GC после pruning:
proxmox-backup-manager datastore update <DATASTORE> \ --gc-schedule "04:30"
Ожидаемый результат: PBS запускает garbage collection ежедневно в 04:30.
Рекомендуемое расписание для ежедневной резервной копии в 02:00:
| Задача | Примерное время | Назначение |
|---|---|---|
| Proxmox VE backup | 02:00 | Создать зашифрованные резервные копии VM |
| PBS prune | 03:00 | Применить политику retention |
| PBS garbage collection | 04:30 | Безопасно освободить неиспользуемые chunks |
Запуск GC сразу после prune не гарантирует немедленное освобождение места на диске. Некоторые chunks намеренно сохраняются как pending removals до тех пор, пока они не станут достаточно старыми для безопасного удаления.
Проверьте статус GC:
proxmox-backup-manager garbage-collection status <DATASTORE>
Запустите GC вручную при необходимости:
proxmox-backup-manager garbage-collection start <DATASTORE>
Ожидаемый результат: PBS запускает задачу garbage collection на уровне datastore. Официальная документация PBS также приводит эти команды и опцию веб-интерфейса на вкладке datastore Prune & GC.
Шаг 13: Выполните тестовое резервное копирование
Запустите backup job вручную из Proxmox VE:
- Откройте Datacenter.
- Перейдите в Backup.
- Выберите backup job.
- Нажмите Run now.
- Подтвердите действие.
Ожидаемый результат: задача резервного копирования успешно завершается.
Также можно проверить из shell Proxmox VE:
pvesm status --storage <PVE_STORAGE_ID>
Ожидаемый вывод:
Name Type Status <PVE_STORAGE_ID> pbs active
На PBS откройте:
- Datastore.
<DATASTORE>.- Content.
<NAMESPACE>.
Ожидаемый результат: новая резервная копия VM или container появляется в namespace.
Проверка
Проверьте права токена на PBS:
proxmox-backup-manager user permissions <TOKEN_ID> \ --path /datastore/<DATASTORE>/<NAMESPACE>
Ожидаемый результат: токен показывает права datastore только для целевого namespace.
Проверьте доступ к storage из Proxmox VE:
pvesm status --storage <PVE_STORAGE_ID>
Ожидаемый результат:
<PVE_STORAGE_ID> pbs active
Проверьте, что резервные копии зашифрованы:
- Откройте Proxmox VE.
- Выберите резервную копию VM на PBS storage.
- Убедитесь, что операции восстановления доступны из Proxmox VE.
- Убедитесь, что ключ сохранен за пределами кластера.
Проверьте конфигурацию prune и GC:
proxmox-backup-manager datastore show <DATASTORE>
Ожидаемый результат: конфигурация datastore показывает расписания prune и garbage collection.
Что делать, если API-токен скомпрометирован
Если секрет токена раскрыт, немедленно отзовите его.
На PBS удалите токен:
proxmox-backup-manager user delete-token <PBS_USER> <TOKEN_NAME>
Ожидаемый результат: PBS удаляет токен.
Затем создайте заменяющий токен:
proxmox-backup-manager user generate-token <PBS_USER> <NEW_TOKEN_NAME> proxmox-backup-manager acl update /datastore/<DATASTORE>/<NAMESPACE> DatastoreBackup --auth-id '<PBS_USER>!<NEW_TOKEN_NAME>' proxmox-backup-manager acl update /datastore/<DATASTORE>/<NAMESPACE> DatastoreReader --auth-id '<PBS_USER>!<NEW_TOKEN_NAME>'
Обновите пароль storage в Proxmox VE:
pvesm set <PVE_STORAGE_ID> --username '<PBS_USER>!<NEW_TOKEN_NAME>' pvesm set <PVE_STORAGE_ID> --password
При запросе вставьте новый секрет токена.
Ожидаемый результат: Proxmox VE использует новый токен для безопасной аутентификации с API-токеном.
API-токены предназначены для простого отзыва при компрометации клиента. Это одна из основных причин использовать токены вместо хранения пароля пользователя в Proxmox VE.
Откат изменений
Перед удалением хранилища сохраните копию ключа шифрования за пределами кластера.
Удалите запись storage в Proxmox VE:
pvesm remove <PVE_STORAGE_ID>
Ожидаемый результат: Proxmox VE удаляет конфигурацию PBS storage. Существующие резервные копии на PBS остаются в datastore.
Удалите API-токен:
proxmox-backup-manager user delete-token <PBS_USER> <TOKEN_NAME>
Ожидаемый результат: PBS отзывает API-токен.
Удалите записи ACL:
proxmox-backup-manager acl update /datastore/<DATASTORE>/<NAMESPACE> DatastoreReader \ --auth-id <ID> --delete 1 proxmox-backup-manager acl update /datastore/<DATASTORE>/<NAMESPACE> DatastoreBackup \ --auth-id <ID> --delete 1
Ожидаемый результат: PBS удаляет права namespace.
Удалите отдельного пользователя, если он больше не нужен:
proxmox-backup-manager user remove <PBS_USER>
Ожидаемый результат: PBS удаляет пользователя.
Не удаляйте namespace или datastore, если вы не хотите намеренно удалить данные резервных копий. Удаление конфигурации доступа отличается от удаления резервных копий.
Устранение неполадок
Proxmox VE показывает PBS storage как Inactive
Проверьте сетевой доступ:
nc -vz <PBS_HOST> 8007
Ожидаемый вывод:
Connection to <PBS_HOST> 8007 port [tcp/*] succeeded!
Проверьте fingerprint PBS:
proxmox-backup-manager cert info | grep Fingerprint
Если fingerprint изменился, обновите его в Proxmox VE:
pvesm set <PVE_STORAGE_ID> --fingerprint <PBS_FINGERPRINT>
Аутентификация с API-токеном завершается ошибкой
Убедитесь, что username является полным ID токена:
<PBS_USER>!<TOKEN_NAME>
Пример:
pve-backup@pbs!pve-token
Убедитесь, что поле password содержит секрет токена, а не пароль пользователя PBS.
Проверьте права:
proxmox-backup-manager acl list
У токена должны быть записи ACL на путь namespace, и у родительского пользователя также должны быть совместимые права.
Backup завершается ошибкой прав доступа
Проверьте путь namespace:
/datastore/<DATASTORE>/<NAMESPACE>
Не используйте файловый путь datastore, например /mnt/datastore/<DATASTORE>, при назначении ACL. Пути ACL PBS используют формат /datastore/<DATASTORE>.
Datastore продолжает расти после pruning
Обычно это ожидаемо, если GC еще не запускался или если chunks все еще находятся внутри safety window. PBS не удаляет chunks сразу после prune, потому что chunks могут все еще использоваться другими snapshots или защищаться cutoff window GC.
Проверьте статус GC:
proxmox-backup-manager garbage-collection status <DATASTORE>
Если GC не запланирован, настройте его:
proxmox-backup-manager datastore update <DATASTORE> \ --gc-schedule "04:30"
Зашифрованные резервные копии невозможно восстановить
Убедитесь, что storage Proxmox VE все еще имеет доступ к ключу шифрования.
Проверьте внутренний inventory ключей резервного копирования. Если исходный кластер Proxmox VE потерян, для восстановления требуется сохраненный ключ шифрования. Без него клиентское шифрование резервных копий может помешать восстановлению.
Заключение
Вы настроили безопасное подключение Proxmox Backup Server из Proxmox VE с помощью отдельного пользователя PBS, Proxmox API-токенов, прав, ограниченных namespace, и клиентского шифрования. Вы также настроили расписания prune и garbage collection, чтобы шифрование резервных копий в настройке Proxmox оставалась устойчивой по мере роста истории резервных копий.
Эта конфигурация повышает безопасность аутентификации резервного копирования Proxmox VE, защищает зашифрованные резервные копии VM от раскрытия на стороне сервера и предоставляет практичный безопасный репозиторий резервных копий для долгосрочной конфигурации Proxmox Backup Server.
Рекомендуемые следующие шаги:
- Протестировать полное восстановление VM.
- Протестировать file-level restore.
- Сохранить ключ шифрования как минимум в двух безопасных местах.
- Отслеживать рост datastore после каждого цикла prune и GC.
- Добавить PBS verification jobs для обнаружения скрытого повреждения резервных копий.
- Документировать процесс отзыва токена в вашем incident response plan.
Версия документа: 1.0
Последнее обновление: Июнь 2026
Владелец: Команда технической документации