Добрый день дорогие друзья. Сегодня я расскажу вам как сломать себе ум и попутно сделать авторизацию в OTRS по след. принципу:
Агент → LDAP
Customer → local db
И да, если вы столкнулись с данной проблемой – я вам сочувствую.
Начну с небольшого лирического отступления в лес, кто уже давно мучается с проблемой может промотать, я не обижусь. Давеча попросили меня сделать, на мой взгляд, простую и логичную вещь — авторизацию в OTRS, по показанному ранее принципу. И чтобы вы думали, у меня были проблемы, о них по порядку:
1. Язык — это perl, я его не знаю… И как показывает практика — не хочу знать, но пришлось.
2. Документация, а точнее ошибки в примере. Далее вырезка с официальной вики.
1 2 3 4 5 | CustomerKey = 'login', # customer # CustomerID = 'customer_id', CustomerValid = 'valid_id', CustomerUserListFields => ['first_name', 'last_name', 'email'], |
Видите последнюю строку? А перед ней? В чем разница? А разница в том что значения в perl для констант (начинающихся с '$'
, '@'
, или'%'
) присваиваются через =, а для скалярных переменных =>. По этому поводу в интернетах кучи постов. Дескать – что же за ошибка у меня такая:
1 | Can't modify constant item in scalar assignment at /opt/otrs/bin/cgi-bin/../../Kernel/Config.pm line 39, near "'login'," |
3. Весьма нелогичное определении классов, да и вообще — обозначения в OTRS не торт.
4. Да и в целом — это ппц, граждане.
Я приведу обезличенный пример Config.pm. Принцип работы которого такой:
http://otrs1/otrs/index.pl — авторизация для агентов, происходит через LDAP по след. алгоритму — если введенная учетка валидна на LDAP, то проверить есть ли запись в локальной таблице ‘users’ и если нет, то создать. Можно дополнить наследованием груп (Админ, Юзер и т. д.), но я забил.
http://otrs1/otrs/customer.pl — авторизация для Customer. Этих пользователей можно создать из меню «Добавить Клиента». Он у нас заноситься в локальную базу сразу таблица customer_user.
Тем самым мы добивается отделением базы клиентов от агентов, что какбэ и нуна))
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | nano /opt/otrs/Kernel/Config.pm package Kernel::Config; sub Load { my $Self = shift; $Self->{'DatabaseHost'} = 'localhost'; $Self->{'Database'} = 'ИМЯ БАЗЫ'; $Self->{'DatabaseUser'} = 'ЮЗЕР БАЗЫ'; $Self->{'DatabasePw'} = 'ПАРОЛЬ ЮЗЕР'; $Self->{'DatabaseDSN'} = "DBI:mysql:database=$Self->{Database};host=$Self->{DatabaseHost};"; $Self->{'Home'} = '/opt/otrs'; $Self->{'DefaultCharset'} = 'UTF-8'; # Синхроним # $Self->{'AuthSyncModule'} = 'Kernel::System::Auth::Sync::LDAP'; $Self->{'AuthSyncModule::LDAP::Host'} = 'IP ИЛИ DNS ВАШЕГО LDAP'; $Self->{'AuthSyncModule::LDAP::BaseDN'} = 'КАТАЛОГ ГДЕ ВЫ ХРАНИТЕ ПОЛЬЗОВАТЕЛЕЙ ( У МЕНЯ ТАК OU=Department,DC=ad,DC=test)'; $Self->{'AuthSyncModule::LDAP::UID'} = 'sAMAccountName'; $Self->{'AuthSyncModule::LDAP::AccessAttr'} = 'member'; $Self->{'AuthSyncModule::LDAP::SearchUserDN'} = 'ВАМ НЕОБХОДИМО СОЗДАТЬ В LDAP ПОЛЬЗОВАТЕЛЯ С ПРАВАМИ НА ЧТЕНИЯ И УКАЗАТЬ ЕГО DN ТУТ'; $Self->{'AuthSyncModule::LDAP::SearchUserPw'} = 'А ТУТ ПАРОЛЬ ЭТОГО ПОЛЬЗОВАТЕЛЯ'; # Заливаем в БД # $Self->{'AuthSyncModule::LDAP::UserSyncMap'} = { UserFirstname => 'givenName', UserLastname => 'sn', UserEmail => 'userPrincipalName', }; $Self->{'AuthSyncModule::LDAP::UserSyncInitialGroups'} = [ 'users', ]; $Self->{'AuthModule'} = 'Kernel::System::Auth::LDAP'; $Self->{'AuthModule::LDAP::Host'} = 'IP ИЛИ DNS ВАШЕГО LDAP'; $Self->{'AuthModule::LDAP::BaseDN'} = 'КОРНЕВОЙ DN (У МЕНЯ DC=ad,DC=test)'; $Self->{'AuthModule::LDAP::UID'} = 'sAMAccountName'; $Self->{'AuthSyncModule::LDAP::AccessAttr'} = 'member'; $Self->{'AuthSyncModule::LDAP::SearchUserDN'} = 'ВАШ ПОЛЬЗОВАТЕЛЬ В LDAP'; $Self->{'AuthSyncModule::LDAP::SearchUserPw'} = 'ЕГО ПАРОЛЬ'; # Enable Agent Mapping from LDAP to DB # $Self->{'AuthSyncModule::LDAP::UserSyncMap'} = { UserFirstname => 'givenName', UserLastname => 'sn', UserEmail => 'userPrincipalName', }; $Self->{'AuthSyncModule::LDAP::UserSyncInitialGroups'} = [ 'users', ]; $Self->{'AuthModule'} = 'Kernel::System::Auth::LDAP'; $Self->{'AuthModule::LDAP::Host'} = 'IP ИЛИ DNS ВАШЕГО LDAP'; $Self->{'AuthModule::LDAP::BaseDN'} = 'КОРНЕВОЙ DN'; $Self->{'AuthModule::LDAP::UID'} = 'sAMAccountName'; $Self->{'AuthModule::LDAP::GroupDN'} = 'ВАШ ГРУППА В LDAP КОТОРОЙ РАЗРЕШЕН ВХОД'; $Self->{'AuthModule::LDAP::AccessAttr'} = 'member'; $Self->{'AuthModule::LDAP::UserAttr'} = 'DN'; $Self->{'AuthModule::LDAP::SearchUserDN'} = 'ВАШ ПОЛЬЗОВАТЕЛЬ LDAP'; $Self->{'AuthModule::LDAP::SearchUserPw'} = 'ЕГО ПАРОЛЬ'; $Self->{'AuthModule::LDAP::Params1'} = { port => 389, timeout => 120, async => 0, version => 3, }; # Локальные пользователи # $Self->{'Customer::AuthModule'} = 'Kernel::System::CustomerAuth::DB'; $Self->{'Customer::AuthModule::DB::Table'} = 'customer_user'; $Self->{'Customer::AuthModule::DB::CustomerKey'} = 'login'; $Self->{'Customer::AuthModule::DB::CustomerPassword'} = 'pw'; $Self->{'Customer::AuthModule::DB::DSN'} = "DBI:mysql:database=$Self->{Database};host=$Self->{DatabaseHost};"; $Self->{'Customer::AuthModule::DB::User'} = "ВАШ ПОЛЬЗОВАТЕЛЬ ЛОКАЛЬНО БД"; $Self->{'Customer::AuthModule::DB::Password'} = "ЕГО ПАРОЛЬ"; }; # ---------------------------------------------------- # # needed system stuff (don't edit this) # # ---------------------------------------------------- # use strict; use warnings; use vars qw(@ISA $VERSION); $VERSION = qw($Revision: 1.23 $)[1]; use Kernel::Config::Defaults; push (@ISA, 'Kernel::Config::Defaults'); 1; |
Собственно вот и все, тестировать на лексику нужно так:
1 | perl -cw /opt/otrs/Kernel/Config.pm |
Если кому пригодилось, спасибки мне в копилочку).
Привет, уже не будешь обновлять блог. Я постоянный читатель))) Если можно напиши что нибудь про 2X
Если вас не затруднит, расскажите что именно вам интересно в 2X?
Все будет, сейчас подготавливаю пару статей, но и ваше пожелание мне интересно и я обязательно учту его.
так как я являюсь поклонником World of Tanchegi, то последнее время я занимаюсь (с переменным успехом, ибо времени нет) одной программой, которая в скором времени обретет свой релиз как раз на этом блоге. Короче говоря, все будет)))
Приятного времени суток.
Есть домен win2008r2
клиенты win 7
есть сервер centos6 с mysql и толстый клиент под windows для доступа к базе, написанный на python
в данный момент осуществляется двойная аутентификация – пользователя в домене и пользователя в mysql(через клиент)
подскажите, пожалуйста, алгоритм сквозной аутентификации в mysql используя ldaps
Спасибо.
Я не очень понял ваш вопрос, если вы хотите авторизацию otrs + ad, то возможно вам будет интересна эта статья, если вам нужна авторизация mysql + ad, то известный мне вариант заключается в pam, а точнее в pam + ad и mysql + pam описано это тут.