Product SiteDocumentation Site

35.5.2. LDAP аутентификация

Аутентификация LDAP позволяет пользователям использовать те же учётные данные, что и в LDAP, обеспечивая централизованное управление доступом. Любой пользователь, успешно прошедший аутентификацию в LDAP, сможет использовать OpenNebula (при условии наличия соответствующих прав).

35.5.2.1. Включение LDAP

Драйвер LDAP включён по умолчанию в конфигурации OpenNebula (см. раздел AUTH_MAD в файле /etc/one/oned.conf):
…
AUTH_MAD = [
    EXECUTABLE = "one_auth_mad",
    AUTHN = "ssh,x509,ldap,server_cipher,server_x509"
]
Для автоматического создания пользователей при первом входе в LDAP необходимо:
  1. Добавить метод default в атрибут AUTHN:
    AUTH_MAD = [
        EXECUTABLE = "one_auth_mad",
        AUTHN = "default,ssh,x509,ldap,server_cipher,server_x509"
    ]
    
  2. Создать символическую ссылку:
    # ln -s /var/lib/one/remotes/auth/ldap /var/lib/one/remotes/auth/default
    

Важно

В файле /etc/one/sunstone-server.conf должно быть указано:
:auth: opennebula

35.5.2.2. Конфигурация LDAP

Основной файл настройки — /etc/one/auth/ldap_auth.conf. Формат: YAML-хеш, где:
  • каждый ключ (кроме :order) описывает один LDAP-сервер;
  • :order — массив с порядком опроса серверов.

Примечание

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

Таблица 35.2. Параметры файла /etc/one/auth/ldap_auth.conf

Параметр
Описание
:user
Имя пользователя, имеющего право выполнять запросы к LDAP. Не требуется при анонимном доступе
:password
Пароль для пользователя, определенного в :user. Не требуется при анонимном доступе
:auth_method
Поддерживается только :simple
:encryption
Можно установить значение :simple_tls, если требуется SSL-соединение
:host
LDAP-сервер
:port
Порт LDAP-сервера (обычно 389 или 636)
:timeout
Тайм-аут подключения и аутентификации (в секундах)
:base
Базовый DN для поиска пользователей
:group_base
Альтернативный DN для поиска групп
:group
Если задано, только пользователи из этой группы могут входить
:user_field
Атрибут LDAP, содержащий логин (например, uid, sAMAccountName)
:group_field
Атрибут членства в группе (по умолчанию member). Для вложенных групп в AD можно использовать: member:1.2.840.113556.1.4.1941
:mapping_generate
Автоматическая генерация файла сопоставления групп
:mapping_timeout
Интервал обновления файла сопоставления (в секундах)
:mapping_filename
Имя файла сопоставления (должно быть уникальным для каждого сервера)
:mapping_key
Ключ в шаблоне группы, содержащий DN LDAP-группы
:mapping_default
Группа OpenNebula по умолчанию для пользователей без сопоставления. Установите false, чтобы запретить вход таким пользователям
:rfc2307bis:
true для Active Directory, false для OpenLDAP
:group_admin_group_dn:
DN группы, члены которой становятся администраторами всех сопоставленных групп в OpenNebula

Примечание

Автоматическое назначение администраторов групп можно отключить, установив DRIVER_MANAGED_GROUP_ADMIN = "NO" в разделе ldap файла oned.conf.

35.5.2.3. Управление пользователями

При включённой автоматической регистрации создание пользователей вручную не требуется.
Пользователи могут хранить учётные данные в файле, указанном в переменной ONE_AUTH (по умолчанию — $HOME/.one/one_auth), в формате:
<user_dn>:ldap_password
где:
  • <user_dn> — DN пользователя в LDAP;
  • ldap_password — пароль пользователя.
Если DN или пароль содержат пробелы или специальные символы, используйте команду экранирования: oneuser encode <user> [<password>]. Например:
$ oneuser encode 'cn=First Name,dc=institution,dc=country' 'pass word'
cn=First%20Name,dc=institution,dc=country:pass%20word
Результат этой команды следует поместить в файл $ONE_AUTH.
Для повышения безопасности следует использовать токены аутентификации (см. Токены аутентификации), чтобы не хранить пароль в открытом виде.

35.5.2.4. Обновление существующих пользователей до LDAP

Перевести существующего пользователя на аутентификацию через LDAP можно, выполнив команду:
$ oneuser chauth <id|name> ldap

35.5.2.5. Примеры настройки

Для подключения к Active Directory нужны:
  • сервер AD с поддержкой простой аутентификации по имени пользователя и паролю;
  • пользователь с правами на чтение в дереве пользователей Active Directory.
Для подключения к Active Directory в файле /etc/one/auth/ldap_auth.conf необходимо указать:
  • :user — пользователь AD с правами на чтение в дереве пользователей (пользователь указывается в формате opennebula@test.alt);
  • :password — пароль пользователя;
  • :host — IP-адрес или имя сервера AD (имя должно разрешаться через DNS или /etc/hosts);
  • :base — базовый DN для поиска пользователя;
  • :user_field — для этого параметра следует установить значение sAMAccountName;
  • :rfc2307bis — для этого параметра следует установить значение true.
Пример файла /etc/one/auth/ldap_auth.conf для настройки аутентификации в домене AD (домен test.alt):
 server 1:
    :user: 'opennebula@test.alt'
    :password: 'Pa$$word'
    :auth_method: :simple
    :host: dc1.test.alt
    :port: 389
    :base: 'dc=test,dc=alt'
    :user_field: 'sAMAccountName'
    :mapping_generate: false
    :mapping_timeout: 300
    :mapping_filename: server1.yaml
    :mapping_key: GROUP_DN
    :mapping_default: 100
    :rfc2307bis: true
:order:
    - server 1

Примечание

Если доступ к серверу LDAP осуществляется по протоколу ldap без шифрования, на контроллере домена SambaDC необходимо отключить ldaps в /etc/samba/smb.conf в секции [global]:
ldap server require strong auth = no
и перезапустить samba:
# systemctl restart samba

Примечание

Группа, указанная в параметре :mapping_default должна существовать в OpenNebula.

Примечание

Пример файла /etc/one/auth/ldap_auth.conf для настройки аутентификации в домене FreeIPA (домен example.test):
 server 1:
    :user: 'uid=admin,cn=users,cn=accounts,dc=example,dc=test'
    :password: '12345678'
    :auth_method: :simple
    :host: ipa.example.test
    :port: 389
    :base: 'dc=example,dc=test'
    :user_field: 'uid'
    :mapping_generate: false
    :mapping_timeout: 300
    :mapping_filename: server1.yaml
    :mapping_key: GROUP_DN
    :mapping_default: 100
    :rfc2307bis: true
:order:
    - server 1
После успешной аутентификации пользователь AD отображается в интерфейсе Sunstone:
Пользователи AD

35.5.2.6. Сопоставление групп

Пользователи LDAP могут автоматически включаться в группы OpenNebula на основе их членства в LDAP-группах.
Автоматическая генерация файла сопоставления:
  1. В шаблоне группы OpenNebula добавить строку:
    GROUP_DN="CN=office,CN=Users,DC=test,DC=alt"
    Шаблон группы
  2. В файле /etc/one/auth/ldap_auth.conf указать:
    :mapping_generate: true
    :mapping_key: GROUP_DN
    
    Поиск DN сопоставляемой группы будет осуществляться в этом параметре шаблона.
  3. При следующей аутентификации будет создан файл /var/lib/one/server1.yaml:
    ---
    CN=office,CN=Users,DC=test,DC=alt: '100'
    
    Пользователи группы AD office будут сопоставлены с группой ALT (ID=100).
Можно отключить автоматическую генерацию файла сопоставления, установив значение :mapping_generate: false и создав файл /var/lib/one/server1.yaml:
CN=office,CN=Users,DC=test,DC=alt: '100'
CN=Domain Admins,CN=Users,DC=test,DC=alt: '101'
Пользователи из office попадут в группу с ID 100, из Domain Admins — в ID 101.
Сопоставление групп AD с группами OpenNebula

Примечание

При использовании нескольких LDAP-серверов следует использовать уникальные :mapping_key и :mapping_file.
Группы пользователя обновляются при каждой аутентификации. Если используется токен, обновление произойдёт только после его истечения Максимальный срок действия токена настраивается в oned.conf.
Чтобы отключить автоматическое управление группами, необходимо установить в oned.conf:
AUTH_MAD_CONF = [
  ldap = [
    DRIVER_MANAGED_GROUPS = "NO"
  ]
]