Прив'язка Request Traker 4.x на Ubuntu до ldap на прикладі ActiveDirectory

Що це за RT

Давно використовую у себе в аутсорсерской компанії трекер заявок від Secure Scout, який тепер називається BestPractical Request Tracker. Request Tracker хороший тим, що він опесорсовый, написаний на Perl, невимогливий до ресурсів, гнучкий і дозволяє прикрутити до собі якої завгодно функціонал. Більше розповідати немає сенсу, свого часу zar0ku1 написав непогану статті по установці RT 3.8, потім мануал трохи освіжив @Іспанський льотчик, mister_j навіть розповів про програмуванні RT.

Ми зробимо крок трохи далі і з'ясуємо, як прив'язати авторизацію RT до ldap на прикладі AD, щоб користувачі могли створювати заявки і відстежувати їх виконання, використовуючи свою доменну учетку. Крім індивідуалізації трекера, з'явиться можливість автоматичного оновлення інформації (ім'я, email, підрозділ тощо) про користувачів RT зі служби каталогів.

Які можливості зовнішньої авторизації вбудовані в RT

BestPractical пропонує нам два види аутентифікації через зовнішнє джерело: використовуючи форму входу (яка перекидає запит авторизації далі) або минаючи форму входу з використанням можливостей веб-сервера впізнавати користувача автоматично (наприклад NTLM). Потрібно сказати, що BestPractical рекомендує включати обидві можливості, що ми і зробимо.

Щоб не занурюватися в пучину технічний мінлива, скажу так: можна прикрутити аутентифікацію до форми входу так, щоб користувач домену автоматично створювався RT при вході на портал заявок, а можна створити скрипт, який буде періодично завантажувати нових користувачів з каталогу. BestPractical, знову ж таки, наполягає на обох варіантах.

Включення імпорту учеток з LDAP

Для підключення до домену потрібно створити звичайну користувача учетку AD (або у вашій реалізації служби каталогів).

PS C:\> New-ADUser -Name "Request Tracker" -GivenName rt -SamAccountName rt -UserPrincipalName rt@example.com -AccountPassword (Read-Host -AsSecureString "rt_password")

На хост RT потрібно завантажити спеціально створений для цілей імпорту модуль Perl:

sudo cpan -i RT::Extension::LDAPImport

Потім додати в конфігураційний файл RT (в моєму випадку це /opt/rt4/etc/RT_SiteConfig.pm) рядки:

Set(@Plugins, qw(RT::Extension::LDAPImport));
Set($LDAPHost,'domaincontroller.example.com');
Set($LDAPUser,'example\rt');
Set($LDAPPassword,'rt_password');
Set($LDAPBase,'dc=example,dc=com');
Set($LDAPFilter, ' (&(objectCategory=person))');
Set($LDAPMapping, {Name => 'sAMAccountName',
RealName => 'cn',
EmailAddress => 'mail'
});
Set($LDAPCreatePrivileged, 1); 
Set($LDAPUpdateUsers, 1); 

У даному прикладі я вказую для імпорту всіх користувачів домену ($LDAPFilter), починаючи з кореня ($LDAPBase), подкачивая їх ім'я, логін та email ($LDAPMapping). Облікові записи будуть автоматично мати доступ до RT ($LDAPCreatePrivileged), та інформація про них буде оновлюватися при кожному новому запиті на імпорт ($LDAPUpdateUsers).

Модуль імпорту дозволяє імпортувати облікові записи з різних підрозділів, імпортувати групи, завантажувати більше інформації про користувачів LDAP і т. д. Мені досить того, що я вам показав. Хочете знати більше — читайте мануал по модулю.

Процес імпорту сам по собі простий. Для початку можна запустити тестовий імпорт і подивитися, чим він закінчився:

sudo /opt/rt4/local/plugins/RT-Extension-LDAPImport/bin/rtldapimport --debug > ldapimport.debug 2>&1
sudo cat ldapimport.debug 

Як правило, помилки виникають при включених firewall і некоректно зазначеної базі пошуку LDAP. Якщо все пройшло вдало, імпорт можна запускати повноцінно:

sudo /opt/rt4/local/plugins/RT-Extension-LDAPImport/bin/rtldapimport --import

Якщо вам, як і мені було досить не розділяти користувачів по групах при імпорті, тобто користувачі будуть за замовчуванням додані RT в групу Imported From LDAP. Цій групі треба буде дати в RT відповідні права на черзі, або вручну розібрати користувачів. Окремо зазначу — жодних паролів користувачів поки ще немає, входити в RT вони не можуть, ми просто імпортували інформацію про них в RT і можемо налаштовувати їм рівні доступу.

Для того, щоб інформацію про користувачів регулярно оновлювалася, можна створити завдання в планувальнику, наприклад:

sudo echo "01 1 * * * root /opt/rt4/local/plugins/RT-Extension-LDAPImport/bin/rtldapimport --import" >> /etc/crontab

Авторизація через зовнішнє джерело

Для фактичної передачі запитів контролеру домену або іншому власнику каталогу ldap теж потрібен модуль Perl:

sudo cpan -i RT::Authen::ExternalAuth

Файл конфігурації RT_SiteConfig.pm потрібно додати інформацію про скачаному плагіні:

Set(@Plugins, qw(RT::Extension::LDAPImport RT::Authen::ExternalAuth));

І вказати інформацію для доступу до каталогу ldap:

Set($ExternalAuthPriority, [ 'My_AD' ] );
Set($ExternalInfoPriority, ['My_AD'] );
Set( $UserAutocreateDefaultsOnLogin, { Privileged => 1 , Lang => 'uk'} );
Set($ExternalSettings, {
'My_AD' => {
'type' => 'ldap',
'server' => 'domaincontroller.example.com',
'user' => 'example\rt',
'pass' => 'rt_password',
'base' => 'dc=example,dc=com',
'filter' => '(objectCategory=person)',
'attr_match_list' => ['Name'],
'attr_map' => {
'Name' => 'sAMAccountName',
'EmailAddress' => 'mail',
'RealName' => 'cn',
},
},
} );

У цьому прикладі я знову не роблю прив'язку груп, імпортують мінімум інформації і вказую базою для пошуку інформації весь домен, починаючи з кореня. Кому потрібно більше — заходьте і читайте мануал.

Для самостійної роботи

Повинен відзначити, що після підключення до ldap створення локальних користувачів стає неможливим, але старі користувачі з внутрішньої БД продовжують успішно авторизуватись. Якщо хто знає як включити можливість створення локальних учеток при прив'язаному AD — пишіть. Ще один момент — якщо домену для користувачів включений «Вхід», то поки відключайте, а наступного разу розповім, як поправити.

Наступного разу розповім про те, як зробити авторизацію прозорою для користувача, не вимагаючи від нього пароля і логіна, одержуючи цю інформацію автоматично.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.