Product SiteDocumentation Site

35.5. Настройка аутентификации

По умолчанию OpenNebula использует встроенную систему аутентификации на основе пары «пользователь/пароль». Учётные данные пользователей хранятся в базе данных OpenNebula.
Для интеграции с внешними системами (например, LDAP) могут быть подключены специализированные драйверы аутентификации. При этом допускается одновременное использование нескольких методов аутентификации, а для каждого пользователя можно указать свой способ входа.
Следует учитывать, что различные методы аутентификации поддерживают разные интерфейсы доступа (CLI, API, Sunstone).

Таблица 35.1. Интерфейсы и методы аутентификации

Метод аутентификации
Поддерживаемые интерфейсы
API, CLI, Sunstone
API, CLI, Sunstone
SSH
API, CLI
X.509
CLI, Sunstone
Аутентификация через Sunstone (remote)
Только Sunstone

Примечание

Аутентификация через Sunstone (remote-аутентификация) используется преимущественно при интеграции с внешними системами идентификации и требует дополнительной настройки веб-сервера (например, Apache или Nginx), через который осуществляется доступ к Sunstone.

35.5.1. Аутентификация по SSH-ключам

Аутентификация по SSH-ключам позволяет пользователям взаимодействовать с OpenNebula через интерфейс командной строки (CLI) и API, используя стандартные SSH-ключи вместо паролей. При этом аутентификационный токен шифруется закрытым SSH-ключом пользователя, что повышает уровень безопасности и устраняет необходимость хранения паролей в открытом виде.

Важно

Данный метод аутентификации работает только для CLI и API и не применяется к веб-интерфейсу.

Примечание

Поддерживаются только RSA-ключи (формат id_rsa).
Механизм аутентификации по SSH включён в OpenNebula по умолчанию (см. раздел AUTH_MAD в файле /etc/one/oned.conf):
…
AUTH_MAD = [
    EXECUTABLE = "one_auth_mad",
    AUTHN = "ssh,x509,ldap,server_cipher,server_x509"
]

35.5.1.1. Генерация SSH-ключа пользователем

Пользователь генерирует пару SSH-ключей:
$ ssh-keygen -t rsa
Рекомендации:
  • не следует изменять путь по умолчанию ($HOME/.ssh/id_rsa), так как OpenNebula ищет ключ именно там;
  • закрытый ключ рекомендуется защитить парольной фразой (passphrase).

35.5.1.2. Создание нового пользователя

Создание нового пользователя:
  1. Пользователь генерирует публичную часть ключа для передачи администратору:
    $ oneuser key
    Enter old passphrase:
    MIIBCAKCAQEApUO+JISjSf02rFVtDr1yar/34EoUoVETx0n+RqWNav+5wi+gHiPp3e03AfEkXzjDYi8F
    ...
    
    Полученную строку необходимо передать администратору облака.
  2. Администратор:
    • сохраняет полученную строку в файл (например, /tmp/pub_key);
    • создаёт пользователя, указав публичный SSH-ключ:
      $ oneuser create newuser --ssh --read-file /tmp/pub_key
      
      альтернативный вариант (не рекомендуется с точки зрения безопасности) — если у администратора есть доступ к закрытому ключу пользователя:
      $ oneuser create newuser --ssh --key /home/newuser/.ssh/id_rsa
      

35.5.1.3. Перевод существующего пользователя на SSH-аутентификацию

Для существующего пользователя можно изменить метод аутентификации и задать публичный ключ:
$ oneuser chauth newuser ssh
$ oneuser passwd newuser --ssh --read-file /tmp/pub_key

35.5.1.4. Генерация аутентификационного токена

Перед использованием CLI пользователь должен сгенерировать аутентификационный токен:
$ oneuser login newuser --ssh
Enter old passphrase:
* Do you want to overwrite the file /home/newuser/.one/one_auth? (Y|N):
y
overwriting /home/user/.one/one_auth ...
Authentication Token is:
newuser:062ca55c97e0e327a50d1027f59cdedc68495cb836ddeebc68d1ffd4eb293cab
Команда oneuser login:
  • использует закрытый ключ $HOME/.ssh/id_rsa (если не указан иной путь);
  • сохраняет токен в файл, заданный переменной окружения ONE_AUTH (по умолчанию — $HOME/.one/one_auth);
  • устанавливает время жизни токена — 10 часов.
Чтобы указать другой SSH-ключ или изменить срок действия токена, можно использовать параметры:
$ oneuser login newuser --ssh --key /path/to/id_rsa --time 3600

Примечание

Если токен утерян или скомпрометирован, достаточно дождаться окончания срока его действия либо сменить SSH-ключ и сгенерировать новый токен.