Создание пользователя и настройка прав в Proxmox VE

Пошаговое создание отдельного пользователя в Proxmox VE, назначение ролей, ограничение доступа по пути и проверка фактических прав.

Для повседневной работы в Proxmox VE не обязательно использовать учётную запись root@pam. Отдельные пользователи позволяют ограничить доступ к конкретным виртуальным машинам, хранилищам, пулам и административным операциям.

В этой инструкции рассматривается только создание пользователя, назначение ролей и проверка прав доступа.

Подходит для: Proxmox VE 8 и 9
Уровень сложности: средний
Время выполнения: около 15–20 минут
Требуемый доступ: учётная запись с правами управления пользователями и ACL

Что будет настроено

После выполнения инструкции можно будет:

  • создать пользователя Proxmox VE;
  • выбрать realm;
  • создать группу;
  • назначить роль;
  • ограничить доступ по пути;
  • использовать resource pool;
  • проверить фактические привилегии;
  • безопасно удалить лишние разрешения.

Почему не стоит работать только через root

Учётная запись:

root@pam

имеет полный доступ к узлу и кластеру.

Постоянная работа под root увеличивает последствия:

  • ошибочного действия;
  • компрометации пароля;
  • утечки сессии;
  • неверного API-запроса;
  • случайного удаления VM или storage.

Для ежедневного администрирования лучше использовать отдельную учётную запись с минимально необходимыми правами.

Основные понятия

Система доступа Proxmox VE состоит из нескольких элементов:

User
Realm
Group
Role
Privilege
Path
ACL

User

Конкретная учётная запись.

Пример:

operator@pve

Realm

Источник аутентификации.

Примеры:

pam
pve
ldap
ad
openid

Group

Группа пользователей, которой можно назначить общие права.

Privilege

Отдельное разрешение на действие.

Примеры:

VM.Audit
VM.PowerMgmt
VM.Console
Datastore.Audit
Sys.Audit

Role

Набор привилегий.

Примеры встроенных ролей:

Administrator
PVEAdmin
PVEVMAdmin
PVEVMUser
PVEAuditor
PVEDatastoreAdmin
PVEDatastoreUser

Path

Область, к которой применяется ACL.

Примеры:

/
/vms/100
/pool/production
/storage/nfs-backup
/nodes/pve01

ACL

Связь пользователя или группы с ролью и путём.

Проверка текущих пользователей

В веб-интерфейсе:

Datacenter → Permissions → Users

Через CLI:

pveum user list

Проверка realms

В веб-интерфейсе:

Datacenter → Permissions → Realms

Через CLI:

pveum realm list

Для локального пользователя Proxmox VE обычно используется:

pve

Для системного Linux-пользователя:

pam

Разница между pve и pam

Realm pve

Пользователь хранится в конфигурации Proxmox VE.

Пример:

operator@pve

Подходит для отдельной учётной записи только в Proxmox.

Realm pam

Использует системную учётную запись Linux.

Пример:

admin@pam

Пользователь должен существовать в операционной системе узла.

Для обычного оператора Proxmox чаще удобнее realm pve.

Создание пользователя через веб-интерфейс

Откройте:

Datacenter → Permissions → Users

Нажмите:

Add

Заполните поля.

User name

Пример:

operator

Realm

Выберите:

Proxmox VE authentication server

То есть:

pve

Password

Задайте сложный уникальный пароль.

Expire

Оставьте пустым для бессрочной учётной записи либо задайте дату окончания.

Enabled

Оставьте включённым.

First name и Last name

Поля необязательны, но полезны для идентификации пользователя.

Нажмите:

Add

Создание пользователя через CLI

pveum user add operator@pve   --comment "Оператор виртуальных машин"

Задайте пароль:

pveum passwd operator@pve

Проверьте:

pveum user list

Создание группы

Группы удобны, если одинаковые права нужны нескольким пользователям.

В веб-интерфейсе:

Datacenter → Permissions → Groups

Нажмите:

Create

Пример:

Group: vm-operators
Comment: Операторы виртуальных машин

Создание группы через CLI

pveum group add vm-operators   --comment "Операторы виртуальных машин"

Проверьте:

pveum group list

Добавление пользователя в группу

pveum user modify operator@pve   --groups vm-operators

Проверьте:

pveum user list

Через веб-интерфейс группу можно указать в настройках пользователя.

Проверка встроенных ролей

pveum role list

Для просмотра конкретной роли:

pveum role list |
grep PVEVMUser

Часто используемые роли

PVEAuditor

Только просмотр конфигурации и состояния.

Подходит для:

  • аудитора;
  • наблюдения;
  • технической поддержки без права изменений.

PVEVMUser

Базовые операции с VM, доступ к консоли и управлению питанием в пределах выданного пути.

PVEVMAdmin

Расширенное управление виртуальными машинами.

Может изменять конфигурацию VM в пределах разрешённого пути.

PVEAdmin

Широкие административные права, но не полный аналог Administrator.

Administrator

Полный доступ ко всем объектам и операциям.

Назначайте только доверенным администраторам.

Просмотр привилегий роли

pveum role list

Для подробного просмотра можно использовать:

pvesh get /access/roles

Создание собственной роли

Если встроенные роли слишком широкие, создайте собственную.

Пример роли для запуска, остановки и просмотра VM:

pveum role add VMOperator   -privs "VM.Audit VM.Console VM.PowerMgmt"

Проверьте:

pveum role list |
grep VMOperator

Изменение собственной роли

pveum role modify VMOperator   -privs "VM.Audit VM.Console VM.PowerMgmt VM.Monitor"

Изменение роли сразу влияет на все ACL, где она используется.

Планирование области доступа

Перед назначением ACL определите, к каким объектам пользователь должен иметь доступ.

Примеры:

Только VM 100
Несколько VM в одном pool
Все VM
Только одно storage
Только просмотр узла
Полный доступ к Datacenter

Выдавайте права на наиболее узком подходящем пути.

Доступ к одной виртуальной машине

Путь:

/vms/100

Назначение через CLI:

pveum acl modify /vms/100   --users operator@pve   --roles PVEVMUser

Проверьте:

pveum acl list

Пользователь получит права только на VM с ID 100.

Доступ к нескольким VM через pool

Для группы связанных VM удобнее создать resource pool.

В веб-интерфейсе:

Datacenter → Permissions → Pools

Создайте:

production

Добавьте в pool нужные VM и storage.

Создание pool через CLI

pvesh create /pools   --poolid production   --comment "Production virtual machines"

Добавление VM в pool:

pvesh set /pools/production   --vms 100,101,102

Перед изменением существующего pool проверьте его текущее содержимое, чтобы случайно не заменить список.

Назначение роли на pool

pveum acl modify /pool/production   --groups vm-operators   --roles PVEVMAdmin

Теперь группа получает права на объекты внутри pool.

Доступ только на просмотр

Для аудитора:

pveum acl modify /   --users auditor@pve   --roles PVEAuditor

Путь / распространяется на весь Datacenter.

Не назначайте широкую роль на /, если достаточно узкого пути.

Доступ к storage

Пример:

pveum acl modify /storage/nfs-backup   --groups backup-operators   --roles PVEDatastoreUser

Административный доступ к storage:

pveum acl modify /storage/nfs-backup   --groups storage-admins   --roles PVEDatastoreAdmin

Доступ к узлу

Путь:

/nodes/pve01

Пример только для просмотра:

pveum acl modify /nodes/pve01   --users operator@pve   --roles PVEAuditor

Распространение прав

Параметр propagation определяет, наследуются ли права дочерними объектами.

В веб-интерфейсе используется флажок:

Propagate

Через CLI:

pveum acl modify /pool/production   --groups vm-operators   --roles PVEVMAdmin   --propagate 1

Если propagate=0, разрешение применяется только к указанному пути.

Проверка ACL

pveum acl list

Фильтрация по пользователю:

pveum acl list |
grep 'operator@pve'

Фильтрация по группе:

pveum acl list |
grep 'vm-operators'

Проверка эффективных прав

Для пользователя:

pvesh get /access/permissions   --userid operator@pve

Для конкретного пути:

pvesh get /access/permissions   --userid operator@pve   --path /vms/100

Эта проверка показывает итоговые привилегии с учётом:

  • пользователя;
  • групп;
  • ролей;
  • пути;
  • наследования.

Проверка через отдельную сессию

Не закрывайте текущую административную сессию.

Откройте приватное окно браузера и войдите как:

operator@pve

Проверьте:

  • какие узлы видны;
  • какие VM доступны;
  • открывается ли консоль;
  • можно ли запустить и остановить VM;
  • недоступны ли лишние storage и настройки Datacenter.

Практическая проверка обязательна.

Пример: оператор одной VM

Требования:

Просмотр VM 100
Консоль VM 100
Запуск и остановка VM 100
Без изменения CPU, RAM и дисков

Создайте роль:

pveum role add VMConsoleOperator   -privs "VM.Audit VM.Console VM.PowerMgmt"

Назначьте:

pveum acl modify /vms/100   --users operator@pve   --roles VMConsoleOperator

Проверьте:

pvesh get /access/permissions   --userid operator@pve   --path /vms/100

Пример: администратор группы VM

Создайте pool:

development

Добавьте тестовые VM.

Назначьте группе:

pveum acl modify /pool/development   --groups developers   --roles PVEVMAdmin   --propagate 1

Пользователи группы смогут управлять только объектами pool.

Разделение обязанностей

Практичная схема:

platform-admins — полный доступ
vm-admins — управление VM
vm-operators — запуск, остановка, консоль
auditors — только просмотр
backup-operators — backup storage и задания

Не используйте одну общую учётную запись для нескольких сотрудников.

API tokens

Для автоматизации лучше использовать API token, а не пароль пользователя.

Токен привязан к существующему пользователю.

Создание через веб-интерфейс:

Datacenter → Permissions → API Tokens

При создании сохраните secret сразу: повторно он обычно не показывается.

Создание API token через CLI

pveum user token add operator@pve automation

Команда вернёт token value.

Сохраните его в защищённом хранилище.

Privilege Separation

Для API token можно использовать разделение привилегий.

При включённом privilege separation эффективные права токена ограничиваются пересечением:

  • прав пользователя;
  • ACL самого токена.

Это безопаснее для автоматизации.

Отключение пользователя

Временно отключить:

pveum user modify operator@pve   --enable 0

Включить обратно:

pveum user modify operator@pve   --enable 1

Проверьте:

pveum user list

Смена пароля

pveum passwd operator@pve

Для realm pam пароль меняется системными средствами Linux:

passwd USER_NAME

Удаление ACL

Удалить назначение пользователя:

pveum acl delete /vms/100   --users operator@pve   --roles PVEVMUser

Перед выполнением проверьте точный ACL:

pveum acl list

Удаление пользователя

Сначала:

  1. Отключите пользователя.
  2. Проверьте его ACL.
  3. Удалите API tokens.
  4. Удалите пользователя из групп.
  5. Убедитесь, что учётная запись больше не используется.

Удаление:

pveum user delete operator@pve

Проверьте:

pveum user list

Удаление группы

Проверьте ACL:

pveum acl list |
grep vm-operators

Удалите:

pveum group delete vm-operators

Удаление собственной роли

Сначала убедитесь, что роль не используется ACL.

pveum acl list |
grep VMOperator

Удалите:

pveum role delete VMOperator

Встроенные роли удалять нельзя.

Двухфакторная аутентификация

Для административных пользователей рекомендуется включить двухфакторную аутентификацию.

В зависимости от конфигурации realm могут использоваться:

  • TOTP;
  • WebAuthn;
  • recovery keys.

Настройка 2FA является отдельной темой и не заменяет корректную ACL-модель.

Резервная административная учётная запись

Перед ограничением root@pam создайте и проверьте отдельную административную учётную запись.

Не отключайте последний рабочий полный доступ.

Сохраните резервный доступ к консоли узла.

Проверка журнала входов

В веб-интерфейсе:

Datacenter → Tasks

На узле:

journalctl -u pvedaemon   --since today   --no-pager

Проверка неудачных входов:

journalctl --since today |
grep -iE 'authentication failure|failed authentication'

Типичные проблемы

Пользователь входит, но не видит VM

Проверьте ACL:

pveum acl list

Проверьте эффективные права:

pvesh get /access/permissions   --userid USER@REALM

Пользователь видит VM, но не может открыть консоль

В роли должна быть привилегия:

VM.Console

Проверьте собственную роль.

Пользователь может запустить VM, но не изменить её параметры

Это ожидаемо для ограниченной роли с:

VM.PowerMgmt

без административных VM-привилегий.

Права на pool не применились

Проверьте:

  • входит ли VM в pool;
  • правильный ли путь /pool/POOL_NAME;
  • включён ли Propagate;
  • входит ли пользователь в нужную группу.

После добавления в группу права не появились

Выйдите из сессии и войдите снова.

Проверьте:

pveum user list
pveum acl list

Пользователь получил слишком широкие права

Ищите ACL на родительских путях:

/
/nodes
/vms

Проверьте членство в других группах.

Удалён ACL, но доступ остался

Права могут приходить:

  • от группы;
  • с родительского пути;
  • от другой роли;
  • через propagation.

Используйте проверку эффективных permissions.

Безопасный порядок настройки

  1. Определить необходимые действия пользователя.
  2. Выбрать realm.
  3. Создать отдельного пользователя.
  4. Создать группу.
  5. Выбрать встроенную или собственную роль.
  6. Назначить ACL на узкий путь.
  7. Проверить effective permissions.
  8. Проверить вход в отдельной сессии.
  9. Убедиться, что лишние объекты недоступны.
  10. Только после проверки ограничивать старые учётные записи.

Быстрый набор команд

Создать пользователя:

pveum user add operator@pve
pveum passwd operator@pve

Создать группу:

pveum group add vm-operators

Добавить пользователя:

pveum user modify operator@pve   --groups vm-operators

Назначить права на VM:

pveum acl modify /vms/100   --groups vm-operators   --roles PVEVMUser

Проверить:

pveum acl list

Эффективные права:

pvesh get /access/permissions   --userid operator@pve   --path /vms/100

Итог

После выполнения инструкции:

  • создан отдельный пользователь;
  • выбран локальный realm;
  • создана группа;
  • назначена встроенная или собственная роль;
  • доступ ограничен конкретной VM или resource pool;
  • проверены эффективные привилегии;
  • рассмотрены API tokens и безопасное удаление доступа.

Правильная ACL-модель должна выдавать пользователю только те привилегии и только на те объекты, которые необходимы для его работы.

← Предыдущая статья Проброс PCI-устройства в виртуальную машину Proxmox VE Следующая статья → Настройка двухфакторной аутентификации в Proxmox VE