Intraservice ldap авторизация: IntraService — Универсальная Service Desk система
IntraService — Универсальная Service Desk система
IntraService используется для учета заявок в IT-отделе и как bug tracker для собственных разработок.
Внедрение ПО IntraService в группе компаний IEK преследовало цель-дать сотрудникам организации удобный инструмент для взаимодействия с ИТ, реализовать сервисную модель ИТ-услуг, повысить качество работы ИТ- департамента в части клиент-ориентированности, сроков реализации ИТ-задач, автоматизировать и интегрировать ИТ-процессы с другими сервисами компании.
В процессе внедрения было протестировано и получен опыт работы с несколькими системами, в том числе с ПО собственной разработки. Выбор в пользу Интрасервиса был сделан по следующим критериям.
Интуитивный интерфейс не требующий лишних действий, продуманная архитектура системы, обеспечивающая гибкую настройку без программирования, скорость работы системы и возможности по интеграции, невысокая стоимость ПО и его сопровождения. Не смотря на первичную простоту программы, отсутствие некоторых функций в сравнении с другим ПО и недостаточную «академичность», мы сознательно остановили свой выбор на IntraService.
При реализации проекта была создана иерархическая структура ИТ-сервисов, определены типы заявок по стандартам ITIL, роли пользователей на сервисах, определены группы исполнителей для разных территорий, скорректированы шаблоны уведомлений, настроены бизнес-процессы.
В процессе эксплуатации наращивался список используемого функционала системы с регулярным информированием и вовлечением всего персонала организации, корректировались бизнес-процессы. Проводилось нормирование ИТ-услуг по сервисам и типам заявок (время реакции, исполнения). Для повышения исполнительской дисциплины были внедрены предупреждающие сервисные уведомления, регламентные отчеты по расписанию о состоянии работ. Также были настроены регламентные процедуры по автоматическому закрытию и отмене заявок.
В настоящее время система интегрирована с AD организации, ряд сервисов используется для совместных работ по заявкам с сервисными ИТ-компаниями (обеспечено информирование и обратная связь). В структуре базы знаний размещена необходимая информация (ИТ-контакты, инструкции, документация к ПО организации). В каталоге активов размещена оргтехника, мобильные устройства и другое оборудование организации.
Кроме Web-интерфейса, система настроена на импорт заявок из нескольких почтовых ящиков с их автоматической обработкой, распределением по сервисам и назначением исполнителей, в том числе для внешних партнеров компании.
По просьбе других подразделений, в IntraService была настроена работа обеспечивающих сервисов по транспорту, хозяйственному и инженерному обеспечению компании. По запросам были созданы формы заявок, бланки для печати, настроены процессы их обработки. Все это без программирования и достаточно оперативно.
В планах стоит более активное использование мобильного клиента IntraService и СМС-информирования для ряда сервисов. Поэтапно происходит развитие интеграции программы с другим ПО, использование данных в аналитической отчетности.
Отзыв клиента (PDF, 590kb)>
LDAP аутентификация, авторизация и синхронизация (FreeIPA, AD) / Хабр
OTRS — система обработки заявок с открытым кодом (Open-source Ticket Request System), написанная на Perl.
Существует в двух вариантах:
Перечислю немного из того фукционала, который поддерживает эта система:
- модуль ITSM (Service Level Management, Change Management, Configuration Management, CMDB)
- адаптивный веб-интерфейс
- API
- SLA и сервисы
- мультитенантность
- эскалации
- аутентификация: DB, LDAP, HTTPBasicAuth, Radius
- поддержка MySQL, MariaDB, PostgreSQL, Oracle
И если искать в ней недостатки — так это непривычность интерфейса и сложность в настройке. Под катом — об основах авторизации (группы, RBAC, поддержка нескольких компаний-клиентов), аутентификации и синхронизации метаданных (ФИО, телефона и прочего), используя различные каталоги LDAP
Клиенты, очереди, агенты и группы
После установки OTRS у вас сразу будут доступны:
- клиенты — могут создавать заявки, отправив письмо или используя веб-доступ
- очереди — каждая заявка попадает в одну из очередей заявок
- агенты — ИТ специалисты, работающие над выполнением заявок из доступных им очередей
- группы — сущность, связывающая между собой очереди, клиентов и агентов, а также задающая права агентов — например, только чтение, изменение приоритета заявки и т. п.
Стандартные группы
После установки системы вы увидите три созданные группы:
- admin — члены группы могут администрировать (настраивать) OTRS
- stats — возможность настраивать и запускать отчеты
- users — стандартная группа для клиентов, очередей и агентов
Права, связанные с группами
Основные права
Основные права, которые можно настроить в группе, ограничивающие действия агентов:
- только чтение — права только на чтение заявки в данной группе/очереди
- переместить — права на перемещение заявок в эту группу/очередь
- создание — права на создание заявок в этой группе/очереди
- заметка — права на добавление заметок в заявки в этой группе/очереди
- владелец — права на смену владельца заявок в этой группе/очереди
- приоритет — права на смену приоритета заявок в этой группе/очереди
- чтение/запись — полные права на чтение и запись для заявок в данной группе/очереди
Дополнительные права
Также существуют и дополнительные права, отображение которых можно включить в настройках (System::Permission):
- отчеты — предоставляет доступ к странице отчетов
- перенаправить — право перенаправить/bounce почтовое сообщение (ссылка перенаправить/bounce в ticketZoom)
- создать — право составления ответа на заявку
- клиент — право изменить клиента для этой заявки
- переслать — право пересылать сообщения (с помощью кнопки Переслать)
- в ожидании — право перевести заявку в ожидание
- телефон — право добавить содержание звонка клиента к заявке в виде сообщения/заметки
- ответственный — Право изменить ответственного за заявку
Рассмотрим это более подробно:
- каждый клиент может быть включен в одну или несколько групп, изначально все клиенты входят в группу users
- каждая очередь заявок связывается с какой-либо одной из групп
- через веб-интерфейс клиент может делать заявки в тех очередях, к которым имеют доступ группы, в которые он включен
- при отправке клиентом заявки по электронной почте существует возможность на основании анализа атрибутов письма (например, адреса отправителя или заголовка письма) изменять характеристики заявки, в том числе и очередь, в которую попадет заявка
- если клиент позвонил по телефону, агент может завести заявку вручную, выбрав любую из доступных агенту очередей
- желательно, чтобы заявка клиента всегда была в очередях, доступных клиенту, иначе он не сможет получить доступ к ней через веб-интерфейс
- агенты могут производить действия в заявками в соответствии с правами на очередь, в которой находится заявка
Аутентификация с использованием базы данных
Стандартный способ аутентификации и авторизации агентов и клиентов — это база данных.
Например, настройки аутентификации агентов, используя базу данных, выглядит так:
$Self->{'AuthModule'} = 'Kernel::System::Auth::DB';
Клиентов:
$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';
Мы также оставим этот способ аутентификации и добавим в дополнение с нему аутентификацию через LDAP.
Роли и компании
Так же мы расширим возможности авторизации, добавив роли и компании:
- роли — позволяют более гибко управлять доступами, связывая между собой группы и агентов
- компании — позволяют изолировать заявки различных клиентов (будь то разные отделы или компании)
Постановка задачи
Вы — администратор системы OTRS в компании my-it-company.com, предоставляющей сервисные услуги другим компаниям (или подразделениям внутри вашего холдинга).
Вам очень бы не хотелось заводить учетные записи новых агентов и клиентов вручную, а также заполнять дополнительную информацию, такую как адрес электронной почты, телефон, должность, адрес и номер кабинета — ведь это все уже есть в каталогах LDAP.
И ваша компания также получит очевидные плюсы — единый пароль сотрудника во все системы, блокировка учетной записи в LDAP заблокирует доступ и во все остальные сервисы.
my-it-company.com работает на Linux и использует в качестве сервера каталогов Red Hat FreeIPA, а обслуживаемые вами подразделения — различные леса Microsoft Active Directory, с которыми у вас нет федерации, но есть возможность подключения к контроллерам домена.
Вам нужно разделить потоки заявок от различных клиентов, а также реализовать различные уровни доступа агентов к очередям — менеджеры должны иметь возможность менять приоритет задач в системе.
Сотрудники вашей компании так же могут ставить задачи в системе для внутренних нужд my-it-company.com, иногда являясь и агентами, и клиентами одновременно (а иногда и нет).
Подготовка
Учетные записи для просмотра LDAP
Если запрещен анонимный просмотр дерева каталогов, то создадим в доменах my-it-company.com, pear.com и macrohard.com учетные записи, прав которых нам хватит, чтобы делать запросы к LDAP (назовем их, например, ldap-bot)
Группы FreeIPA для синхронизации с ролями OTRS
Заведем на FreeIPA три группы пользователей, которые будут синхронизироваться с нашими ролями OTRS, например:
- otrs-sa — члены этой группы получат доступ к администрированию OTRS, но доступ к очередям давать не будем, чтобы не было желания всегда работать под администратором),
- otrs-admins — наши менеджеры, имеющие право изменения приоритета заявок) и
- otrs-helpdesk — учетные записи наших специалистов
Атрибут, определяющий принадлежность к компании
Выберем атрибут, по которому будем определять принадлежность к компании. Пусть это будет атрибут «Организация». Например, у вас все получилось организационно и технически, и все пользователи во всех доменах всегда имеют значение в поле «Организация»:
- my-it-company — для сотрудников my-it-company.com
- pear-company — для сотрудников pear.com
- macrohard-company — для сотрудников macrohard.com
Определим атрибуты пользователя, используемые FreeIPA
Изучим схему FreeIPA, выяснив названия атрибутов, которые нам понадобятся для синхронизации (ФИО, логин, телефон и т. п.).
kinit laptevs
ipa user-show --all --raw laptevs
Получим подобный вывод:
dn: uid=laptevs,cn=users,cn=accounts,dc=my-it-company,dc=com
uid: laptevs
givenname: Stanislav
sn: Laptev
cn: Laptev Stanislav
initials: SL
homedirectory: /home/laptevs
gecos: Laptev Stanislav
loginshell: /bin/sh
krbcanonicalname: [email protected]
krbprincipalname: [email protected]
mail: [email protected]
uidnumber: 1344600003
gidnumber: 1344600003
l: Moscow
telephonenumber: +7(863)999-99-99
mobile: +7(999)999-99-99
ou: My-it-company
title: SysAdm
sshpubkeyfp: SHA256:Yi8mKF+j28/r2cpxLgIbvZ/Oymt57rhliHKhqBuJxqE laptevs-putty (ssh-rsa)
nsaccountlock: FALSE
has_password: TRUE
has_keytab: TRUE
displayName: Laptev Stanislav
ipaSshPubKey: c3NoLXJzYSBBQUFBQjNOemFDMXljMkVBQUFBQkpRQUFBZ0VBNjQ1RTJjSjIvWXVVYm9GNzdZY3hLNzBndm1jWlgrZjBZTVpsaXRQVXNCWFZ0cENtTEtwcjRwK2JEeUdhRzNLTWx1T08ydW9wS0pXRk9mWE83Zzl3OTYzdklQblN3MzVHSmI3VGhhbk1pTXpNUE82T1lQZEY0em14b2k4N 0RGYkdXV2V6aGwzcitsbmFGYTB0dEQ5TkFWRU1Fb3BMdmkzcHZ1UXpyVmNjVlMxamFxY1dNT2ZGUC9TRlVoY1dGeVpZd3Z6eW0wWnZObUZtdjVjVHJGNzJMSXZOdHlsNkZGK2ZaU3ZpS01mcXZ6NStkT2xZZGd5bVVSOG5iaVpkTXZKaTIvbzhjTy84ekpoMFhtSnVRSjJXNEVvYVEvajVTTm8ySjZ6NklXNk I3cFB4Y002a0tJcUp5N08zTkNOcGRrVmVQbEFHbThsOFZDREpVa1RLSjRGOS9mSTZFUkhxVUZwK3p1VENTR1R3ZWlKdXppenFSZWJTTkNiMXh4RldmUitvYzFLdWNZSU5QbTYxRi93YXhOcC9aSG9OK2w1dCtkYWI4cElZSGZzTnNUNWx2RWt4Ukh0bnNyeUxsbWk1ZVdzd3RBbDB3TUpWd1cvUWNJcjhOaVN Ybm96Q3dHWTZCaTQ2L0FGTGVidmFLV0tKRmpKZFgxOFlRVDRpVzZGaE83aW40TGlUamlNaENXbStvbjNQbERYeXZpdkJ1WkFXUldXNEdjbXREVW8rSVhZT2t3MWh4UldqdkJtcExHMVZpMFhPckltbmQybTVZdWk1bHo0b1ZlekFRN1NjYVlrdDBoVEdQU1Z2UHpmVlowYWJCQlpiRmViK1hUV2tpSnBPMHBO T3dodGNadHYrN3RMMnc1OFN3QnhVTUk4NzUzdG5Sc1h2blBXZERqcUsxSDA9IGxhcHRldnMtcHV0dHk=
ipaUniqueID: 68d46dac-1d3c-11e9-82fd-0242ac110002
krbExtraData: AAL4VkVcbGFwdGV2c0BPTUlLUk9OLlBSTwA=
krbLastFailedAuth: 20190123084142Z
krbLastPwdChange: 20190121052200Z
krbLoginFailedCount: 0
krbPasswordExpiration: 20190421052200Z
memberof: cn=otrs-admins,cn=groups,cn=accounts,dc=my-it-company,dc=com
memberof: cn=ipausers,cn=groups,cn=accounts,dc=my-it-company,dc=com
mepManagedEntry: cn=laptevs,cn=groups,cn=accounts,dc=my-it-company,dc=com
objectClass: top
objectClass: person
objectClass: organizationalperson
objectClass: inetorgperson
objectClass: inetuser
objectClass: posixaccount
objectClass: krbprincipalaux
objectClass: krbticketpolicyaux
objectClass: ipaobject
objectClass: ipasshuser
objectClass: ipaSshGroupOfPubKeys
objectClass: mepOriginEntry
dn: uid=laptevs,cn=users,cn=accounts,dc=my-it-company,dc=com
uid: laptevs
givenname: Stanislav
sn: Laptev
cn: Laptev Stanislav
mail: [email protected]
l: Moscow
telephonenumber: +7(863)999-99-99
mobile: +7(999)999-99-99
ou: My-it-company
title: SysAdm
Настройка конфигурации OTRS
Файлы конфигурации
- /opt/otrs/ — как правило, здесь располагаются файлы системы OTRS
- Kernel/Config.pm — файл конфигурации, который вы редактируете
- Kernel/Config/Defaults.pm — файл со стандартными настройками, его не редактируете, но в нем можно посмотреть все существующие параметры и комментарии к ним
Настройка агентов
Аутентификация агентов
# --------------------------------------------------- #
# Agents authentication #
# --------------------------------------------------- #
# my-it-company.com LDAP backend
$Self->{AuthModule} = 'Kernel::System::Auth::LDAP';
# Адрес LDAP-сервера
$Self->{'AuthModule::LDAP::Host'} = 'my-it-company.com';
$Self->{'AuthModule::LDAP::BaseDN'} = 'dc=my-it-company,dc=com';
$Self->{'AuthModule::LDAP::UID'} = 'uid';
# Блок нужен, только если запрещен анонимный просмотр структуры каталогов
$Self->{'AuthModule::LDAP::SearchUserDN'} = 'uid=ldap-bot,cn=users,cn=accounts,dc=my-it-company,dc=com';
$Self->{'AuthModule::LDAP::SearchUserPw'} = 'bot-password!';
# Фильтр запроса к LDAP. Пусть у нас будут только пользователи, имеющие заполненный атрибут "электронная почта"
$Self->{'AuthModule::LDAP::AlwaysFilter'} = '(mail=*)';
# Добавляем при проблемах с кодировкой
$Self->{'AuthModule::LDAP::Charset'} = 'utf-8';
$Self->{'AuthModule::UseSyncBackend'} = 'AuthSyncBackend';
# my-it-company.com DB backend
$Self->{AuthModule2} = 'Kernel::System::Auth::DB';
$Self->{'AuthModule::DB::CryptType2'} = 'sha2';
# --------------------------------------------------- #
# End Agents authentication #
# --------------------------------------------------- #
Синхронизация агентов (групп LDAP с ролями OTRS)
# --------------------------------------------------- #
# Agent authentication sync #
# (enable agent data sync. after succsessful #
# authentication) #
# --------------------------------------------------- #
# my-it-company.com LDAP auth sync. backend.
$Self->{AuthSyncModule} = 'Kernel::System::Auth::Sync::LDAP';
$Self->{'AuthSyncModule::LDAP::Host'} = 'my-it-company.com';
$Self->{'AuthSyncModule::LDAP::BaseDN'} = 'dc=my-it-company,dc=com';
$Self->{'AuthSyncModule::LDAP::UID'} = 'uid';
$Self->{'AuthSyncModule::LDAP::SearchUserDN'} = 'uid=ldap-bot,cn=users,cn=accounts,dc=my-it-company,dc=com';
$Self->{'AuthSyncModule::LDAP::SearchUserPw'} = 'bot-password!';
$Self->{'AuthSyncModule::LDAP::AlwaysFilter'} = '(mail=*)';
$Self->{'AuthSyncModule::LDAP::UserSyncMap'} = {
# DB -> LDAP
UserFirstname => 'givenName',
UserLastname => 'sn',
UserEmail => 'mail',
};
$Self->{'AuthSyncModule::LDAP::AccessAttr'} = 'member';
$Self->{'AuthSyncModule::LDAP::UserAttr'} = 'DN';
$Self->{'AuthSyncModule::LDAP::UserSyncRolesDefinition'} = {
# ldap group
'cn=otrs-sa,cn=groups,cn=accounts,dc=my-it-company,dc=com' => {
# otrs role
'otrs-sa' => 1,
},
'cn=otrs-admins,cn=groups,cn=accounts,dc=my-it-company,dc=com' => {
'otrs-admins' => 1,
},
'cn=otrs-helpdesk,cn=groups,cn=accounts,dc=my-it-company,dc=com' => {
'helpdesk' => 1,
}
};
$Self->{DatabaseUserTable} = 'users';
$Self->{DatabaseUserTableUserID} = 'id';
$Self->{DatabaseUserTableUserPW} = 'pw';
$Self->{DatabaseUserTableUser} = 'login';
# --------------------------------------------------- #
# End Agents authentication sync #
# --------------------------------------------------- #
Если вы решили, что роли вам не подходят, и вы хотите только группы, приведу два примера синхронизации групп LDAP с группами OTRS — упрощенный и с настройкой прав по каждой группе.Альтернативная синхронизация агентов (групп LDAP с группами OTRS, с указанием прав)
# --------------------------------------------------- #
# Agent authentication sync #
# (enable agent data sync. after succsessful #
# authentication) #
# --------------------------------------------------- #
# my-it-company.com LDAP auth sync. backend.
$Self->{AuthSyncModule} = 'Kernel::System::Auth::Sync::LDAP';
$Self->{'AuthSyncModule::LDAP::Host'} = 'my-it-company.com';
$Self->{'AuthSyncModule::LDAP::BaseDN'} = 'dc=my-it-company,dc=com';
$Self->{'AuthSyncModule::LDAP::UID'} = 'uid';
$Self->{'AuthSyncModule::LDAP::SearchUserDN'} = 'uid=ldap-bot,cn=users,cn=accounts,dc=my-it-company,dc=com';
$Self->{'AuthSyncModule::LDAP::SearchUserPw'} = 'bot-password!';
$Self->{'AuthSyncModule::LDAP::AlwaysFilter'} = '(mail=*)';
$Self->{'AuthSyncModule::LDAP::UserSyncMap'} = {
# DB -> LDAP
UserFirstname => 'givenName',
UserLastname => 'sn',
UserEmail => 'mail',
};
$Self->{'AuthSyncModule::LDAP::AccessAttr'} = 'member';
$Self->{'AuthSyncModule::LDAP::UserAttr'} = 'DN';
# AuthSyncModule::LDAP::UserSyncGroupsDefinition
# (If "LDAP" was selected for AuthModule and you want to sync LDAP
# groups to otrs groups, define the following.)
$Self->{'AuthSyncModule::LDAP::UserSyncGroupsDefinition'} = {
# ldap group
'cn=otrs-admins,cn=groups,cn=accounts,dc=my-it-company,dc=com' => {
# otrs group
'admin' => {
# permission
rw => 1,
move_into => 1,
create => 1,
note => 1,
owner => 1,
prioriry => 1,
ro => 1,
},
'stats' => {
rw => 1,
move_into => 1,
create => 1,
note => 1,
owner => 1,
prioriry => 1,
ro => 1,
},
'users' => {
rw => 1,
move_into => 1,
create => 1,
note => 1,
owner => 1,
prioriry => 1,
ro => 1,
},
'pear-group' => {
rw => 1,
move_into => 1,
create => 1,
note => 1,
owner => 1,
prioriry => 1,
ro => 1,
},
'macrohard-group' => {
rw => 1,
move_into => 1,
create => 1,
note => 1,
owner => 1,
prioriry => 1,
ro => 1,
},
},
'cn=otrs-helpdesk,cn=groups,cn=accounts,dc=my-it-company,dc=com' => {
'stats' => {
rw => 1,
move_into => 1,
create => 1,
note => 1,
owner => 1,
prioriry => 1,
ro => 1,
},
'users' => {
rw => 1,
move_into => 1,
create => 1,
note => 1,
owner => 1,
prioriry => 1,
ro => 1,
},
}
};
$Self->{DatabaseUserTable} = 'users';
$Self->{DatabaseUserTableUserID} = 'id';
$Self->{DatabaseUserTableUserPW} = 'pw';
$Self->{DatabaseUserTableUser} = 'login';
# --------------------------------------------------- #
# End Agents authentication sync #
# --------------------------------------------------- #
Альтернативная упрощенная синхронизация агентов (групп LDAP с ролями OTRS с правами rw)
# --------------------------------------------------- #
# Agent authentication sync #
# (enable agent data sync. after succsessful #
# authentication) #
# --------------------------------------------------- #
# my-it-company.com LDAP auth sync. backend.
$Self->{AuthSyncModule} = 'Kernel::System::Auth::Sync::LDAP';
$Self->{'AuthSyncModule::LDAP::Host'} = 'my-it-company.com';
$Self->{'AuthSyncModule::LDAP::BaseDN'} = 'dc=my-it-company,dc=com';
$Self->{'AuthSyncModule::LDAP::UID'} = 'uid';
$Self->{'AuthSyncModule::LDAP::SearchUserDN'} = 'uid=ldap-bot,cn=users,cn=accounts,dc=my-it-company,dc=com';
$Self->{'AuthSyncModule::LDAP::SearchUserPw'} = 'bot-password!';
$Self->{'AuthSyncModule::LDAP::AlwaysFilter'} = '(mail=*)';
$Self->{'AuthSyncModule::LDAP::UserSyncMap'} = {
# DB -> LDAP
UserFirstname => 'givenName',
UserLastname => 'sn',
UserEmail => 'mail',
};
$Self->{'AuthSyncModule::LDAP::AccessAttr'} = 'member';
$Self->{'AuthSyncModule::LDAP::UserAttr'} = 'DN';
# Включать агента в какие-либо группы с доступом на чтение/запись
# AuthSyncModule::LDAP::UserSyncInitialGroups
# (sync following group with rw permission after initial create of first agent
# login)
$Self->{'AuthSyncModule::LDAP::UserSyncInitialGroups'} = [
'users',
];
$Self->{DatabaseUserTable} = 'users';
$Self->{DatabaseUserTableUserID} = 'id';
$Self->{DatabaseUserTableUserPW} = 'pw';
$Self->{DatabaseUserTableUser} = 'login';
# --------------------------------------------------- #
# End Agents authentication sync #
# --------------------------------------------------- #
Настройка клиентов
Аутентификация клиентов
# --------------------------------------------------- #
# Сustomer authentication #
# --------------------------------------------------- #
# Сustomer DB auth. backend
$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';
# my-it-company.com (Сustomer) LDAP auth. backend
$Self->{'Customer::AuthModule2'} = 'Kernel::System::CustomerAuth::LDAP';
$Self->{'Customer::AuthModule::LDAP::Host2'} = 'my-it-company.com';
$Self->{'Customer::AuthModule::LDAP::BaseDN2'} = 'dc=my-it-company,dc=com';
$Self->{'Customer::AuthModule::LDAP::UID2'} = 'uid';
$Self->{'Customer::AuthModule::LDAP::SearchUserDN2'} = 'uid=ldap-bot,cn=users,cn=accounts,dc=my-it-company,dc=com';
$Self->{'Customer::AuthModule::LDAP::SearchUserPw2'} = 'bot-password!';
$Self->{'Customer::AuthModule::LDAP::AlwaysFilter2'} = '(mail=*)';
# pear LDAP auth. backend.
$Self->{'Customer::AuthModule3'} = 'Kernel::System::CustomerAuth::LDAP';
$Self->{'Customer::AuthModule::LDAP::Host3'} = 'pear.com';
$Self->{'Customer::AuthModule::LDAP::BaseDN3'} = 'DC=pear,DC=com';
$Self->{'Customer::AuthModule::LDAP::UID3'} = 'sAMAccountName';
$Self->{'Customer::AuthModule::LDAP::SearchUserDN3'} = '[email protected]';
$Self->{'Customer::AuthModule::LDAP::SearchUserPw3'} = 'bot-password?';
# Отфильтруем: (mail=*) - у кого есть почта и (samAccountType=805306368) - учетная запись пользователя и (!(userAccountControl:1.2.840.113556.1.4.803:=2)) - не отключена
$Self->{'Customer::AuthModule::LDAP::AlwaysFilter3'} = '(&(mail=*)(samAccountType=805306368)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))';
# macrohard LDAP auth. backend.
$Self->{'Customer::AuthModule4'} = 'Kernel::System::CustomerAuth::LDAP';
$Self->{'Customer::AuthModule::LDAP::Host4'} = 'macrohard.com';
$Self->{'Customer::AuthModule::LDAP::BaseDN4'} = 'dc=macrohard,dc=com';
$Self->{'Customer::AuthModule::LDAP::UID4'} = 'sAMAccountName';
$Self->{'Customer::AuthModule::LDAP::SearchUserDN4'} = '[email protected]';
$Self->{'Customer::AuthModule::LDAP::SearchUserPw4'} = 'bot-password!?';
$Self->{'Customer::AuthModule::LDAP::AlwaysFilter4'} = '(&(mail=*)(samAccountType=805306368)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))';
# --------------------------------------------------- #
# End customer authentication settings #
# --------------------------------------------------- #
Синхронизация клиентов (получение атрибутов клиента из LDAP, связь с компаниями OTRS)
# --------------------------------------------------- #
# Customer authentication sync #
# --------------------------------------------------- #
# Customer user DB backend and settings
$Self->{CustomerUser} = {
Name => Translatable('Database Backend'),
Module => 'Kernel::System::CustomerUser::DB',
Params => {
Table => 'customer_user',
SearchCaseSensitive => 0,
},
# customer unique id
CustomerKey => 'login',
# customer #
CustomerID => 'customer_id',
CustomerValid => 'valid_id',
CustomerUserListFields => [ 'first_name', 'last_name', 'email' ],
CustomerUserSearchFields => [ 'login', 'first_name', 'last_name', 'customer_id' ],
CustomerUserSearchPrefix => '*',
CustomerUserSearchSuffix => '*',
CustomerUserSearchListLimit => 250,
CustomerUserPostMasterSearchFields => ['email'],
CustomerUserNameFields => [ 'title', 'first_name', 'last_name' ],
CustomerUserEmailUniqCheck => 1,
CustomerCompanySupport => 1,
CacheTTL => 60 * 60 * 24,
Map => [
[ 'UserTitle', Translatable('Title or salutation'), 'title', 1, 0, 'var', '', 0, undef, undef ],
[ 'UserFirstname', Translatable('Firstname'), 'first_name', 1, 1, 'var', '', 0, undef, undef ],
[ 'UserLastname', Translatable('Lastname'), 'last_name', 1, 1, 'var', '', 0, undef, undef ],
[ 'UserLogin', Translatable('Username'), 'login', 1, 1, 'var', '', 0, undef, undef ],
[ 'UserPassword', Translatable('Password'), 'pw', 0, 0, 'var', '', 0, undef, undef ],
[ 'UserEmail', Translatable('Email'), 'email', 1, 1, 'var', '', 0, undef, undef ],
[ 'UserCustomerID', Translatable('CustomerID'), 'customer_id', 0, 1, 'var', '', 0, undef, undef ],
[ 'UserPhone', Translatable('Phone'), 'phone', 1, 0, 'var', '', 0, undef, undef ],
[ 'UserFax', Translatable('Fax'), 'fax', 1, 0, 'var', '', 0, undef, undef ],
[ 'UserMobile', Translatable('Mobile'), 'mobile', 1, 0, 'var', '', 0, undef, undef ],
[ 'UserStreet', Translatable('Street'), 'street', 1, 0, 'var', '', 0, undef, undef ],
[ 'UserZip', Translatable('Zip'), 'zip', 1, 0, 'var', '', 0, undef, undef ],
[ 'UserCity', Translatable('City'), 'city', 1, 0, 'var', '', 0, undef, undef ],
[ 'UserCountry', Translatable('Country'), 'country', 1, 0, 'var', '', 0, undef, undef ],
[ 'UserComment', Translatable('Comment'), 'comments', 1, 0, 'var', '', 0, undef, undef ],
[ 'ValidID', Translatable('Valid'), 'valid_id', 0, 1, 'int', '', 0, undef, undef ],
],
# default selections
Selections => {
# UserTitle => {
# 'Mr.' => Translatable('Mr.'),
# 'Mrs.' => Translatable('Mrs.'),
# },
},
};
# my-it-company.com customer user ldap backend and settings
$Self->{CustomerUser2} = {
Name => 'AD my-it-company.com',
Module => 'Kernel::System::CustomerUser::LDAP',
Params => {
# ldap host
Host => 'my-it-company.com',
# ldap base dn
BaseDN => 'dc=my-it-company,dc=com',
# search scope (one|sub)
SSCOPE => 'sub',
UserDN => 'uid=ldap-bot,cn=users,cn=accounts,dc=my-it-company,dc=com',
UserPw => 'bot-password!',
# in case you want to add always one filter to each ldap query, use
# this option. e. g. AlwaysFilter => '(mail=*)' or AlwaysFilter => '(objectclass=user)'
AlwaysFilter => '(mail=*)',
SourceCharset => 'utf-8',
Die => 0,
},
# customer unique id
CustomerKey => 'uid',
# customer #
CustomerID => 'ou',
CustomerUserListFields => ['uid', 'cn', 'mail'],
CustomerUserSearchFields => ['uid', 'cn', 'mail'],
CustomerUserSearchPrefix => '',
CustomerUserSearchSuffix => '*',
CustomerUserSearchListLimit => 250,
CustomerUserPostMasterSearchFields => ['mail'],
CustomerUserNameFields => ['sn', 'givenname'],
# Configures the character for joining customer user name parts. Join single space if it is not defined.
CustomerUserNameFieldsJoin => ' ',
# show customer user and customer tickets in customer interface
CustomerUserExcludePrimaryCustomerID => 0,
# add a ldap filter for valid users (expert setting)
# CustomerUserValidFilter => '(!(description=gesperrt))',
# admin can't change customer preferences
AdminSetPreferences => 1,
# cache time to live in sec. - cache any ldap queries
CacheTTL => 0,
Map => [
[ 'UserTitle', Translatable('Title or salutation'), 'title', 1, 0, 'var', '', 1, undef, undef ],
[ 'UserFirstname', Translatable('Firstname'), 'givenname', 1, 1, 'var', '', 1, undef, undef ],
[ 'UserLastname', Translatable('Lastname'), 'sn', 1, 1, 'var', '', 1, undef, undef ],
[ 'UserLogin', Translatable('Username'), 'uid', 1, 1, 'var', '', 1, undef, undef ],
[ 'UserEmail', Translatable('Email'), 'mail', 1, 1, 'var', '', 1, undef, undef ],
[ 'UserCustomerID', Translatable('CustomerID'), 'ou', 0, 1, 'var', '', 1, undef, undef ],
[ 'UserPhone', Translatable('Phone'), 'telephonenumber', 1, 0, 'var', '', 1, undef, undef ],
[ 'UserMobile', Translatable('Mobile'), 'mobile', 1, 0, 'var', '', 1, undef, undef ],
],
};
# pear customer user ldap backend and settings
$Self->{CustomerUser3} = {
Name => 'AD pear',
Module => 'Kernel::System::CustomerUser::LDAP',
Params => {
# ldap host
Host => 'pear.com',
BaseDN => 'DC=pear,DC=com',
SSCOPE => 'sub',
UserDN => '[email protected]',
UserPw => 'bot-password?',
AlwaysFilter => '(&(mail=*)(samAccountType=805306368)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))',
SourceCharset => 'utf-8',
Die => 0,
},
# customer unique id
CustomerKey => 'sAMAccountName',
# customer #
CustomerID => 'company',
CustomerUserListFields => ['sAMAccountName', 'cn', 'mail'],
CustomerUserSearchFields => ['sAMAccountName', 'cn', 'mail'],
CustomerUserSearchPrefix => '',
CustomerUserSearchSuffix => '*',
CustomerUserSearchListLimit => 250,
CustomerUserPostMasterSearchFields => ['mail'],
CustomerUserNameFields => ['sn', 'givenname'],
# Configures the character for joining customer user name parts. Join single space if it is not defined.
CustomerUserNameFieldsJoin => ' ',
# show customer user and customer tickets in customer interface
CustomerUserExcludePrimaryCustomerID => 0,
AdminSetPreferences => 1,
CacheTTL => 0,
Map => [
# note: Login, Email and CustomerID needed!
# var, frontend, storage, shown (1=always,2=lite), required, storage-type, http-link, readonly, http-link-target, link class(es)
[ 'UserTitle', Translatable('Title or salutation'), 'title', 1, 0, 'var', '', 1, undef, undef ],
[ 'UserFirstname', Translatable('Firstname'), 'givenname', 1, 1, 'var', '', 1, undef, undef ],
[ 'UserLastname', Translatable('Lastname'), 'sn', 1, 1, 'var', '', 1, undef, undef ],
[ 'UserLogin', Translatable('Username'), 'sAMAccountName', 1, 1, 'var', '', 1, undef, undef ],
[ 'UserFullLogin', Translatable('FullUsername'), 'userPrincipalName', 1, 1, 'var', '', 1, undef, undef ],
[ 'UserEmail', Translatable('Email'), 'mail', 1, 1, 'var', '', 1, undef, undef ],
[ 'UserCustomerID', Translatable('CustomerID'), 'company', 0, 1, 'var', '', 1, undef, undef ],
[ 'UserPhone', Translatable('Phone'), 'telephoneNumber', 1, 0, 'var', '', 1, undef, undef ],
[ 'UserMobile', Translatable('Mobile'), 'mobile', 1, 0, 'var', '', 1, undef, undef ],
[ 'UserAddress', Translatable('Address'), 'postaladdress', 1, 0, 'var', '', 1, undef, undef ],
[ 'UserOffice', Translatable('Office'), 'physicalDeliveryOfficeName', 1, 0, 'var', '', 1, undef, undef ],
[ 'UserDepartment', Translatable('Department'), 'department', 1, 0, 'var', '', 1, undef, undef ],
[ 'UserComment', Translatable('Comment'), 'description', 1, 0, 'var', '', 1, undef, undef ],
],
};
# macrohard customer user ldap backend and settings
$Self->{CustomerUser4} = {
Name => 'AD macrohard',
Module => 'Kernel::System::CustomerUser::LDAP',
Params => {
# ldap host
Host => 'macrohard.com',
# ldap base dn
BaseDN => 'dc=macrohard,dc=com',
# search scope (one|sub)
SSCOPE => 'sub',
UserDN => '[email protected]',
UserPw => 'bot-password!?',
AlwaysFilter => '(&(mail=*)(samAccountType=805306368)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))',
SourceCharset => 'utf-8',
Die => 0,
},
# customer unique id
CustomerKey => 'sAMAccountName',
# customer #
CustomerID => 'company',
CustomerUserListFields => ['sAMAccountName', 'cn', 'mail'],
CustomerUserSearchFields => ['sAMAccountName', 'cn', 'mail'],
CustomerUserSearchPrefix => '',
CustomerUserSearchSuffix => '*',
CustomerUserSearchListLimit => 250,
CustomerUserPostMasterSearchFields => ['mail'],
CustomerUserNameFields => ['sn', 'givenname'],
# Configures the character for joining customer user name parts. Join single space if it is not defined.
CustomerUserNameFieldsJoin => ' ',
# show customer user and customer tickets in customer interface
CustomerUserExcludePrimaryCustomerID => 0,
AdminSetPreferences => 1,
CacheTTL => 0,
Map => [
[ 'UserTitle', Translatable('Title or salutation'), 'title', 1, 0, 'var', '', 1, undef, undef ],
[ 'UserFirstname', Translatable('Firstname'), 'givenname', 1, 1, 'var', '', 1, undef, undef ],
[ 'UserLastname', Translatable('Lastname'), 'sn', 1, 1, 'var', '', 1, undef, undef ],
[ 'UserLogin', Translatable('Username'), 'sAMAccountName', 1, 1, 'var', '', 1, undef, undef ],
[ 'UserFullLogin', Translatable('FullUsername'), 'userPrincipalName', 1, 1, 'var', '', 1, undef, undef ],
[ 'UserEmail', Translatable('Email'), 'mail', 1, 1, 'var', '', 1, undef, undef ],
[ 'UserCustomerID', Translatable('CustomerID'), 'company', 0, 1, 'var', '', 1, undef, undef ],
[ 'UserPhone', Translatable('Phone'), 'telephoneNumber', 1, 0, 'var', '', 1, undef, undef ],
[ 'UserMobile', Translatable('Mobile'), 'mobile', 1, 0, 'var', '', 1, undef, undef ],
[ 'UserAddress', Translatable('Address'), 'postaladdress', 1, 0, 'var', '', 1, undef, undef ],
[ 'UserOffice', Translatable('Office'), 'physicalDeliveryOfficeName', 1, 0, 'var', '', 1, undef, undef ],
[ 'UserDepartment', Translatable('Department'), 'department', 1, 0, 'var', '', 1, undef, undef ],
[ 'UserComment', Translatable('Comment'), 'description', 1, 0, 'var', '', 1, undef, undef ],
],
};
Заключение
Как вы увидели, настройка аутентификации и синхронизации аккаунтов в OTRS — это очень просто, но все же надеюсь, что эта статья поможет тем, кто только начинает знакомиться с этой системой.
Что осталось за бортом этой статьи?
- Параллельно с LDAP можно также запустить SSO-авторизацию, что еще упростит жизнь клиентам
- Если есть специалисты по Perl — можно написать собственные backend для подключения к другим информационным системам.
- Сознательно упрощена конфигурация, например, нет блоков фильтрации по принадлежности к группам LDAP, нет доменных суффиксов, BASE DN, работы с дополнительными атрибутами, работы с LDAP на других портах и много другого
Советы и уточнения приветствуются комментариях, информация об опечатках — в ЛС.
Спасибо за внимание. Отдельное спасибо авторам, чьи материалы по OTRS я использовал много лет назад при знакомстве с этой системой: Turilion, supersuperoleg, wmlex
Настройка аутентификации на прокси через LDAP в службе каталогов¶
Импортирование сертификата центра сертификации Active Directory
Осуществите импорт сертификата в соответствии с инструкцией Использование сертификата центра сертификации Active Directory. Данный сертификат потребуется для работы LDAPS.
Настройка коннектора LDAP
Пройдите в раздел Система -> Доступ -> Серверы, в правом верхнем углу нажмите на кнопку Добавить сервер и задайте настройки, аналогичные приведенным ниже:
Описательное имя | LDAP connector |
Тип | LDAP |
Имя хоста или IP-адрес | controller.dom.loc |
Значение порта | 636 |
Транспортный протокол | SSL — зашифрованный |
Центр сертификации пиров | dom.loc CA |
Версия протокола | 3 |
Привязать параметры доступа | User Principle Name для пользователя |
Область поиска | Уровень: единичный; База поиска: DC=dom, DC=loc |
Контейнеры для аутентификации | OU=Users,OU=UO — LAN,DC=dom,DC=loc |
Атрибут присвоения имени пользователю | samAccountName |
Поле Имя хоста или IP-адрес
При настройке LDAPS, в поле Имя хоста или IP-адрес важно указывать именно DNS-имя LDAP-сервера (контроллера домена), и именно то DNS-имя, которое содержится в поле Subject или в поле Subject Alternative Name сертификата, предъявляемого LDAP-сервером. В нашем примере, LDAP-сервер / контроллер домена имеет DNS-имя controller.dom.loc.
Поле Транспортный протокол
При использовании LDAP, LDAP-клиент аутентифицируется на LDAP-сервере с использованием доменного логина / пароля. При использовании нешифрованного LDAP, все данные (в том числе логин и пароль) передаются в открытом виде и могут быть перехвачены. Предпочтительнее использовать LDAPS (LDAP over SSL/TLS).
Поле Центр сертификации пиров
В доменной среде Active Directory удобно использовать сертификаты, изданные центром сертификации Active Directory. Выберите ранее импортированный сертификат издательства в поле Центр сертификации пиров. В нашем примере, импортированный сертификат издательства называется dom.loc CA. Импортированный сертификат издательства используется для верификации серверного сертификата, предъявляемого LDAP-сервером.
Поле Привязать параметры доступа
В качестве параметра доступа лучше всего указать пользователя в виде принципала Kerberos (т.е. указать User Principal Name). Например, если домен Windows у нас dom.loc, а имя пользователя danny, то UPN выгдядит следующим образом:
Поле Область поиска
Любой LDAP запрос предполагает указание ряда параметров, в соответствии с которыми осуществляется операция поиска в LDAP-каталоге. В нашем примере, домен называется dom.loc, поэтому базу поиска нужно указывать как DC=dom, DC=loc.
Поле Контейнеры для аутентификации
В нашем случае, пользователи находятся в нескольких организационных единицах (OU). Полностью путь до пользователей в LDAP-каталоге выглядит как OU=Users,OU=UO — LAN,DC=dom,DC=loc. В вашем случае, путь до пользователей будет выглядеть иначе.
Поле Атрибут присвоения имени пользователю
Поле должно содержать значение samAccountName для доменной среды Active Directory.
Включение LDAP аутентификации в веб-прокси
Проверьте, что в настройках веб-прокси используется метод авторизации LDAP. Для этого пройдите в Службы -> Веб-прокси -> Администрирование, вкладка Forward Proxy, пункт меню Authentication Settings.
В поле Метод аутентификации должен быть выбран ранее созданный LDAP-коннектор.
Аутентификация LDAP в Linux – Information Security Squad
Это руководство покажет вам, как держать своих пользователей в LDAP и аутентифицировать некоторых из них.
Я не буду показывать, как устанавливать определенные пакеты, поскольку это зависит от дистрибутива / системы.
Я сосредоточусь на «чистой» конфигурации всех компонентов, необходимых для аутентификации / хранения пользователей в LDAP.
Предполагается, что вы переходите от обычной аутентификации passwd / shadow, но она также подходит для людей, которые делают это с нуля.
Требования
Введение
Мы хотим добиться того, чтобы наши пользователи сохранялись в LDAP, аутентифицировались через LDAP (direct или pam) и чтобы вы имели некоторый инструмент для управления этими всем понятным для человека способом.
Таким образом, мы можем использовать все программное обеспечение, поддерживающее LDAP, или возвратимся к модулю LDAP PAM, который будет действовать как шлюз PAM-> LDAP.
Более подробную информацию о идее LDAP можно найти в Википедии: LDAP wikipedia
Настройка OpenLDAP
OpenLDAP состоит из slapd и slurpd-демона.
Этот способ охватывает один сервер LDAP без репликации, поэтому мы сосредоточимся только на slapd.
Я также предполагаю, что вы установили и инициализировали установку OpenLDAP (в зависимости от системы / распространения).
Если да, перейдем к части конфигурации.
В моей системе (Gentoo) конфигурация OpenLDAP хранится в /etc/openldap, нас интересует файл /etc/openldap/slapd.conf.
Но сначала мы должны сгенерировать пароль для администратора LDAP, чтобы поместить его в файл конфигурации:
slappasswd -h {md5}
Конфигурация выглядит так:
include /etc/openldap/schema/core.schema include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/inetorgperson.schema include /etc/openldap/schema/nis.schema allow bind_v2 pidfile /var/run/openldap/slapd.pid argsfile /var/run/openldap/slapd.args modulepath /usr/lib/openldap/openldap access to attrs=userPassword by dn="uid=root,ou=People,dc=domain,dc=com" write by dn="cn=Manager,dc=domain,dc=com" write by anonymous auth by self write by * none access to dn.base="" by * read access to * by dn="cn=Manager,dc=domain,dc=com" write by * read database bdb suffix "dc=domain,dc=com" rootdn "cn=Manager,dc=domain,dc=com" rootpw {MD5}Tk1sMytv5ipjr+Vhcf03JQ== directory /var/lib/openldap-data index objectClass eq
Не забудьте изменить суффикс и пути.
Это варианты с некоторыми базовыми ACL, необходимыми для изменения паролей пользователем.
Если вам нужна дополнительная функциональность, прочитайте руководство по OpenLDAP.
Теперь, когда у нас есть надлежащая конфигурация для slapd, мы можем запустить демон:
service slapd start
Пожалуйста, не забудьте сделать что-то подобное в файле конфигурации, отвечающем за аргументы, переданные slapd (путь должен указывать на slapd.sock):
OPTS="-h 'ldaps:// ldapi://%2fvar%2frun%2fopenldap%2fslapd.sock'"
Теперь мы можем проверить, работает ли openldap и работает ли он правильно.
У нас еще нет данных в каталоге, но мы можем попытаться связать их как cn = Manager, dc = domain, dc = com.
Когда вас попросят ввести пароль, вы должны использовать тот, который вы создали (конечно, его текстовая версия :):
ldapsearch -D "cn=Manager,dc=domain,dc=com" -W
Миграция / добавление данных в каталог
Теперь, когда у нас есть работающий сервер LDAP, мы должны заполнить его данными, либо создать, либо перенести записи.
Я покажу вам, как переносить существующие записи из обычных /etc/ passwd, /etc/shadow, /etc/groups
Первый шаг – настроить mogrationtools.
Конфигурационный файл в Gentoo находится в /usr/share/migrationtools/migrate_common.ph.
Как правило, вам нужно изменить только эти моменты:
$DEFAULT_BASE = "dc=domain,dc=com"; $EXTENDED_SCHEMA = 1;
Теперь вы готовы перенести данные (на самом деле это работает даже без команды export):
export ETC_SHADOW=/etc/shadow
./migrate_base.pl > /tmp/base.ldif
./migrate_group.pl /etc/group /tmp/group.ldif
./migrate_hosts.pl /etc/hosts /tmp/hosts.ldif
./migrate_passwd.pl /etc/passwd /tmp/passwd.ldif
Теперь у нас есть данные в формате, понятном серверу LDAP.
Пожалуйста, откройте один из файлов с текстовым редактором, чтобы привыкнуть к синтаксису.
После этого мы можем добавить данные из ldifs.
ldapadd -D "cn=Manager,dc=domain,dc=com" -W -f /tmp/base.ldif
ldapadd -D "cn=Manager,dc=domain,dc=com" -W -f /tmp/group.ldif
ldapadd -D "cn=Manager,dc=domain,dc=com" -W -f /tmp/passwd.ldif
ldapadd -D "cn=Manager,dc=domain,dc=com" -W -f /tmp/hosts.ldif
Вы можете попробовать найти некоторые данные:
ldapsearch uid=foouser
Конфигурация клиента
Под клиентом я имею в виду машину, которая подключается к LDAP-серверу для получения пользователей и авторизации.
Это может быть и машина, на которой работает LDAP-сервер.
В обоих случаях мы должны отредактировать три файла: /etc/ldap.conf, /etc/nsswitch.conf и /etc/pam.d/system-auth
Начнем с ldap.conf, клиента ldap:
BASE dc=domain, dc=com scope sub suffix "dc=domain,dc=com" ## when you want to change user's password by root rootbinddn cn=Manager,dc=domain,dc=com ## there are needed when your ldap dies timelimit 5 bind_timelimit 5 uri ldap://ldap.domain.com/ pam_password exop ldap_version 3 pam_filter objectclass=posixAccount pam_login_attribute uid pam_member_attribute memberuid nss_base_passwd ou=Computers,dc=cognifide,dc=pl nss_base_passwd ou=People,dc=cognifide,dc=pl nss_base_shadow ou=People,dc=cognifide,dc=pl nss_base_group ou=Group,dc=cognifide,dc=pl nss_base_hosts ou=Hosts,dc=cognifide,dc=pl
Теперь пришло время для nsswitch.conf и pam
Добавьте в nsswitch.conf:
passwd: files ldap shadow: files ldap group: files ldap
И измените system-auth (или все, что у вас есть, например login, sshd и т. д.):
auth required pam_env.so auth sufficient pam_unix.so likeauth nullok auth sufficient pam_ldap.so use_first_pass auth required pam_deny.so account sufficient pam_unix.so account sufficient pam_ldap.so account required pam_ldap.so password required pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3 password sufficient pam_unix.so nullok md5 shadow use_authtok password sufficient pam_ldap.so use_first_pass password required pam_deny.so session required pam_limits.so session required pam_unix.so session optional pam_ldap.so
Время проверить его. Лучший инструмент для этого – хороший старый getent.
Выберите пользователя из вашей системы и введите:
getent passwd | grep foouser
Вы должны получить результат дважды, если nss_ldap работает нормально.
По часть pam , работоспособность может быть протестирована путем удаления пользователя из /etc/passwd и попытки входа в систему через ssh.
Apache mod_auth_ldap
Чтобы получить авторизацию LDAP в apache, вам необходимо загрузить модуль mod_auth_ldap
LoadModule mm_auth_ldap_module modules/mod_auth_ldap.so
Теперь достаточно изменить .htaccess:
AuthName "Restricted" AuthType Basic AuthLDAPURL ldap://ldap.domain.com:389/ou=People,dc=domain,dc=com?uid AuthLDAPBindDN "cn=Manager,dc=domain,dc=com" AuthLDAPBindPassword "your_secret_secret_password_to_ldap_admin" require valid-user
Обратите внимание, что этот метод можно также использовать для авторизации Subversion WebDAV
Средства администрирования LDAP
Есть несколько инструментов, которые я рекомендую использовать для администрирования сервера OpenLDAP
Другие приложения, поддерживающие ldap
- Postfix
- Courier IMAP
- jabberd
- eGroupware
Аутентификация по SSH через клиент LDAP
После настройки сервера вы можете настроить вход в систему по записям LDAP, обеспечив таким образом централизованную аутентификацию. Вот что для этого нужно. В первую очередь включить аутентификацию при помощи LDAP путем конфигурации записи соответствующим образом, а затем настроить клиент LDAP. После этого можно входить по SSH с аутентификацией через LDAP.
Предварительная подготовка
Перед настройкой клиента нужно обеспечить возможность входа в систему по SSH. Для этого необходимо задать записи на сервере LDAP соответствующие атрибуты:
# ldapmodify -D "cn=admin,dc=mydomain,dc=com" -W Enter LDAP Password: dn: uid=jsmith,dc=mydomain,dc=com changetype: add uid: jsmith uidNumber: 20000 gidNumber: 20000 cn: John sn: Smith objectClass: top objectClass: person objectClass: posixAccount objectClass: shadowAccount loginShell: /bin/bash homeDirectory: /home/jsmith userPassword: {SSHA}2xAywmFEnDX8lKjv7Kjlx/yFw6eO3sZB
Обратите внимание: нужно задать классы объекта posixAccount и shadowAccount, а также поля uidNumber, gidNumber, loginShell и homeDirectory. Если этих полей нет, то система не знает, как обслуживать такого пользователя, и по SSH с этой учетной записью вы войти не сможете.
После создания или изменения существующей учетной записи можно переходить уже непосредственно к настройке клиента.
Установка пакетов
Установить пакеты можно командой:
apt-get install libnss-ldap libpam-ldap nscd
По зависимостям установится еще несколько пакетов.
Конфигурация
После установки автоматически запустится конфигурация пакетов и будут запрошены настройки. Сначала будет сконфигурирован пакет libnss-ldap.
Вводим адрес сервера LDAP, нажимаем ОК.
Вводим базовое имя для поиска. В нашем случае «dc=mydomain,dc=com». Нажимаем ОК.
Выбираем 3 версию протокола LDAP, нажимаем ОК.
Выбираем учетную запись, которая будет использоваться для запросов с привелегиями root. В нашем случае это «cn=admin,dc=mydomain,dc=com». Нажимаем ОК.
Теперь задаем пароль для указанной ранее учетной записи и нажимаем ОК.
Видим сообщение о том, что необходимо будет изменить файл /etc/nsswitch.conf. Нажимаем ОК. После этого запускается настройка пакета libpan-ldap.
На вопрос о разрешении учетной записи вести себя как root отвечаем «Нет».
И на последний вопрос отвечаем «Нет».
Теперь нужно отредактировать файл /etc/nsswitch.conf. В нем нужно строки
passwd: compat group: compat shadow: compat ... netgroup: nis
изменить следующим образом:
passwd: compat ldap group: compat ldap shadow: compat ldap ... netgroup: ldap
После этого перезапустить сервис nscd
service nscd restart
Теперь нужно в конец файла /etc/pam.d/common-session в самый конец добавить строчку:
session required pam_mkhomedir.so
И всё!
Вход в систему через клиент LDAP
Теперь можно входить по SSH:
jsmith@smith-laptop:/home/jsmith$ ssh [email protected] [email protected]'s password: Creating directory '/home/jsmith'. Linux debian-ldapclient 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt4-3 (2015-02-03) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Sun Apr 5 12:17:30 2015 from 192.168.0.6 jsmith@debian-ldapclient:~$
Вот так будет выглядеть успешный вход в систему. Как вы видите, при входе создается домашняя директория пользователя. И теперь можно работать с системой.
- Нажмите здесь, чтобы поделиться контентом на Facebook. (Открывается в новом окне)
- Нажмите, чтобы поделиться на LinkedIn (Открывается в новом окне)
- Нажмите, чтобы поделиться на Reddit (Открывается в новом окне)
- Нажмите, чтобы поделиться на Twitter (Открывается в новом окне)
- Нажмите, чтобы поделиться записями на Tumblr (Открывается в новом окне)
- Нажмите, чтобы поделиться записями на Pinterest (Открывается в новом окне)
- Нажмите, чтобы поделиться записями на Pocket (Открывается в новом окне)
- Нажмите, чтобы поделиться в Telegram (Открывается в новом окне)
- Нажмите, чтобы поделиться в WhatsApp (Открывается в новом окне)
- Нажмите, чтобы поделиться в Skype (Открывается в новом окне)
Использование LDAP в качестве технологии единого входа (Active Directory) | Integrations | Сообщество поддержки
В дополнение к стандартным методам аутентификации вы можете использовать метод аутентификации пользователей через LDAP сервер в UseResponse (Microsoft Active Directory Server, OpenLDAP и пр.).
LDAP доступен только в Enterprise пакете
Основные настройки LDAP
Перейдите в Администрирование » Приложения и активируйте Единый вход. Затем нажмите Настройки и выберите LDAP в списке.
Если вы планируете использовать систему только внутри вашей компании, выберите опцию «Использовать только единый вход». В результате будет использоваться LDAP форма авторизации без необходимости регистрации в сообществе.
Когда новый пользователь будет регистрироваться через LDAP сервер, в UseResponse будет создаваться учетная запись пользователя. Чтобы не отправлять пользователю регистрационные данные, включите соответствующию опцию «Не отправлять письмо регистрации».
Другие базовые настройки по подключению к вашему LDAP серверу:
- LDAP (Хост, Порт, Версия протокола) — укажите имя хоста или IP вашего LDAP сервера. Настройки по умолчанию — localhost, порт 389, версия протокола 3. Когда сервер обеспечивает безопасное соединение, добавьте к имени хоста ldaps://;
- BaseDN (Base Distinguished Name) — базовое отличительное имя для Active Directory со значением по умолчанию dc=localhost;
- Администратор и пароль LDAP — если ваш LDAP сервер требует авторизации для получения данных, для соединения введите учетные данные администратора.
Вы всегда можете проверить соединение с вашим LDAP сервером с сохраненными настройками. Нажмите кнопку «Протестировать» и введите Имя пользователя и пароль любого пользователя на вашем LDAP сервере.
Скрипт php
Чтобы использовать метод авторизации LDAP, вам нужно установить на свой сервер PHP расширение — «php_ldap».
Расширенные настройки LDAP
Если у вас определенная конфигурация вашего LDAP сервера, перейдите к Расширенным настройкам, где вы можете управлять следующим:
- Привязка имени пользователя — поле/контейнер (cn, uid), чтобы связать пользователей LDAP-Useresponse между собой. Если вы используете авторизацию по любому полю в структуре LDAP, тогда потребуется указать администратора и пароль LDAP.
Внимание: значение по умолчанию uid, но для старых версий Windows с active directory значение должно быть sAMAccountName
- Имя пользователя в DN-нотации — некоторые конфигурации могут требовать имя пользователя в DN-нотации;
- Соответствие имени пользователя — поле/контейнер (cn, displayname, givenname). По умолчанию используйте «auto»;
- Соответствие email — поле/контейнер (mail, email, userprincipalname). По умолчанию используйте «auto»;
- Доменная зона для email — если email не определен, то он будет сформирован по принципу username@domainzone;
- Дополнительный фильтр поиска — вы можете указать конкретный фильтр, чтобы только определенные пользователи вашего LDAP сервера могли входить в систему UseResponse. Значение по умолчанию (objectClass=*).
Любой пользователь, который регистрируется в UseResponse через LDAP сервер, получает команду «Пользователь». Если вы хотите настроить дополнительные правила назначения команды для определенных пользователей, используйте настройку «Разрешить назначение команды».
Устранение неполадок
Во время тестирования соединения или обработки пользовательских данных при входе в систему, вы можете столкнуться с ошибками соединения, привязки имени пользователя и пр.
Можете использовать любой инструмент для тестирования LDAP, прежде чем сохранить любые из настроек в UseResponse. По коду ошибки можно определить, где возникает проблема. Распространенные причины ошибок LDAP имеются в публичном доступе.
|
|
nss_ldap нужен, для того, чтобы система видела пользователей, хранящихся в LDAP, а pam_ldap нужен
непосредственно для аутентификации пользователей.
Ставим…
|
Все, установилось.
Настройка.
Для начала давайте добавим следующие записи в LDAP:
users.ldif:
|
fr33man.ldif
|
Добавляем:
|
Рихтуем /usr/local/etc/nss_ldap.conf:
|
Теперь /etc/nsswitch.conf:
|
Проверяем, как все работает:
|
Пользователь fr33man есть, но его нет в локальных базах.
Теперь переходим к настройке pam_ldap. Для этого редактируем /usr/local/etc/ldap.conf до такого состояния:
|
Осталось указать сервисам login, sshd и тд. использовать модуль pam_ldap для аутентификации, для этого редактируем
/etc/pam.d/sshd и /etc/pam.d/ до такого состояния:
/etc/pam.d/sshd:
|
/etc/pam.d/system:
|
Теперь можно проверять, как это все работает. Попробуем зайти по ssh:
|
Пользователя fr33man мы не создавали локально, следовательно домашней директории для него нет. Поэтому можете содать домашнюю директорию, а
можете воспользоваться демоном amd(8).
|
2014-07-27, lissyara
gmirror Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9
Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
2011-11-20, BlackCat
Разъём на WiFi-карту
Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
2011-09-14, manefesto
Настройка git+gitosis
Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
|
Этот информационный блок появился по той простой причине,
что многие считают нормальным, брать чужую информацию не уведомляя автора
(что не так страшно), и не оставляя линк на оригинал и автора — что более существенно.
Я не против распространения информации — только за. Только условие простое — извольте
подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой,
незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
Если соизволите поставить автора в известность — то вообще почёт вам и уважение.
© lissyara 2006-10-24 08:47 MSK
LDAP аутентификация, авторизация и синхронизация (FreeIPA, AD) / Хабр
OTRS — система обработки заявок с открытым кодом (Open-source Ticket Request System), написанная на Perl.
Существует в двух вариантах:
Перечислю немного из того фукционала, который поддерживает эту систему:
- модуль ITSM (Управление уровнем обслуживания, Управление изменениями, Управление конфигурацией, CMDB)
- адаптивный веб-интерфейс
- API
- SLA и сервисы
- мультитенантность
- эскалации
- аутентификация: DB, LDAP, HTTPBasicAuth, Radius
- поддержка MySQL, MariaDB, PostgreSQL, Oracle
И если искать в ней недостатки — так это непривычность интерфейса и сложность в настройке.Под катом — об основах авторизации (группы, RBAC, поддержка нескольких компаний-клиентов), аутентификации и синхронизации метаданных (ФИО, телефона и прочего), используя различные каталоги LDAP
Клиенты, очереди, агенты и группы
После установки OTRS у вас сразу будут доступны:
- клиенты — создавать заявки, отправив письмо или используя веб-доступ
- очереди — каждая заявка попадает в одну из очередей заявок
- агенты — ИТ-специалисты, работающие над выполнением заявок из доступных им очередей
- группы — сущность, связывающая между собой очереди, клиентов и агентов, а также задающая права агентов — например, только чтение, изменение приоритета заявки и т.п.
Стандартные группы
После установки системы вы три созданных группы:
- admin — члены группы могут администрировать (настраивать) OTRS
- stats — возможность настраивать и запускать отчеты
- пользователя — стандартная группа для клиентов, очередей и агентов
Права, связанные с группой
Основные права
Основные права, которые можно настроить в группе, ограничивающие действия агентов:
- только чтение — права только на чтение в данной группе / очереди
- переместить — права на перемещение заявок в эту группу / очередь
- создание — права на создание заявок в этой группе / очереди
- заметка — права на добавление заметок в заявки в этой группе / очереди
- владелец — права на смену владельца заявок в этой группе / очереди
- приоритет — права на смену приоритета заявок в этой группе / очереди
- чтение / запись — полные права на чтение и запись для заявок в данной группе / очереди
Дополнительные права
Также доступны и дополнительные права, которые можно включить в настройках (Система :: Разрешение):
- отчеты — доступ к отчетам
- перенаправить — право перенаправить / отклонить почтовое сообщение (ссылка перенаправить / отклонить в ticketZoom)
- создать — право составления ответа на заявку
- клиент — право изменить клиента для этой заявки
- переслать — право пересылать сообщения (с помощью кнопки Переслать)
- в ожидании — перевести заявку в ожидание
- телефон — добавить содержание звонка клиента к заявке в виде сообщения / заметки
- ответственный — Право изменить ответственного за заявку
Рассмотрим это более подробно:
- каждый клиент может быть включен в одну или несколько групп, изначально все клиенты входят в группу users
- каждая очередь заказов связывается с какой-либо одной из групп
- через веб-интерфейс клиент может делать заявки в тех очередях, к которым имеют доступ группы, в которых он включен
- при отправке клиентом приложения по электронной почте существует возможность на основании этого атрибута сообщения (например, адрес отправителя или заголовка письма) тесты характеристики заявки, в том числе и очередь, попадет заявка
- если клиент позвонил по телефону, агент может завести заявку вручную, выбрав любую из доступных агенту очередей
- желательно, чтобы заявка клиента всегда была в очередях, доступных клиенту, иначе он не сможет получить доступ к ней через веб-интерфейс
- агенты могут действовать в соответствии с правами на очередь, в которой находится заявка
Аутентификация с использованием базы данных
Стандартный способ аутентификации и авторизации агентов и клиентов — это база данных.
Например, настройка аутентификации агентов, используя данные, выглядит так:
$ Self -> {'AuthModule'} = 'Kernel :: System :: Auth :: DB';
Клиентов:
$ Self -> {'Customer :: AuthModule'} = 'Kernel :: System :: CustomerAuth :: DB';
$ Self -> {'Клиент :: AuthModule :: DB :: Table'} = 'customer_user';
$ Self -> {'Customer :: AuthModule :: DB :: CustomerKey'} = 'логин';
$ Self -> {'Клиент :: AuthModule :: DB :: CustomerPassword'} = 'pw';
Мы оставим этот способ аутентификации и добавим в дополнение к нему аутентификацию через LDAP.
Роли и компании
Так же мы расширим возможности авторизации, добавив роли и компании:
- роли — позволяют более гибко управлять доступами, связывая между собой группы и агентов
- компании — позволяет изолировать заявки различных клиентов (будь то разные отделы или компании)
Постановка задачи
Вы — администратор системы OTRS в компании my-it-company.com, предоставляющий сервисные услуги другим компаниям.
Вам очень бы не хотелось заводить учетные записи новых агентов и клиентов вручную, а также заполнять дополнительную информацию, такую как адрес электронной почты, телефон, должность, адрес и номер кабинета — ведь это все уже есть в каталогах LDAP.
И ваша компания также получит очевидные плюсы — единый пароль сотрудника во все системы, блокировка учетных записей в LDAP заблокирует доступ и во все остальные сервисы.
my-it-company.com использует работает на Linux и в качестве сервера каталогов Red Hat FreeIPA, обслуживаемые вами подразделения — различные леса Microsoft Active Directory, с которыми у вас нет федерации, но есть возможность подключения к контроллеру домена.
Вам нужно разделить потоки заявок от различных клиентов, а также реализовать различные уровни доступа агентов к очередям — менеджеры должны иметь возможность менять приоритет задач в системе.
Сотрудники вашей компании так же могут ставить задачи в системе для внутренних нужд my-it-company.com , иногда являясь и агентами, и клиентами одновременно (а иногда и нет).
Подготовка
Учетные записи для просмотра LDAP
Если запрещен анонимный просмотр дерева каталогов, то создадим в доменах my-it-company.com , pear.com и macrohard.com учетные записи, прав которых нам хватит, чтобы делать запросы к LDAP (назовем их, например, ldap-bot)
Группы FreeIPA для связи с ролями OTRS
Заведем на FreeIPA три группы пользователей, которые будут синхронизироваться с нашими ролями OTRS, например:
- otrs-sa — члены группы получат доступ к администрированию OTRS, но доступ к очередям давать не будем, чтобы не было желания всегда работать под администратором ),
- otrs-admins — наши менеджеры, имеющие право изменения приоритета заявок) и
- otrs-helpdesk — учетные записи наших специалистов
Атрибут, определяющий принадлежность к компании
Выберем атрибут, по которому будем определять принадлежность к компании.Пусть это будет атрибут «Организация». Например, у вас все получилось организационно и технически, и все пользователи во всех доменах всегда имеют значение в поле «Организация»:
- my-it-company — для сотрудников my-it-company.com
- pear-company — для сотрудников pear.com
- macrohard-company — для сотрудников macrohard.com
Определим атрибуты пользователя, используемый БесплатноIPA
Изучим схему FreeIPA, новые названия атрибутов, которые нам понадобятся для синхронизации (ФИО, логин, телефон и т.п.).
кинит лаптев
ipa user-show --all --raw laptevs
Получим подобный вывод:
dn: uid = laptevs, cn = users, cn = accounts, dc = my-it-company, dc = com
uid: лаптевс
имя: Станислав
сн: Лаптев
сп: Лаптев Станислав
инициалы: SL
домашний каталог: / home / Laptevs
gecos: Лаптев Станислав
логиншелл: / bin / sh
krbcanonicalname: laptevs @ МОЯ-IT-КОМПАНИЯ.COM
krbпринципальное имя: [email protected]
почта: [email protected]
uidnumber: 1344600003
номер: 1344600003
л: Москва
телефон: +7 (863) 999-99-99
мобильный: +7 (999) 999-99-99
ou: My-it-company
название: SysAdm
sshpubkeyfp: SHA256: Yi8mKF + j28 / r2cpxLgIbvZ / Oymt57rhliHKhqBuJxqE laptevs-putty (ssh-rsa)
nsaccountlock: ЛОЖЬ
has_password: ИСТИНА
has_keytab: ИСТИНА
displayName: Лаптев Станислав
ipaSshPubKey: c3NoLXJzYSBBQUFBQjNOemFDMXljMkVBQUFBQkpRQUFBZ0VBNjQ1RTJjSjIvWXVVYm9GNzdZY3hLNzBndm1jWlgrZjBZTVpsaXRQVXNCWFZ0cENtTEtwcjRwK2JEeUdhRzNLTWx1T08ydW9wS0pXRk9mWE83Zzl3OTYzdklQblN3MzVHSmI3VGhhbk1pTXpNUE82T1lQZEY0em14b2k4N 0RGYkdXV2V6aGwzcitsbmFGYTB0dEQ5TkFWRU1Fb3BMdmkzcHZ1UXpyVmNjVlMxamFxY1dNT2ZGUC9TRlVoY1dGeVpZd3Z6eW0wWnZObUZtdjVjVHJGNzJMSXZOdHlsNkZGK2ZaU3ZpS01mcXZ6NStkT2xZZGd5bVVSOG5iaVpkTXZKaTIvbzhjTy84ekpoMFhtSnVRSjJXNEVvYVEvajVTTm8ySjZ6NklXNk I3cFB4Y002a0tJcUp5N08zTkNOcGRrVmVQbEFHbThsOFZDREpVa1RLSjRGOS9mSTZFUkhxVUZwK3p1VENTR1R3ZWlKdXppenFSZWJTTkNiMXh4RldmUitvYzFLdWNZSU5QbTYxRi93YXhOcC9aSG9OK2w1dCtkYWI4cElZSGZzTnNUNWx2RWt4Ukh0bnNyeUxsbWk1ZVdzd3RBbDB3TUpWd1cvUWNJcjhOaVN Ybm96Q3dHWTZCaTQ2L0FGTGVidmFLV0tKRmpKZFgxOFlRVDRpVzZGaE83aW40TGlUamlNaENXbStvbjNQbERYeXZpdkJ1WkFXUldXNEdjbXREVW8rSVhZT2t3MWh4UldqdkJtcExHMVZpMFhPckltbmQybTVZdWk1bHo0b1ZlekFRN1NjYVlrdDBoVEdQU1Z2UHpmVlowYWJCQlpiRmViK1hUV2tpSnBPMHBO T3dodGNadHYrN3RMMnc1OFN3QnhVTUk4NzUzdG5Sc1h2blBXZERqcUsxSDA9IGxhcHRldnMtcHV0dHk = 9 0006
ipaUniqueID: 68d46dac-1d3c-11e9-82fd-0242ac110002
krbExtraData: AAL4VkVcbGFwdGV2c0BPTUlLUk9OLlBSTwA =
krbLastFailedAuth: 201084142Z
krbLastPwdChange: 201
krbLoginFailedCount: 0
krbPassword Срок действия: 201
memberof: cn = otrs-admins, cn = groups, cn = accounts, dc = my-it-company, dc = com
memberof: cn = ipausers, cn = groups, cn = accounts, dc = my-it-company, dc = com
mepManagedEntry: cn = laptevs, cn = groups, cn = accounts, dc = my-it-company, dc = com
objectClass: верхний
objectClass: человек
objectClass: организационное лицо
objectClass: inetorgperson
objectClass: inetuser
objectClass: posixaccount
objectClass: krbprincipalaux
objectClass: krbticketpolicyaux
objectClass: ipaobject
objectClass: ipasshuser
objectClass: ipaSshGroupOfPubKeys
objectClass: mepOriginEntry
dn : uid = laptevs, cn = users, cn = accounts, dc = my-it-company, dc = com
uid : laptevs
givenname : Stanislav
sn : Laptev
сп : Лаптев Станислав
mail : Laptevs @ MY-IT-COMPANY.COM
l : Москва
телефонный номер : +7 (863) 999-99-99
мобильный : +7 (999) 999-99-99
ou : My-it-company
title : SysAdm
Настройка конфигурации OTRS
Файлы конфигурации
- / opt / otrs / — как правило, здесь располагаются файлы системы OTRS
- Kernel / Config.pm — файл конфигурации, который вы редактируете
- Ядро / Конфигурация / По умолчанию.pm — файл со стандартными настройками, его не редактируете, но в нем можно посмотреть все необходимые параметры и комментарии к ним
Настройка агентов
Аутентификация агентов
# ------------------------------------ --------------- #
# Аутентификация агентов #
# ------------------------------------------------- - #
# my-it-company.com Серверная часть LDAP
$ Self -> {AuthModule} = 'Ядро :: System :: Auth :: LDAP';
# Адрес LDAP-сервера
$ Self -> {'AuthModule :: LDAP :: Host'} = 'моя-это-компания.com ';
$ Self -> {'AuthModule :: LDAP :: BaseDN'} = 'dc = my-it-company, dc = com';
$ Self -> {'AuthModule :: LDAP :: UID'} = 'uid';
# Блок нужен, только если запрещен анонимный просмотр структуры каталогов
$ Self -> {'AuthModule :: LDAP :: SearchUserDN'} = 'uid = ldap-bot, cn = users, cn = accounts, dc = my-it-company, dc = com';
$ Self -> {'AuthModule :: LDAP :: SearchUserPw'} = 'пароль-бот!';
# Фильтр запроса к LDAP. Пусть у нас будут только пользователи, имеющие заполненный атрибут "электронная почта"
$ Self -> {'AuthModule :: LDAP :: AlwaysFilter'} = '(mail = *)';
# Добавляем при проблемах с кодировкой
$ Self -> {'AuthModule :: LDAP :: Charset'} = 'utf-8';
$ Self -> {'AuthModule :: UseSyncBackend'} = 'AuthSyncBackend';
# моя-это-компания.com Бэкэнд БД
$ Self -> {AuthModule2} = 'Ядро :: System :: Auth :: DB';
$ Self -> {'AuthModule :: DB :: CryptType2'} = 'sha2';
# ------------------------------------------------- - #
# Аутентификация конечных агентов #
# ------------------------------------------------- - #
Синхронизация агентов (групп LDAP с ролями OTRS)
# ------------------------------ --------------------- #
# Синхронизация аутентификации агента #
# (включить синхронизацию данных агента.после успешного #
# аутентификация) #
# ------------------------------------------------- - #
# my-it-company.com Синхронизация аутентификации LDAP. бэкэнд.
$ Self -> {AuthSyncModule} = 'Ядро :: System :: Auth :: Sync :: LDAP';
$ Self -> {'AuthSyncModule :: LDAP :: Host'} = 'my-it-company.com';
$ Self -> {'AuthSyncModule :: LDAP :: BaseDN'} = 'dc = my-it-company, dc = com';
$ Self -> {'AuthSyncModule :: LDAP :: UID'} = 'uid';
$ Self -> {'AuthSyncModule :: LDAP :: SearchUserDN'} = 'uid = ldap-bot, cn = users, cn = accounts, dc = my-it-company, dc = com';
$ Self -> {'AuthSyncModule :: LDAP :: SearchUserPw'} = 'пароль-бот!';
$ Self -> {'AuthSyncModule :: LDAP :: AlwaysFilter'} = '(mail = *)';
$ Self -> {'AuthSyncModule :: LDAP :: UserSyncMap'} = {
# БД -> LDAP
UserFirstname => 'givenName',
UserLastname => 'sn',
UserEmail => 'почта',
};
$ Self -> {'AuthSyncModule :: LDAP :: AccessAttr'} = 'член';
$ Self -> {'AuthSyncModule :: LDAP :: UserAttr'} = 'DN';
$ Self -> {'AuthSyncModule :: LDAP :: UserSyncRolesDefinition'} = {
# ldap группа
'cn = otrs-sa, cn = groups, cn = accounts, dc = my-it-company, dc = com' => {
# otrs роль
'otrs-sa' => 1,
},
'cn = otrs-admins, cn = groups, cn = accounts, dc = my-it-company, dc = com' => {
'otrs-admins' => 1,
},
'cn = otrs-helpdesk, cn = groups, cn = accounts, dc = my-it-company, dc = com' => {
'helpdesk' => 1,
}
};
$ Self -> {DatabaseUserTable} = 'пользователи';
$ Self -> {DatabaseUserTableUserID} = 'идентификатор';
$ Self -> {DatabaseUserTableUserPW} = 'pw';
$ Self -> {DatabaseUserTableUser} = 'войти';
# ------------------------------------------------- - #
# Синхронизация аутентификации конечных агентов #
# ------------------------------------------------- - #
Если вы решили, какие роли вам не подходят, приведите два примера синхронизации групп LDAP с группой OTRS — упрощенный и с настройкой прав по каждой группе. Альтернативная синхронизация агентов (групп LDAP с указанием OTRS, с помощью прав)
# ------------------------------- -------------------- #
# Синхронизация аутентификации агента #
# (включить синхронизацию данных агента после успешного #
# аутентификация) #
# ------------------------------------------------- - #
# my-it-company.com Синхронизация аутентификации LDAP. бэкэнд.
$ Self -> {AuthSyncModule} = 'Ядро :: System :: Auth :: Sync :: LDAP';
$ Self -> {'AuthSyncModule :: LDAP :: Host'} = 'моя-это-компания.com ';
$ Self -> {'AuthSyncModule :: LDAP :: BaseDN'} = 'dc = my-it-company, dc = com';
$ Self -> {'AuthSyncModule :: LDAP :: UID'} = 'uid';
$ Self -> {'AuthSyncModule :: LDAP :: SearchUserDN'} = 'uid = ldap-bot, cn = users, cn = accounts, dc = my-it-company, dc = com';
$ Self -> {'AuthSyncModule :: LDAP :: SearchUserPw'} = 'пароль-бот!';
$ Self -> {'AuthSyncModule :: LDAP :: AlwaysFilter'} = '(mail = *)';
$ Self -> {'AuthSyncModule :: LDAP :: UserSyncMap'} = {
# БД -> LDAP
UserFirstname => 'givenName',
UserLastname => 'sn',
UserEmail => 'почта',
};
$ Self -> {'AuthSyncModule :: LDAP :: AccessAttr'} = 'член';
$ Self -> {'AuthSyncModule :: LDAP :: UserAttr'} = 'DN';
# AuthSyncModule :: LDAP :: UserSyncGroupsDefinition
# (Если для AuthModule выбран "LDAP" и вы хотите синхронизировать LDAP
# групп в другие группы определите следующее.)
$ Self -> {'AuthSyncModule :: LDAP :: UserSyncGroupsDefinition'} = {
# ldap группа
'cn = otrs-admins, cn = groups, cn = accounts, dc = my-it-company, dc = com' => {
# ОТРС группа
'admin' => {
# разрешение
rw => 1,
move_into => 1,
создать => 1,
примечание => 1,
owner => 1,
Prioriry => 1,
ro => 1,
},
'stats' => {
rw => 1,
move_into => 1,
создать => 1,
примечание => 1,
owner => 1,
Prioriry => 1,
ro => 1,
},
'users' => {
rw => 1,
move_into => 1,
создать => 1,
примечание => 1,
owner => 1,
Prioriry => 1,
ro => 1,
},
'pear-group' => {
rw => 1,
move_into => 1,
создать => 1,
примечание => 1,
owner => 1,
Prioriry => 1,
ro => 1,
},
'macrohard-group' => {
rw => 1,
move_into => 1,
создать => 1,
примечание => 1,
owner => 1,
Prioriry => 1,
ro => 1,
},
},
'cn = otrs-helpdesk, cn = groups, cn = accounts, dc = my-it-company, dc = com' => {
'stats' => {
rw => 1,
move_into => 1,
создать => 1,
примечание => 1,
owner => 1,
Prioriry => 1,
ro => 1,
},
'users' => {
rw => 1,
move_into => 1,
создать => 1,
примечание => 1,
owner => 1,
Prioriry => 1,
ro => 1,
},
}
};
$ Self -> {DatabaseUserTable} = 'пользователи';
$ Self -> {DatabaseUserTableUserID} = 'идентификатор';
$ Self -> {DatabaseUserTableUserPW} = 'pw';
$ Self -> {DatabaseUserTableUser} = 'войти';
# ------------------------------------------------- - #
# Синхронизация аутентификации конечных агентов #
# ------------------------------------------------- - #
Альтернативная упрощенная синхронизация агентов (групповая упрощенная синхронизация агентов (LDAP с ролями OTRS с правами rw)
# ------------------------- -------------------------- #
# Синхронизация аутентификации агента #
# (включить синхронизацию данных агента.после успешного #
# аутентификация) #
# ------------------------------------------------- - #
# my-it-company.com Синхронизация аутентификации LDAP. бэкэнд.
$ Self -> {AuthSyncModule} = 'Ядро :: System :: Auth :: Sync :: LDAP';
$ Self -> {'AuthSyncModule :: LDAP :: Host'} = 'my-it-company.com';
$ Self -> {'AuthSyncModule :: LDAP :: BaseDN'} = 'dc = my-it-company, dc = com';
$ Self -> {'AuthSyncModule :: LDAP :: UID'} = 'uid';
$ Self -> {'AuthSyncModule :: LDAP :: SearchUserDN'} = 'uid = ldap-bot, cn = users, cn = accounts, dc = my-it-company, dc = com';
$ Self -> {'AuthSyncModule :: LDAP :: SearchUserPw'} = 'пароль-бот!';
$ Self -> {'AuthSyncModule :: LDAP :: AlwaysFilter'} = '(mail = *)';
$ Self -> {'AuthSyncModule :: LDAP :: UserSyncMap'} = {
# БД -> LDAP
UserFirstname => 'givenName',
UserLastname => 'sn',
UserEmail => 'почта',
};
$ Self -> {'AuthSyncModule :: LDAP :: AccessAttr'} = 'член';
$ Self -> {'AuthSyncModule :: LDAP :: UserAttr'} = 'DN';
# Включать агента в какие-либо группы с доступом на чтение / запись
# AuthSyncModule :: LDAP :: UserSyncInitialGroups
# (синхронизировать следующую группу с разрешением rw после первоначального создания первого агента
# авторизоваться)
$ Self -> {'AuthSyncModule :: LDAP :: UserSyncInitialGroups'} = [
"пользователи",
];
$ Self -> {DatabaseUserTable} = 'пользователи';
$ Self -> {DatabaseUserTableUserID} = 'идентификатор';
$ Self -> {DatabaseUserTableUserPW} = 'pw';
$ Self -> {DatabaseUserTableUser} = 'войти';
# ------------------------------------------------- - #
# Синхронизация аутентификации конечных агентов #
# ------------------------------------------------- - #
Настройка клиентов
Аутентификация клиентов
# -------------------------------- ------------------- #
# Аутентификация клиента #
# ------------------------------------------------- - #
# Клиентская БД auth.бэкэнд
$ Self -> {'Customer :: AuthModule'} = 'Ядро :: System :: CustomerAuth :: DB';
$ Self -> {'Клиент :: AuthModule :: DB :: Table'} = 'customer_user';
$ Self -> {'Customer :: AuthModule :: DB :: CustomerKey'} = 'логин';
$ Self -> {'Клиент :: AuthModule :: DB :: CustomerPassword'} = 'pw';
# my-it-company.com (Заказчик) LDAP auth. бэкэнд
$ Self -> {'Customer :: AuthModule2'} = 'Ядро :: System :: CustomerAuth :: LDAP';
$ Self -> {'Customer :: AuthModule :: LDAP :: Host2'} = 'моя-это-компания.com ';
$ Self -> {'Клиент :: AuthModule :: LDAP :: BaseDN2'} = 'dc = my-it-company, dc = com';
$ Self -> {'Клиент :: AuthModule :: LDAP :: UID2'} = 'uid';
$ Self -> {'Customer :: AuthModule :: LDAP :: SearchUserDN2'} = 'uid = ldap-bot, cn = users, cn = accounts, dc = my-it-company, dc = com';
$ Self -> {'Customer :: AuthModule :: LDAP :: SearchUserPw2'} = 'пароль-бот!';
$ Self -> {'Клиент :: AuthModule :: LDAP :: AlwaysFilter2'} = '(mail = *)';
# груша LDAP auth. бэкэнд.
$ Self -> {'Customer :: AuthModule3'} = 'Ядро :: System :: CustomerAuth :: LDAP';
$ Self -> {'Customer :: AuthModule :: LDAP :: Host3'} = 'груша.com ';
$ Self -> {'Customer :: AuthModule :: LDAP :: BaseDN3'} = 'DC = груша, DC = com';
$ Self -> {'Клиент :: AuthModule :: LDAP :: UID3'} = 'sAMAccountName';
$ Self -> {'Клиент :: AuthModule :: LDAP :: SearchUserDN3'} = '[email protected]';
$ Self -> {'Customer :: AuthModule :: LDAP :: SearchUserPw3'} = 'пароль-бот?';
# Отфильтруем: (mail = *) - у кого есть почта и (samAccountType = 805306368) - учетная запись пользователя и (! (UserAccountControl: 1.2.840.113556.1.4.803: = 2)) - не отключена
$ Self -> {'Customer :: AuthModule :: LDAP :: AlwaysFilter3'} = '(& (mail = *) (samAccountType = 805306368) (! (UserAccountControl: 1.2.840.113556.1.4.803: = 2))) ';
# macrohard аутентификация LDAP. бэкэнд.
$ Self -> {'Customer :: AuthModule4'} = 'Ядро :: System :: CustomerAuth :: LDAP';
$ Self -> {'Клиент :: AuthModule :: LDAP :: Host4'} = 'macrohard.com';
$ Self -> {'Клиент :: AuthModule :: LDAP :: BaseDN4'} = 'dc = macrohard, dc = com';
$ Self -> {'Клиент :: AuthModule :: LDAP :: UID4'} = 'sAMAccountName';
$ Self -> {'Клиент :: AuthModule :: LDAP :: SearchUserDN4'} = '[email protected]';
$ Self -> {'Customer :: AuthModule :: LDAP :: SearchUserPw4'} = 'бот-пароль !?';
$ Self -> {'Customer :: AuthModule :: LDAP :: AlwaysFilter4'} = '(& (mail = *) (samAccountType = 805306368) (! (UserAccountControl: 1.2.840.113556.1.4.803: = 2))) ';
# ------------------------------------------------- - #
# Настройки аутентификации конечного клиента #
# ------------------------------------------------- - #
Синхронизация клиентов (получение атрибутов клиента из LDAP, связь с компанией OTRS)
# ------------------------- -------------------------- #
# Синхронизация аутентификации клиента #
# ------------------------------------------------- - #
# Клиентская база данных и настройки БД
$ Self -> {CustomerUser} = {
Name => Translatable ('База данных Backend'),
Модуль => 'Ядро :: System :: CustomerUser :: DB',
Params => {
Таблица => 'customer_user',
SearchCaseSensitive => 0,
},
# уникальный идентификатор клиента
CustomerKey => 'логин',
# клиент #
CustomerID => 'customer_id',
CustomerValid => 'valid_id',
CustomerUserListFields => ['first_name', 'last_name', 'email'],
CustomerUserSearchFields => ['логин', 'first_name', 'last_name', 'customer_id'],
CustomerUserSearchPrefix => '*',
CustomerUserSearchSuffix => '*',
CustomerUserSearchListLimit => 250,
CustomerUserPostMasterSearchFields => ['электронная почта'],
CustomerUserNameFields => ['title', 'first_name', 'last_name'],
CustomerUserEmailUniqCheck => 1,
CustomerCompanySupport => 1,
CacheTTL => 60 * 60 * 24,
Карта => [
['UserTitle', Translatable ('Заголовок или приветствие'), 'title', 1, 0, 'var', '', 0, undef, undef],
['UserFirstname', Translatable ('Firstname'), 'first_name', 1, 1, 'var', '', 0, undef, undef],
['UserLastname', Translatable ('Lastname'), 'last_name', 1, 1, 'var', '', 0, undef, undef],
['UserLogin', Translatable ('Username'), 'login', 1, 1, 'var', '', 0, undef, undef],
['UserPassword', Translatable ('Пароль'), 'pw', 0, 0, 'var', '', 0, undef, undef],
['UserEmail', Translatable ('Электронная почта'), 'электронная почта', 1, 1, 'var', '', 0, undef, undef],
['UserCustomerID', Translatable ('CustomerID'), 'customer_id', 0, 1, 'var', '', 0, undef, undef],
['UserPhone', Translatable ('Phone'), 'phone', 1, 0, 'var', '', 0, undef, undef],
['UserFax', Translatable ('Fax'), 'fax', 1, 0, 'var', '', 0, undef, undef],
['UserMobile', Translatable ('Mobile'), 'mobile', 1, 0, 'var', '', 0, undef, undef],
['UserStreet', Translatable ('Street'), 'street', 1, 0, 'var', '', 0, undef, undef],
['UserZip', Translatable ('Zip'), 'zip', 1, 0, 'var', '', 0, undef, undef],
['UserCity', Translatable ('City'), 'city', 1, 0, 'var', '', 0, undef, undef],
['UserCountry', Translatable ('Country'), 'country', 1, 0, 'var', '', 0, undef, undef],
['UserComment', Translatable ('Комментарий'), 'comments', 1, 0, 'var', '', 0, undef, undef],
['ValidID', Translatable ('Valid'), 'valid_id', 0, 1, 'int', '', 0, undef, undef],
],
# выбор по умолчанию
Выбор => {
# UserTitle => {
# 'Г-н.'=> Переводимый (' Мистер '),
# 'Г-жа.' => Переводимый ('Миссис'),
#},
},
};
# my-it-company.com клиент-пользователь серверная часть и настройки ldap
$ Self -> {CustomerUser2} = {
Name => 'AD my-it-company.com',
Модуль => 'Ядро :: System :: CustomerUser :: LDAP',
Params => {
# ldap host
Хост => 'my-it-company.com',
# ldap base dn
BaseDN => 'dc = my-it-company, dc = com',
# область поиска (одна | дополнительная)
SSCOPE => 'sub',
UserDN => 'uid = ldap-bot, cn = users, cn = accounts, dc = my-it-company, dc = com',
UserPw => 'бот-пароль!',
# если вы хотите всегда добавлять один фильтр к каждому запросу ldap, используйте
# этот вариант.е. г. AlwaysFilter => '(mail = *)' или AlwaysFilter => '(objectclass = user)'
AlwaysFilter => '(mail = *)',
SourceCharset => 'utf-8',
Die => 0,
},
# уникальный идентификатор клиента
CustomerKey => 'uid',
# клиент #
CustomerID => 'ou',
CustomerUserListFields => ['uid', 'cn', 'mail'],
CustomerUserSearchFields => ['uid', 'cn', 'mail'],
CustomerUserSearchPrefix => '',
CustomerUserSearchSuffix => '*',
CustomerUserSearchListLimit => 250,
CustomerUserPostMasterSearchFields => ['mail'],
CustomerUserNameFields => ['sn', 'givenname'],
# Настраивает символ для объединения частей имени пользователя клиента.Присоединитесь к единому пространству, если оно не определено.
CustomerUserNameFieldsJoin => '',
# показать клиенту пользователя и клиентские тикеты в клиентском интерфейсе
CustomerUserExcludePrimaryCustomerID => 0,
# добавить фильтр ldap для допустимых пользователей (экспертная настройка)
# CustomerUserValidFilter => '(! (Description = gesperrt))',
# администратор не может изменить настройки клиента
AdminSetPreferences => 1,
# время жизни в кэше в секундах. - кешировать любые запросы ldap
CacheTTL => 0,
Карта => [
['UserTitle', Translatable ('Заголовок или приветствие'), 'title', 1, 0, 'var', '', 1, undef, undef],
['UserFirstname', Translatable ('Firstname'), 'givenname', 1, 1, 'var', '', 1, undef, undef],
['UserLastname', Translatable ('Lastname'), 'sn', 1, 1, 'var', '', 1, undef, undef],
['UserLogin', Translatable ('Имя пользователя'), 'uid', 1, 1, 'var', '', 1, undef, undef],
['UserEmail', Translatable ('Электронная почта'), 'mail', 1, 1, 'var', '', 1, undef, undef],
['UserCustomerID', Translatable ('CustomerID'), 'ou', 0, 1, 'var', '', 1, undef, undef],
['UserPhone', Translatable ('Phone'), 'telephonenumber', 1, 0, 'var', '', 1, undef, undef],
['UserMobile', Translatable ('Mobile'), 'mobile', 1, 0, 'var', '', 1, undef, undef],
],
};
# pear customer user ldap backend and settings
$ Self -> {CustomerUser3} = {
Name => 'AD pear',
Модуль => 'Ядро :: System :: CustomerUser :: LDAP',
Params => {
# ldap host
Host => 'груша.com ',
BaseDN => 'DC = груша, DC = com',
SSCOPE => 'sub',
UserDN => '[email protected]',
UserPw => 'бот-пароль?',
AlwaysFilter => '(& (mail = *) (samAccountType = 805306368) (! (UserAccountControl: 1.2.840.113556.1.4.803: = 2)))',
SourceCharset => 'utf-8',
Die => 0,
},
# уникальный идентификатор клиента
CustomerKey => 'sAMAccountName',
# клиент #
CustomerID => 'компания',
CustomerUserListFields => ['sAMAccountName', 'cn', 'mail'],
CustomerUserSearchFields => ['sAMAccountName', 'cn', 'mail'],
CustomerUserSearchPrefix => '',
CustomerUserSearchSuffix => '*',
CustomerUserSearchListLimit => 250,
CustomerUserPostMasterSearchFields => ['mail'],
CustomerUserNameFields => ['sn', 'givenname'],
# Настраивает символ для объединения частей имени пользователя клиента.Присоединитесь к единому пространству, если оно не определено.
CustomerUserNameFieldsJoin => '',
# показать клиенту пользователя и клиентские тикеты в клиентском интерфейсе
CustomerUserExcludePrimaryCustomerID => 0,
AdminSetPreferences => 1,
CacheTTL => 0,
Карта => [
# примечание: необходимы логин, электронная почта и идентификатор клиента!
# var, frontend, storage, показано (1 = всегда, 2 = lite), required, storage-type, http-link, readonly, http-link-target, link class (es)
['UserTitle', Translatable ('Заголовок или приветствие'), 'title', 1, 0, 'var', '', 1, undef, undef],
['UserFirstname', Translatable ('Firstname'), 'givenname', 1, 1, 'var', '', 1, undef, undef],
['UserLastname', Translatable ('Lastname'), 'sn', 1, 1, 'var', '', 1, undef, undef],
['UserLogin', Translatable ('Имя пользователя'), 'sAMAccountName', 1, 1, 'var', '', 1, undef, undef],
['UserFullLogin', Translatable ('FullUsername'), 'userPrincipalName', 1, 1, 'var', '', 1, undef, undef],
['UserEmail', Translatable ('Электронная почта'), 'mail', 1, 1, 'var', '', 1, undef, undef],
['UserCustomerID', Translatable ('CustomerID'), 'company', 0, 1, 'var', '', 1, undef, undef],
['UserPhone', Translatable ('Phone'), 'phoneNumber', 1, 0, 'var', '', 1, undef, undef],
['UserMobile', Translatable ('Mobile'), 'mobile', 1, 0, 'var', '', 1, undef, undef],
['UserAddress', Translatable ('Address'), 'postaladdress', 1, 0, 'var', '', 1, undef, undef],
['UserOffice', Translatable ('Office'), 'PhysicalDeliveryOfficeName', 1, 0, 'var', '', 1, undef, undef],
['UserDepartment', Translatable ('Department'), 'Department', 1, 0, 'var', '', 1, undef, undef],
['UserComment', Translatable ('Комментарий'), 'description', 1, 0, 'var', '', 1, undef, undef],
],
};
# macrohard клиент пользователь ldap серверная часть и настройки
$ Self -> {CustomerUser4} = {
Name => 'AD macrohard',
Модуль => 'Ядро :: System :: CustomerUser :: LDAP',
Params => {
# ldap host
Хост => 'macrohard.com ',
# ldap base dn
BaseDN => 'dc = macrohard, dc = com',
# область поиска (одна | дополнительная)
SSCOPE => 'sub',
UserDN => '[email protected]',
UserPw => 'бот-пароль !?',
AlwaysFilter => '(& (mail = *) (samAccountType = 805306368) (! (UserAccountControl: 1.2.840.113556.1.4.803: = 2)))',
SourceCharset => 'utf-8',
Die => 0,
},
# уникальный идентификатор клиента
CustomerKey => 'sAMAccountName',
# клиент #
CustomerID => 'компания',
CustomerUserListFields => ['sAMAccountName', 'cn', 'mail'],
CustomerUserSearchFields => ['sAMAccountName', 'cn', 'mail'],
CustomerUserSearchPrefix => '',
CustomerUserSearchSuffix => '*',
CustomerUserSearchListLimit => 250,
CustomerUserPostMasterSearchFields => ['mail'],
CustomerUserNameFields => ['sn', 'givenname'],
# Настраивает символ для объединения частей имени пользователя клиента.Присоединитесь к единому пространству, если оно не определено.
CustomerUserNameFieldsJoin => '',
# показать клиенту пользователя и клиентские тикеты в клиентском интерфейсе
CustomerUserExcludePrimaryCustomerID => 0,
AdminSetPreferences => 1,
CacheTTL => 0,
Карта => [
['UserTitle', Translatable ('Заголовок или приветствие'), 'title', 1, 0, 'var', '', 1, undef, undef],
['UserFirstname', Translatable ('Firstname'), 'givenname', 1, 1, 'var', '', 1, undef, undef],
['UserLastname', Translatable ('Lastname'), 'sn', 1, 1, 'var', '', 1, undef, undef],
['UserLogin', Translatable ('Имя пользователя'), 'sAMAccountName', 1, 1, 'var', '', 1, undef, undef],
['UserFullLogin', Translatable ('FullUsername'), 'userPrincipalName', 1, 1, 'var', '', 1, undef, undef],
['UserEmail', Translatable ('Электронная почта'), 'mail', 1, 1, 'var', '', 1, undef, undef],
['UserCustomerID', Translatable ('CustomerID'), 'company', 0, 1, 'var', '', 1, undef, undef],
['UserPhone', Translatable ('Phone'), 'phoneNumber', 1, 0, 'var', '', 1, undef, undef],
['UserMobile', Translatable ('Mobile'), 'mobile', 1, 0, 'var', '', 1, undef, undef],
['UserAddress', Translatable ('Address'), 'postaladdress', 1, 0, 'var', '', 1, undef, undef],
['UserOffice', Translatable ('Office'), 'PhysicalDeliveryOfficeName', 1, 0, 'var', '', 1, undef, undef],
['UserDepartment', Translatable ('Department'), 'Department', 1, 0, 'var', '', 1, undef, undef],
['UserComment', Translatable ('Комментарий'), 'description', 1, 0, 'var', '', 1, undef, undef],
],
};
Заключение
Как вы увидели, настройка аутентификации и синхронизации аккаунтов в OTRS — это очень просто, но все же надеюсь, что эта статья тем, кто только начинает знакомиться с этой системой.
Что осталось за бортом этой статьи?
- Параллельно с LDAP можно также запустить SSO-авторизацию, что еще упростит жизнь клиентам
- Если есть специалисты по Perl — можно написать собственный backend для подключения к другим информационным системам.
- Сознательно упрощенная конфигурация, например, нет блоков фильтрации по группам LDAP, нет доменных суффиксов, BASE DN, работы с дополнительными атрибутами, работы с LDAP на других портах и много другого
Советы и уточнения приветствуются комментарии, информация об опечатках — в ЛС.
Спасибо за внимание. Отдельное спасибо авторам, чьи материалы по OTRS я использовал много лет назад при знакомстве с этой системой: Turilion, supersuperoleg, wmlex
.
ASA. Настройка перехватывающей аутентификации через AD и LDAP / Хабр
По советам уважаемых хабрачитателей я несколько изменю формат своих публикаций по ASA. Сюда буду писать самое интересное, не утомляя подробным описанием. Полную статью «ASA. Перехватывающая аутентификация »читайте в нашем свежеиспеченном блоге
А я расскажу, используя здесь ASA, аутентифицироваться напрямую в
AD
. Часто возникает задача проверить пользователя до предоставления ему доступа к определенным ресурсам.На ASA такая проверка называется «перехватывающая аутентификация» (сквозной прокси).
Этот сервис использует инфраструктуру ААА (Аутентификация, Авторизация, Учет).
Примечание: в английском слове аутентификация нет слога «фи», который появился в английском «аутентификация» скорее всего из-за созвучия слова «идентификация». Причем, в нашем могучем языке есть и «аутентичность». Без всякого «фи» 🙂 Не попадитесь!
Аутентификация.
Отвечает на вопрос «есть ли такой пользователь». Поиск этого пользователя может производиться как в локальной (ЛОКАЛЬНОЙ) базе данных, так и во внешних (TACACS +, RADIUS, AD по протоколу LDAP).
Настройка сервера LDAP подразумевает указание ввода записи пользователя из AD с помощью которой ASA будет входить в LDAP, тип сервера, «корень» поиска и т.д.
aaa-server {SERVERNAME} протокол ldap
aaa-server {SERVERNAME} ({interface}) хост {IP_SERVER}
ldap-base-dn {основной уровень}
ldap-scope {subtree | onelevel}
ldap-naming-attribute {передаваемый атрибут}
ldap-login-dn {имя пользователя ASA}
ldap-логин-пароль {пароль пользователя ASA}
тип сервера {Microsoft | Novell | OpenLDAP | sun | auto}
Пример:
aaa-server AD (dmz) host 172.16.1.100
ldap-base-dn ou = Работодатели, dc = anticisco, dc = ru
Поддерево ldap-scope
Атрибут именования ldap sAMAccountName
ldap-login-dn cn = ASA, cn = пользователи, dc = anticisco, dc = ru
ldap-логин-пароль ASALDAPPASS
серверного типа microsoft
После того, как настроены сервера, самое время определить, какой трафик нам интересно проверить и не пропускать без аутентификации. На ASA за это отвечает… конечно список доступа, где строчками разрешено указывается такой трафик.Список аутентификационных групп
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, {AUTHACL} {interface} {SERVERNAME}
При этом будут проверяться пакеты, поступающие на вход интерфейса.
Например, хотим проверить весь трафик из локальной сети 10.1.1.0/24 (за интерфейс внутри), идущий во все сети, кроме 172.16.1.0/24:
список доступа AUTH deny ip 10.1.1.0 255.255.255.0 172.16. 1.0 255.255.255.0
список доступа AUTH разрешение ip 10.1.1.0 255.255.255.0 любой
совпадение аутентификации aaa AUTH внутри RAD
А как же спросить у пользователя его логин / пароль? Ведь не может же какой-нибудь пинг инициировать запрос?
Перехватить сессию и спросить логин и пароль ASA может по протоколам http / https, ftp, telnet. Если же необходимо аутентифицировать другой трафик, то нужно сделать 2 телодвижения: пойти куда-нибудь за ASA по одному из указанных протоколов, осуществить свои логин / пароль либо в telnet либо в ftp окошке.Надо учитывать, что такой трафик обязательно должен быть указан в списке доступа для интересного трафика.
Например, мы хотим, чтобы пользователь мог пойти по telnet или http на хосте 1.1.1.1 и его бы спросили логин и пароль. Тогда этот трафик обязательно должен попасть в список доступа. Вот такой не подойдет, т.к. по telnet работать не будет:
список доступа AUTH разрешить tcp любой любой eq 80
список доступа AUTH разрешение udp любое любое
Если данные верны, ASA пропустит ваш трафик.Но только на указанное время. По умолчанию таймауты, скажем так, странные: 5 минут абсолютного времени, таймаут неактивности не отслеживается. Поменять их не только можно, но и нужно:
timeout uauth {HH: MM: SS} {absolute | inactivity}
Пример:
timeout uauth 0: 15: 0 бездействие
тайм-аут uauth 20:00:00 абсолютный
Таким образом, с аутентификацией все просто: если более ничего не указывать, то пользователю, а вернее, ip-адресу его компьютер, будет можно все.
Гораздо более интересный момент — авторизация , то есть ограничение прав пользователя.
Для авторизации по LDAP нам нужен «костыль» — специальная конструкция, которая сопоставит атрибуту LDAP-атрибут RADIUS, который поймет ASA. Такая конструкция называется
ldap attribute-map {MAPNAME}
имя-карты {LDAPATTRIBUTE} {RADUISATTRIBUTE}
значение карты {LDAPATTRIBUTE} {SENDNAME} {TRANSLATENAME}
Пример.Сопоставим атрибуту ipPhone базы AD атрибут IETF-Radius-Filter-Id (список доступа). И опишем, что если в указанном атрибуте мы получим слово «BUHG», то на пользовательской применимости список доступа BUH, который уже написан на ASA:
ldap attribute-map AD
имя-карты ipPhone IETF-Radius-Filter-Id
map-value ipPhone BUHG BUH
Важно: если в указанном атрибуте мы ничего не получили, мы его игнорируем, а если получили слово, не описанное в значениях для данного атрибута, то доступ будет запрещен.Таким образом, администратор AD может влиять на права доступа. Например, может перекрыть интернет неугодному пользователю, не прикасаясь к ASA 🙂
Осталось применить этот список атрибутов в конкретном сервере LDAP
aaa-server {SERVERNAME} ({interface}) host {IP_SERVER}
ldap-attribute-map {MAPNAME}
Пример:
aaa-server AD (dmz) host 172.16.1.100
ldap-attribute-map AD
Приятного авторизования, дорогие хабрачитатели-цисколюбы 🙂
ЗЫ Я сам: «На нормальных ОС это делается половиной команды» 🙂 Так что поможем админам «ненормальных» 🙂
.
LDAP-сервер с PAM авторизацией клиентов
Как настроить LDAP с поддержкой PAM авторизации?
Итак!
1.Запуск LDAP.
Чтобы LDAP сервер заработал, для начала установим несколько пакетов
# apt-get install slapd ldap-utils migrationtools |
Ответим на все заданные при их установке вопросы и затем переконфигурируем slapd, чтобы заставить dpkg задать нам больше вопросов.
Проверим:
#ldapsearch -x -b dc = deb2, dc = test, dc = local # расширенный LDIF # # LDAPv3 # base # фильтр: (objectclass = *) # запрос: ВСЕ # # server.test.local dn: dc = сервер, dc = test, dc = local objectClass: верхний объектный класс: dcObject objectClass: организация о: MyTestOrg постоянного тока: сервер # админ, сервер.test.local dn: cn = admin, dc = server, dc = test, dc = local objectClass: simpleSecurityObject objectClass: организационная роль сп: админ описание: администратор LDAP # результат поиска поиск: 2 результат: 0 Успех # numResponses: 3 # numEntries: 2 |
Всё работает? Да? Если нет ищем где напутали
2.Заполнение базы
быстро импортировать всех пользователей и групп сервера (локальных пользователей и групп) в LDAP, чтобы быстро использовать утилиту миграции.
# сd / usr / share / migrationtools / |
Отредактировать конфиг по умолчанию, он называется migrate_common.ph и заменим следующие параметры:
#vi migrate_common.ph $ DEFAULT_MAIL_DOMAIN = «server.test.local»; $ DEFAULT_BASE = «dc = сервер, dc = test, dc = local»; |
Затем экспортируем данные:
#. / Migrate_group.pl / etc / group /home/my_home/group.ldif #. / Migrate_passwd.pl / etc / passwd /home/my_home/passwd.ldif |
Этот скрипт не создает ldap-узлы Group и People, поэтому нужно самим создать их.Для этого создадим файл ldif в домашнем каталоге с именем people_group.ldif и заполним его данные:
people_group.ldif (не забываем про пустую установку перед каждым dn (читай LDAP мануал) !!!)
dn: ou = люди, dc = server, dc = test, dc = local оу: Люди объектный класс: организационная единица dn: ou = группа, dc = сервер, dc = test, dc = local оу: Группа объектный класс: организационная единица |
Теперь у нас есть списки наших пользователей и групп, сконвертированные в формате LDAP ldif.Импортируем их в нашу LDAP базу.
#ldapadd -x -W -D «cn = admin, dc = server, dc = test, dc = local» -f /home/skuleshov/people_group.ldif #ldapadd -x -W -D «cn = admin, dc = server, dc = test, dc = local» -f /home/skuleshov/group.ldif #ldapadd -x -W -D «cn = admin, dc = server, dc = test, dc = local» -f /home/skuleshov/passwd.ldif |
где:
-x означает, что не использовать sasl
-W будет запрошен пароль администратора LDAP
-D используется для идентификации администратора
-f указывает файл, где ldapadd будет брать данные для добавления
3.Настройка клиентов
Установим следующие пакеты:
# apt-get install libnss-ldap libpam-ldap nscd libnss-ldapd |
libnss-ldap позволит использовать ldap как сервер имен, lippam-ldap pam аутентифицировать пользователей через LDAP и, наконец, nscd — это поиск-демон паролей, групп и хостов, который кеширует результаты, чтобы не запрашивать повторно LDAP каждый раз, когда аутентификация будет пройдена.
Теперь отредактируем конфигурационные файлы и убедимся, что у нас установлены следующие настройки:
#vi /etc/libnss-ldap.conf хост-сервер base dc = server, dc = test, dc = local rootbinddn cn = admin, dc = server, dc = test, dc = local #vi /etc/libnss-ldap.secret пароль #vi / etc / pam_ldap.conf хост-сервер base dc = server, dc = test, dc = local rootbinddn cn = admin, dc = server, dc = test, dc = local #vi /etc/pam_ldap.secret пароль #vi /etc/pam.d/common-account достаточно аккаунта pam_ldap.so необходим аккаунт pam_unix.so # если вы хотите, чтобы домашний каталог пользователя создавался при первом логине # требуется сессия пам_мхомедир.поэтому umask = 0022 skel = / etc / skel / silent #vi /etc/pam.d/common-auth auth достаточный pam_ldap.so требуется авторизация pam_unix.so nullok_secure use_first_pass #vi /etc/pam.d/common-password пароль достаточный pam_ldap.so требуется пароль pam_unix.so nullok obscure min = 4 max = 8 md5 #vi /etc/pam.d/common-session сеанса достаточно pam_ldap.так Требуется сеанс pam_unix.so сеанс опционально pam_foreground.so |
Но на сайте вики есть такое
Создание домашнего каталога при входе в систему
Включите это в /etc/pam.d/common-session, если вы хотите автоматически создавать домашние каталоги при первом входе пользователя в систему:
Требуется сеанс
pam_mkhomedir.so skel = / etc / skel umask = 0022
Не сработало. Сработало в /etc/pam.d/common-account (((
Затем nsswitch, чтобы система использовала возможность переключения настройки аутентификации ldap.
#vim /etc/nsswitch.conf # /etc/nsswitch.conf # # Пример конфигурации функциональности переключателя службы имен GNU. # Если у вас установлены пакеты `glibc-doc-reference ‘и ʻinfo’, попробуйте: # ʻinfo libc «Name Service Switch» ‘для получения информации об этом файле. пароль: совместимость ldap группа: compat ldap тень: compat ldap хостов: файлы dns Сети : файлы протоколы: файлы db услуги: файлы db эфиров: файлы базы данных rpc: файлы базы данных сетевая группа: шек. |
Не забыть перезапустить nscd для обновления кеша !!!
С этими настройками при логине юзер сначала необходимо залогиниться как локальный пользователь.Если совпадение имен не найдено, запуск аутентификации с ldap сервера.
Полезные статьи:
https://wiki.debian.org/LDAP/PAM
https://wiki.debian.org/LDAP/NSS
.
ASA 8.0: Настройка проверки подлинности LDAP для пользователей WebVPN
Содержание
Введение
Предварительные условия
Общие сведения
Настройка аутентификации LDAP
ASDM
Интерфейс командной строки
Мультидоменный поиск (дополнительно)
Проверка
Проверка с помощью ASDM
Проверка в интерфейсе командной строки
Поиск и устранение неполадок
Дополнительные сведения
Этот документ иллюстрирует порядок настройки устройств адаптивной защиты Cisco (ASA) для использования сервера LDAP при аутентификации пользователей WebVPN.Сервер LDAP в этом примере — Microsoft Active Directory. Настройка выполняется посредством Менеджера устройств адаптивной защиты (ASDM) 6.0 (2) на устройстве ASA, работающем под управлением версии ПО 8.0 (2).
Примечание. В этом примере аутентификации по протоколу LDAP настраивается для пользователей WebVPN, но эта конфигурация может сообщить и для других видов удаленного доступа. Достаточно назначить группу сервера AAA желаемому профилю подключения (группенелей), как это будет туннелировать.
Требуется базовая конфигурация VPN. В данном примере используется WebVPN.
В этом примере ASA обращается к серверу LDAP для проверки идентификационных данных пользователей, аутентификация которых производится. Это работает иным образом, как протокол аутентификации RADIUS TACACS +. Приведенная последовательность действий показывает общий порядок использования сервера LDAP включает ASA для проверки реквизитов учетной записи пользователя.
Пользователь запускает подключение к устройству ASA.
Устройство ASA настроено для аутентификации пользователя посредством сервера Microsoft Active Directory (AD) / LDAP.
ASA связывается с сервером LDAP с учетными данными (в данном случае admin), настроенными на ASA, и ищет предоставленное имя пользователя. Пользователь admin также получает соответствующие реквизиты для просмотра содержимого Active Directory.Дополнительные сведения о предоставлении привилегий для запросов см. в документе http://support.microsoft.com/?id=320528.
Примечание. Веб-сайт Microsoft по адресу http://support.microsoft.com/?id=320528 находится в ведении стороннего поставщика услуг. Компания Cisco не несет ответственности за его содержимое.
Если имя пользователя найдено, ASA пытается связаться с сервером LDAP с использованием пользовательского интерфейса при входе.
При успешной выполнении второй привязки аутентификация считается пройденной, и ASA обрабатывает атрибуты пользователя.
Примечание. В этом примере атрибуты не используются для каких бы то ни было целей. В документе ASA / PIX: пример конфигурации для назначения клиентов VPN групповой политикой VPN посредством LDAP подробно описана обработка атрибутов LDAP через ASA.
В этом разделе приведены сведения, позволяющие настроить устройство ASA для использования сервера LDAP при аутентификации клиентов WebVPN.
ASDM
Чтобы настроить устройство ASA для взаимодействия с сервером LDAP и выполнения аутентификации клиентов WebVPN, выполните следующие шаги в ASDM:
Выберите Конфигурация> VPN для удаленного доступа> Настройка AAA> Группы серверов AAA (Конфигурация> VPN для удаленного доступа> Настройка AAA> Группы серверов AAA).
Рядом со списком Группы серверов AAA (Группы серверов AAA) выбрать Добавить (Добавить).
Укажите имя новой группы серверов AAA и в качестве протокола LDAP .
Убедитесь, что новая группа выбрана в верхней области, и нажмите кнопку Добавьте (Добавить) рядом с областью Серверов в Выбранной группе (Серверы в выбранной группе).
Укажите сведения о конфигурации сервера LDAP. Последующий снимок экрана показывает пример конфигурации.Ниже поясня многие параметры конфигурации.
Имя интерфейса (Имя интерфейса) — интерфейс, который устройство ASA должно использовать для обращения к серверу LDAP.
Имя сервера или IP-адрес (Имя или IP-адрес сервера) — адрес, которое устройство ASA должно использовать для обращения к серверу LDAP.
Server Type (Тип сервера) — тип сервера LDAP, например Microsoft.
Base DN (Базовое отличительное имя) — местоположение в иерархии LDAP, с которого должен начинать поисковый сервер.
Scope (Рамки) — рамки поиска в иерархии LDAP, подлежащего сервером.
Атрибут именования (Атрибут именования) — атрибут (или атрибуты) относительного отличительного имени, однозначно определяющий запись на сервере LDAP. Атрибут по умолчанию в Microsoft Active Directory — sAMAccountName .Другие часто используемые атрибуты: CN, UID и userPrincipalName.
Login DN (Отличительное имя входа) — отличительное имя с достаточными полномочиями для поиска, чтения и указания пользователей на сервере LDAP.
Пароль для входа (Пароль для входа) — пароль учетной записи отличительного имени.
Карта атрибутов LDAP (Карта атрибутов LDAP) — карта, используемая для ответов от этого сервера.В документе ASA / PIX: пример конфигурации для назначения клиентов VPN групповая политика VPN посредством LDAP более подробно описана настройка карт атрибутов LDAP.
После настройки группы серверов AAA и добавления в нее сервера необходимо настроить профиль подключения (группу туннелирования) для использования новой конфигурации AAA. Выберите Конфигурация> VPN для удаленного доступа> Бесклиентный доступ к VPN через SSL> Профили подключения (Конфигурация> VPN для удаленного доступа> Доступ по бесклиентской сети VPN на основе SSL> Профили подключений).
Выберите профиль подключения (группу туннелирования), для которого необходимо настроить AAA, нажмите Edit (Изменить).
В разделе Аутентификация (Аутентификация) выберите группу серверов LDAP, созданную ранее.
Интерфейс командной строки
Чтобы настроить устройство ASA для взаимодействия с сервером LDAP и выполнения аутентификации клиентов WebVPN, выполните следующие шаги в интерфейсе командной строки:
ciscoasa # настроить терминал ! --- Настройте группу серверов AAA. ciscoasa (config) # aaa-server LDAP_SRV_GRP протокол ldap ! --- Настройте сервер AAA. ciscoasa (config-aaa-server-group) # aaa-server LDAP_SRV_GRP (внутри) хост 192.168.1.2 ciscoasa (config-aaa-server-host) # ldap-base-dn dc = ftwsecurity, dc = cisco, dc = com ciscoasa (config-aaa-server-host) # ldap-login-dn cn = admin, cn = users, dc = ftwsecurity, dc = cisco, dc = com ciscoasa (config-aaa-server-host) # ldap-login-password ********** ciscoasa (config-aaa-server-host) # ldap-атрибут именования sAMAccountName ciscoasa (config-aaa-server-host) # поддерево ldap-scope ciscoasa (config-aaa-server-host) # тип сервера microsoft ciscoasa (config-aaa-server-host) # выход ! --- Настройте туннельную группу для использования новой настройки AAA. ciscoasa (config) # туннельная группа ExampleGroup2 general-att ciscoasa (config-tunnel-general) # группа-сервера-аутентификации LDAP_SRV_GRP
Мультидоменный поиск (дополнительно)
Это необязательный этап. ASA в настоящее время не поддерживает механизм перенаправления LDAP для мультидоменного поиска (идентификатор ошибки Cisco CSCsj32153). Мультидоменный поиск в режиме сервера глобального каталога. Для выполнения мультидоменного поиска нужно настроить сервер AD в режиме сервера глобального каталога.Обычно при этом следующие следующие ключевые параметры записи сервера LDAP в ASA. Принципиально важно использовать значение ldap-name-attribute, уникальное в пределах дерева каталогов.
порт сервера 3268 поддерево ldap-scope ldap-атрибут именования userPrincipalName
Этот раздел служит для проверки работоспособности вашей конфигурации.
Проверка в ASDM
Проверьте конфигурацию LDAP кнопкой Test (Проверка) на настройках групп серверов AAA.Эта кнопка позволяет после указания пользователя и отправить пароль проверочный запрос аутентификации на сервере LDAP.
Выберите Конфигурация> VPN для удаленного доступа> Настройка AAA> Группы серверов AAA (Конфигурация> VPN для удаленного доступа> Настройка AAA> Группы серверов AAA).
Выберите необходимую группу серверов AAA в верхней области.
В нижней области сервера AAA, необходимо проверить.
Справа от нее Test (Проверить).
В появившемся окне выберите переключатель Authentication (Аутентификация) и укажите реквизиты аутентификации, которые необходимо проверить. По окончании нажмите ОК .
После того, как устройство ASA обратится к серверу LDAP, появится сообщение об успешном выполнении операции или ошибке.
Проверка в интерфейсе командной строки
Для проверки настроек AAA можно использовать команду test в интерфейсе командной строки.На сервере AAA устанавливается проверочный запрос, а результат появляется в внутренней строке.
ciscoasa # проверка аутентификации aaa-сервера LDAP_SRV_GRP хост 192.168.1.2 имя пользователя kate пароль cisco123 ИНФОРМАЦИЯ: попытка проверки подлинности на IP-адрес <192.168.1.2> (тайм-аут: 12 секунд) ИНФОРМАЦИЯ: аутентификация прошла успешно
В случае сомнений относительно текущей строки отличительного имени (DN) можно проверить строку DN пользовательского объекта, введенную команду dsquery на сервере Windows Active Directory из командной строки.
C: \ Documents and Settings \ Administrator> пользователь dsquery -samid kate ! --- Запрашивает в Active Directory идентификатор samid "kate" "CN = Кейт Остин, CN = Пользователи, DC = ftwsecurity, DC = cisco, DC = com"
Команда debug ldap 255 помогает диагностировать проблемы аутентификации в этой сценарии. Эта команда позволяет выполнять отладку LDAP и контролировать процесс подключения ASA к серверу LDAP. В выходных данных показано подключение ASA к серверу LDAP в соответствии с общим описанием в разделе Общие сведения настоящего документа.
Этот отладки показывает успешную аутентификацию журнала:
ciscoasa # отладка ldap 255 [7] Начало сеанса [7] Новый сеанс запроса, контекст 0xd4b11730, reqType = 1 [7] Волокно запущено [7] Создание контекста LDAP с uri = ldap: //192.168.1.2: 389 [7] Подключитесь к серверу LDAP: ldap: //192.168.1.2: 389, статус = Успешно [7] defaultNamingContext: value = DC = ftwsecurity, DC = cisco, DC = com [7] supportedLDAPVersion: value = 3 [7] supportedLDAPVersion: value = 2 [7] supportedSASLMechanisms: value = GSSAPI [7] supportedSASLMechanisms: value = GSS-SPNEGO [7] supportedSASLMechanisms: value = EXTERNAL [7] supportedSASLMechanisms: value = DIGEST-MD5 ! --- ASA подключается к серверу LDAP как администратор для поиска kate. [7] Привязка от имени администратора [7] Выполнение простой аутентификации для администратора на 192.168.1.2 [7] Поиск LDAP: Базовое DN = [dc = ftwsecurity, dc = cisco, dc = com] Фильтр = [sAMAccountName = kate] Область действия = [SUBTREE] [7] DN пользователя = [CN = Кейт Остин, CN = Пользователи, DC = ftwsecurity, DC = cisco, DC = com] [7] Обращение к серверу Active Directory 192.168.1.2 [7] Чтение политики паролей для Кейт, DN: CN = Kate Austen, CN = Users, DC = ftwsecurity, DC = cisco, DC = com [7] Считывание неверного пароля, счетчик 1 ! --- ASA связывается с сервером LDAP как kate для проверки пароля. [7] Привязка как пользователь [7] Выполнение простой аутентификации для kate на 192.168.1.2 [7] Проверка политики паролей для пользователя kate [7] Связывание с правами администратора [7] Выполнение простой аутентификации для администратора на 192.168.1.2 [7] Аутентификация для Кейт на 192.168.1.2 прошла успешно. [7] Получение атрибутов пользователя с сервера 192.168.1.2 [7] Полученные атрибуты: [7] objectClass: value = top [7] objectClass: значение = человек [7] objectClass: value = organizationPerson [7] objectClass: значение = пользователь [7] cn: value = Кейт Остин [7] sn: value = Остин [7] givenName: value = Кейт [7] visibleName: value = CN = Кейт Остин, CN = Пользователи, DC = ftwsecurity, DC = Cisco, DC = com [7] instanceType: value = 4 [7] whenCreated: значение = 20070815155224.0Z [7] whenChanged: значение = 20070815195813.0Z [7] displayName: value = Кейт Остин [7] uSNCreated: значение = 16430 [7] memberOf: value = CN = Castaways, CN = Users, DC = ftwsecurity, DC = cisco, DC = com [7] memberOf: value = CN = Сотрудники, CN = Пользователи, DC = ftwsecurity, DC = cisco, DC = com [7] uSNChanged: значение = 20500 [7] name: value = Кейт Остин [7] objectGUID: значение = ..z ... yC.q0 ..... [7] userAccountControl: значение = 66048 [7] badPwdCount: значение = 1 [7] codePage: value = 0 [7] countryCode: value = 0 [7] badPasswordTime: value = 128321799570937500 [7] lastLogoff: значение = 0 [7] lastLogon: значение = 128321798130468750 [7] pwdLastSet: value = 128316667442656250 [7] primaryGroupID: значение = 513 [7] objectSid: value =............ Q..p .. *. P? E.Z ... [7] accountExpires: value = 9223372036854775807 [7] logonCount: value = 0 [7] sAMAccountName: value = kate [7] sAMAccountType: value = 805306368 [7] userPrincipalName: value = [email protected] [7] objectCategory: значение = CN = Человек, CN = Схема, CN = Конфигурация, DC = ftwsecurity, DC = cisco, DC = com [7] dSCorePropagationData: значение = 20070815195237.0Z [7] dSCorePropagationData: значение = 20070815195237.0Z [7] dSCorePropagationData: значение = 20070815195237.0Z [7] dSCorePropagationData: значение = 16010108151056.0Z [7] Выход волокна Tx = 685 байт Rx = 2690 байт, статус = 1 [7] Конец сеанса
Этот журнал отладки показывает ошибку аутентификации из-за неверного пароля:
ciscoasa # отладка ldap 255 [8] Начало сеанса [8] Новый сеанс запроса, контекст 0xd4b11730, reqType = 1 [8] Волокно запущено [8] Создание контекста LDAP с uri = ldap: //192.168.1.2: 389 [8] Подключитесь к серверу LDAP: ldap: //192.168.1.2: 389, статус = Успешно [8] defaultNamingContext: value = DC = ftwsecurity, DC = cisco, DC = com [8] supportedLDAPVersion: value = 3 [8] supportedLDAPVersion: value = 2 [8] supportedSASLMechanisms: value = GSSAPI [8] supportedSASLMechanisms: value = GSS-SPNEGO [8] supportedSASLMechanisms: value = EXTERNAL [8] supportedSASLMechanisms: value = DIGEST-MD5 ! --- ASA подключается к серверу LDAP как администратор для поиска kate. [8] Привязка от имени администратора [8] Выполнение простой аутентификации для администратора на 192.168.1.2 [8] Поиск LDAP: Базовое DN = [dc = ftwsecurity, dc = cisco, dc = com] Фильтр = [sAMAccountName = kate] Область действия = [SUBTREE] [8] DN пользователя = [CN = Кейт Остин, CN = Пользователи, DC = ftwsecurity, DC = cisco, DC = com] [8] Обращение к серверу Active Directory 192.168.1.2 [8] Чтение политики паролей для Кейт, DN: CN = Кейт Остин, CN = Пользователи, DC = ftwsecurity, DC = cisco, DC = com [8] Считывание неверного пароля, счетчик 1 ! --- ASA пытается выполнить привязку от имени kate, но пароль неверен. [8] Привязка как пользователь [8] Выполнение простой аутентификации для kate на 192.168.1.2 [8] Простая аутентификация для Кейт вернул код (49) Неверные учетные данные [8] Связывание с правами администратора [8] Выполнение простой аутентификации для администратора на 192.168.1.2 [8] Считывание неверного пароля для Кейт, DN: CN = Kate Austen, CN = Users, DC = ftwsecurity, DC = cisco, DC = com [8] Получено badPwdCount = 1 для пользователя kate. [8] badPwdCount = 1 до, badPwdCount = 1 после для Кейт [8] сейчас: Вт, 28 августа 2007 г. 15:33:05 GMT, последний сеанс: среда, 15 августа 2007 г. 15:52:24 GMT, дельта = 1122041, maxage = 3710851 сек [8] Неверный пароль для Кейт [8] Выход волокна Tx = 788 байтов Rx = 2904 байта, статус = -1 [8] Конец сеанса
Этот журнал отладки показывает ошибку аутентификации из-за отсутствия пользователя на сервере LDAP:
ciscoasa # отладка ldap 255 [9] Начало сеанса [9] Новый сеанс запроса, контекст 0xd4b11730, reqType = 1 [9] Волокно запущено [9] Создание контекста LDAP с uri = ldap: // 192.168.1.2: 389 [9] Подключитесь к серверу LDAP: ldap: //192.168.1.2: 389, статус = Успешно [9] defaultNamingContext: value = DC = ftwsecurity, DC = cisco, DC = com [9] supportedLDAPVersion: value = 3 [9] supportedLDAPVersion: value = 2 [9] supportedSASLMechanisms: value = GSSAPI [9] supportedSASLMechanisms: value = GSS-SPNEGO [9] supportedSASLMechanisms: value = EXTERNAL [9] supportedSASLMechanisms: value = DIGEST-MD5 ! --- Пользователь mikhail не найден. [9] Привязка от имени администратора [9] Выполнение простой аутентификации для администратора на 192.168.1.2 [9] Поиск LDAP: Базовое DN = [dc = ftwsecurity, dc = cisco, dc = com] Фильтр = [sAMAccountName = mikhail] Область действия = [SUBTREE] [9] Запрошенные атрибуты не найдены [9] Выход волокна Tx = 256 байтов Rx = 607 байтов, статус = -1 [9] Конец сеанса
.