Основные права
Основные права, которые можно настроить в группе, ограничивающие действия агентов:
Авторизация доменных пользователей на php » backnet — ответы на простые вопросы и не очень
Иногда, для корпоративных порталов, актуально не заводить отдельный список пользователей, а производить авторизацию через контроллер доменов.
Для этого в PHP есть набор специальных функций
Облегчённый протокол доступа к каталогам (LDAP)
.
В принципе там все написано, но рассмотрим простой пример. Надеюсь это будет полезно для тех, кто не особо знаком с особенностями работы контроллера домена. Здесь не будем рассматривать то, как передавать информацию серверу, просто предположим, что в POST запросе прилетают имя пользователя (username) и пароль (password)
Итак, код с комментариями:
1. Набор опций (конфиг, так сказать)
Если с хостом и портом в принципе все понятно, то я бы пояснил эти две непонятные строчки.
Русские названия специально приведены т.к. в DC (domain controller) так вполне можно называть объекты.
(в связи с этим на забываем про функцию
iconv
. Может пригодится.
На этом этапе структуру DC можно рассматривать как набор папок с файлами в файловой системе. Папки вложены, и так формируется пути, которые мы видим. максимальная вложенность – слева. Теперь, как он строится:
cn – это объект (файл). Пользователь, группа.
ou – это папка, конечно все можно сложить с одну папку, но в большом хаосе обычно сложно ориентироваться.
dc – имя домена. т.к. на одном сервере может быть несколько доменов. Корневая папка.
т.е в этом примере мы будем авторизовывать пользователей, которые лежат в папке (и подпапках) “midomain.ru -> Пользователи” и принадлежат к группе “Портал”, лежащей в папке “mydomain.ru -> Группы”
Ну и последнее –
sAMAccountName
– имя пользователя до собачки (
user
@mydomain.ru)
2. И собственно набор функций и условий:
<?php //Если прилетели данные пользователя, то проверить его используя LDAP if(isset($_POST[‘username’])&& isset($_POST[‘password’])) { $username = $_POST[‘username’]; $login=$_POST[‘login’].$domain; $password=$_POST[‘password’]; //подсоединяемся к LDAP серверу $ldap=ldap_connect($ldaphost,$ldapport)ordie(“Cant connect to LDAP Server”); //Включаем LDAP протокол версии 3 ldap_set_option($ldap,LDAP_OPT_PROTOCOL_VERSION,3); if($ldap) { // Пытаемся войти в LDAP при помощи введенных логина и пароля $bind=ldap_bind($ldap,$login,$password); if($bind)//логин и пароль подошли! { // Проверим, является ли пользователь членом указанной группы. $result=ldap_search($ldap,$base,“(&(memberOf=”.$memberof.“)(“.$filter.$username.“))”); // Получаем количество результатов предыдущей проверки $result_ent=ldap_get_entries($ldap,$result); } else { die(‘Вы ввели неправильный логин или пароль. попробуйте еще раз’); } } // Если пользователь найден, т.е. результатов больше 0 (1 должен быть) if($result_ent[‘count’]!=0) { // тут код для запоминания авторизайии exit; } else { die(‘К сожалению, вам доступ закрыт’); } } ?> |
Тут все просто, почти до безобразия.
ldap_connect
– подключаемся к серверу
ldap_bind
– авторизуемся на сервере (в принципе возможно уже и этого достаточно, но… )
ldap_search
– ищем этого пользователя по условию, что он является членом группы.
И пару слов про сквозную авторизацию – этот вариант не рассматриваю, т.к. передавать пароль серверу умеет только ИЕ (вроде как) и только при определенных настройках. Безопасность все-таки.
Так же хорошо бы пароль шифровать, если он летает по инету.
Атрибут, определяющий принадлежность к компании
Аутентификация с использованием базы данных
Стандартный способ аутентификации и авторизации агентов и клиентов — это база данных.
Например, настройки аутентификации агентов, используя базу данных, выглядит так:
$Self->{'AuthModule'} = 'Kernel::System::Auth::DB';
Клиентов:
Безопасность
Для того, чтобы пароли не передавались в открытом виде, доступ к статистике нужно предоставить по
Группы freeipa для синхронизации с ролями otrs
Заведем на FreeIPA три группы пользователей, которые будут синхронизироваться с нашими ролями OTRS, например:
Дополнительные права
Также существуют и дополнительные права, отображение которых можно включить в настройках (System::Permission):
Рассмотрим это более подробно:
Исходное положение
- Свежеустановленная Ubuntu Server 16.04. Имя сервера ubuntuadmember, запись в DNS присутствует.
- Установленные пакеты Apache и Perl (включая модуль Perl для Apache)
- В Apache настроено исполнение perl-скриптов
- Все перечисленные ниже команды выполняются от учетки root, чтобы не плодить постоянных sudo
Клиенты, очереди, агенты и группы
После установки OTRS у вас сразу будут доступны:
Настраиваем подключение к ad
Исходные данные про AD:
- Домен, допустим, с названием lab.local
- Контроллер домена 1 с названием dc1.lab.local
- Контроллер домена 2 с названием dc2.lab.local
Необходимо отредактировать файл /etc/krb5.conf и добавить строки в следующие блоки:
Настроим apache на авторизацию
Предупреждение. Следующие настройки включают авторизацию Kerberos для всего дефолтного сайта. Если нужно включить более тонко, курите мануалы.
Отредактируем файл /etc/apache2/sites-enabled/000-default.conf и добавим в него перед </VirtualHost> следующий блок:
Роли и компании
Так же мы расширим возможности авторизации, добавив роли и компании:
Связь asterisk с active directory
Вы можете ознакомиться еще с несколькими статьями по связи Asterisk c AD в моём блоге:
- Asterisk и Openfire/Jabber: XMPP сообщение о входящем звонке с именем и отделом из Active Directory
- Кнопка звонка в Miranda NG через Asterisk AMI
Создаем учетную запись компьютера в ad
Исходные данные
Предупреждение. В иных случаях могут потребоваться дополнительные действия, и я не знаю, какие именно.
Стандартные группы
После установки системы вы увидите три созданные группы:
Учетные записи для просмотра ldap
Если запрещен анонимный просмотр дерева каталогов, то создадим в доменах
Заключение
Как вы увидели, настройка аутентификации и синхронизации аккаунтов в OTRS — это очень просто, но все же надеюсь, что эта статья поможет тем, кто только начинает знакомиться с этой системой.
Что осталось за бортом этой статьи?
Советы и уточнения приветствуются комментариях, информация об опечатках — в ЛС.
https://www.youtube.com/watch?v=iQqKOuGVXNo
Спасибо за внимание. Отдельное спасибо авторам, чьи материалы по OTRS я использовал много лет назад при знакомстве с этой системой: Turilion, supersuperoleg, wmlex