Настройка Rundeck + LDAP

Как понятно из заголовка в статье пойдет речь о настройке Rundeck и в частности аутентификации через LDAP. В моем случае в качестве LDAP сервера выступает ApacheDS, но по сути это не столь важно (хотя приведенная ниже конфигурация не подойдет для Active Directory).

Для начала краткое описание логики. По умолчанию Rundeck ипользует jaas-loginmodule, нам же необходимо использовать jaas-ldap. Для этого необходимо будет изменить параметры запуска Rundeck и прописать имя нашего модуля с конфигурацией. В конфиге мы прописываем параметры подключения к серверу, атрибуты по которым Rundeck будет запрашивать пользовыателей, группы, пути по которым он их будет искать. Let’s Go! ( Кста:Официальная документация тут).

Для изменений параметра запуска, изменим в файле /etc/rundeck/profile следующие параметры:

значение по умолчанию:

export RDECK_JVM="-Djava.security.auth.login.config=/etc/rundeck/jaas-loginmodule.conf \
       -Dloginmodule.name=RDpropertyfilelogin \

зменяем на

export RDECK_JVM="-Djava.security.auth.login.config=/etc/rundeck/jaas-ldap.conf \
        -Dloginmodule.name=ldap \

Мы прописали путь к файлу конфигурации и имя модуля в нашейконфигурации. Имя можно менять, сути это не имеет.

Далее создаем файл jaas-ldap.conf и прописываем в нем слудующие параметры:

ldap {
    com.dtolabs.rundeck.jetty.jaas.JettyCachingLdapLoginModule required
      debug="true"
      contextFactory="com.sun.jndi.ldap.LdapCtxFactory"
      providerUrl="ldap://192.168.0.1:10389"
      bindDn="uid=authuser,ou=users,ou=system"
      bindPassword="Your-Super-Secure-Password"
      authenticationMethod="simple"
      forceBindingLogin="true"
      userBaseDn="ou=users,dc=example,dc=local"
      userRdnAttribute="uid"
      userIdAttribute="uid"
      userPasswordAttribute="userPassword"
      userObjectClass="inetOrgPerson"
      roleBaseDn="ou=groups,dc=example,dc=local"
      roleNameAttribute="cn"
      roleMemberAttribute="memberUid"
      roleUsernameMemberAttribute="memberUid"
      supplementalRoles="user"
      roleObjectClass="posixGroup"
      cacheDurationMillis="300000"
      reportStatistics="true";
};

Пройдемся по параметрам:

  • providerUrl – адрес и порт LDAP сервера
  • bindDn – путь к пользователю с помощью которого Rundeck будет делать запросы
  • bindPassword – пароль
  • authenticationMethod – метод аутентификации
  • forceBindingLogin –
  • userBaseDn – пользователь для доступа к ldap
  • userRdnAttribute – атрибут пользователя который будет использоваться как username при аутентификации.
  • userIdAttribute – атрибут для сопоставления имени пользователя, по умолчанию используется (“CN”)
  • userPasswordAttribute – атрибут в котором хранится пароли пользователя
  • userObjectClass – класс объекта который используется
  • roleBaseDn – путь к OU в котром находятся группы
  • roleNameAttribute – атрибут группы
  • roleMemberAttribute – атрибут у группы в котором находится user DN
  • roleUsernameMemberAttribute – атрибут у группы в котором находится username
  • supplementalRoles – список групп которые будут автоматически добавлены как authenticated
  • roleObjectClass – ObjectClass группы
  • cacheDurationMillis – время жизни кеша
  • reportStatistics – выводить или нет, статистику кеша в лог

Права доступапа описываются в файлах с именем  *.aclpolicy. т.е. до точки пишем что угодно, по типу admin.aclpolicy. В group необходимо указывать группу из LDAP.

Пример:

description: Admin project level access control. Applies to resources within a specific project.
context:
  project: '.*' # all projects
for:
  resource:
    - equals:
        kind: job
      allow: [create] # allow create jobs
    - equals:
        kind: node
      allow: [read,create,update,refresh] # allow refresh node sources
    - equals:
        kind: event
      allow: [read,create] # allow read/create events
  adhoc:
    - allow: [read,run,runAs,kill,killAs] # allow running/killing adhoc jobs
  job:
    - allow: [create,read,update,delete,run,runAs,kill,killAs] # allow create/read/write/delete/run/kill of all jobs
  node:
    - allow: [read,run] # allow read/run for nodes
by:
  group: admins
---
description: Admin Application level access control, applies to creating/deleting projects, admin of user profiles, viewing projects and reading system information.
context:
  application: 'rundeck'
for:
  resource:
    - equals:
        kind: project
      allow: [create] # allow create of projects
    - equals:
        kind: system
      allow: [read,enable_executions,disable_executions,admin] # allow read of system info, enable/disable all executions
    - equals:
        kind: system_acl
      allow: [read,create,update,delete,admin] # allow modifying system ACL files
    - equals:
        kind: user
      allow: [admin] # allow modify user profiles
  project:
    - match:
        name: '.*'
      allow: [read,import,export,configure,delete,admin] # allow full access of all projects or use 'admin'
  project_acl:
    - match:
        name: '.*'
      allow: [read,create,update,delete,admin] # allow modifying project-specific ACL files
  storage:
    - allow: [read,create,update,delete] # allow access for /ssh-key/* storage content

by:
  group: admins

Рекомендую писать Aclpolicy с привязкой к группам. Даже если не предвидится предоставления доступа более чем обному пользователю, если все же потребуется предоставить аналогичный доступ, даже временно, добавить пользователя в группу будет проще чем плодить aclpolicy и перезупусть сервис.

При настройке/проверке не забывайте про кеш. При изменении конфигурации необходимо перезапускать Rundeck.

Pin It

Leave a Reply

Your email address will not be published. Required fields are marked *