Доступ к агентскому интерфейсу при использовании SSO

Обсуждение вопросов и решений

Модератор: ykolesnikov

Ответить
pgandalipov
OTRS Новобранец
Сообщения: 7
Зарегистрирован: 27 окт 2010, 10:22
Контактная информация:

Доступ к агентскому интерфейсу при использовании SSO

Сообщение pgandalipov » 27 окт 2010, 10:42

Доброго времени суток,

После настройки "Single sign on" (на Apache2::AuthenNTLM) для входа и агентов и клиентов (все данные хранятся в AD) необходимо закрыть доступ к агентскому интрефейсу всем, кроме одной группы доступа в AD. Может кто-нибудь подсказать как это может быть реализовано?

Были сделаны следующие настройки в /etc/apache2/conf.d/otrs.conf

Код: Выделить всё

<Location /otrs>
  PerlAuthenHandler Apache2::AuthenNTLM
  AuthType ntlm,basic
  AuthName Basic
  require valid-user
  PerlAddVar ntdomain "DOMAIN dc bdc"
  PerlSetVar defaultdomain DOMAIN
  PerlSetVar splitdomainprefix 1
</Location>
и в Config.pm

Код: Выделить всё


 $Self->{'AuthModule'} = 'Kernel::System::Auth::HTTPBasicAuth';
 $Self->{AgentPanelLoginURL} = 'http://otrs-server/otrs/no_sso_login_possible.html';
 $Self->{AgentPanelLogoutURL} = 'http://otrs-server/otrs/logout.html';


$Self->{'Customer::AuthModule'} = 'Kernel::System::CustomerAuth::HTTPBasicAuth';
$Self->{CustomerPanelLoginURL} = 'http://otrs-server/otrs/no_sso_login_possible.html';
$Self->{CustomerPanelLogoutURL} = 'http://otrs-server/otrs/logout.html';

Когда авторизация была настроена только с использованием LDAP(но каждый раз при входе приходилось вводить пароль), то проблема ограничения доступа решалась следующими строчками в Config.pm


Код: Выделить всё

    # Check if the user is allowed to auth in a posixGroup
    # (e. g. user needs to be in a group OTRS_Agents to use otrs)
    $Self->{'AuthModule::LDAP::GroupDN'} = 'cn=grAdmins,ou="AccessGroups",dc=domain';
    $Self->{'AuthModule::LDAP::AccessAttr'} = 'member';
    $Self->{'AuthModule::LDAP::UserAttr'} = 'DN';
Сейчас на форуме нашел пост ULiX-а об интерграции с Windows 2008 viewtopic.php?f=2&t=21&p=154,подумалось может ли мне помочь UserSyncGroupsDefinition.
Хотя он синхронизирует роли только для одной группы, и не понятно что будет со всеми остальными.
Вообщем интересны любые мысли по этому поводу.

Сейчас использую OTRS 2.4.7 на Ubuntu server 10.04.

alexus
OTRS Гуру
Сообщения: 5192
Зарегистрирован: 20 сен 2010, 18:17
Откуда: Москва
Благодарил (а): 92 раза
Поблагодарили: 82 раза

Re: Доступ к агентскому интерфейсу при использовании SSO

Сообщение alexus » 27 окт 2010, 11:12

Почитайте тут.
С уважением,
Алексей Юсов

Prod: OTRS CE ITSM 6.0.28 on CentOS 7 Apache 2.4 MariaDB 10.4.13 + Radiant Customer Portal

Radiant System OTRS Intergrator RU
Группа OTRS Community в Teleram
Хотите внедрить OTRS? Спросите меня как!

pgandalipov
OTRS Новобранец
Сообщения: 7
Зарегистрирован: 27 окт 2010, 10:22
Контактная информация:

Re: Доступ к агентскому интерфейсу при использовании SSO

Сообщение pgandalipov » 28 окт 2010, 05:10

Прочитал, но эта тема не решает моей проблемы.

Если я комментирую строчку:

Код: Выделить всё

$Self->{'AuthSyncModule::LDAP::UserSyncInitialGroups'} = [ 'admin', 'users', 'customers', 'faq' ];
то все равно клиент, даже без прав, может иметь доступ к агентскому интерфейсу.

Клиенты и агенты находятся у меня в одном контейнере в AD. Агенты тоже могут клиентами по какой-нибудь заявке.
Проблема в двух словах заключается в том, что при авторизации с SSO не отрабатывается строка "AuthModule::LDAP::GroupDN" в Config.pm.

alexus
OTRS Гуру
Сообщения: 5192
Зарегистрирован: 20 сен 2010, 18:17
Откуда: Москва
Благодарил (а): 92 раза
Поблагодарили: 82 раза

Re: Доступ к агентскому интерфейсу при использовании SSO

Сообщение alexus » 28 окт 2010, 13:26

Значит в AD их надо разнести по логике работы OTRS
С уважением,
Алексей Юсов

Prod: OTRS CE ITSM 6.0.28 on CentOS 7 Apache 2.4 MariaDB 10.4.13 + Radiant Customer Portal

Radiant System OTRS Intergrator RU
Группа OTRS Community в Teleram
Хотите внедрить OTRS? Спросите меня как!

pgandalipov
OTRS Новобранец
Сообщения: 7
Зарегистрирован: 27 окт 2010, 10:22
Контактная информация:

Re: Доступ к агентскому интерфейсу при использовании SSO

Сообщение pgandalipov » 28 окт 2010, 20:10

Нельзя низводить AD до базы данных для OTRS. У элементов существет определенный порядок местоположения, и менять его смысла нет. Не хочется придумывать костыль, чтобы напоротся на него в тот момент, когда забудешь о его существовании.

ULiX
OTRS Новобранец
Сообщения: 45
Зарегистрирован: 12 окт 2010, 08:56
Контактная информация:

Re: Доступ к агентскому интерфейсу при использовании SSO

Сообщение ULiX » 29 окт 2010, 02:05

Что-то я запутался читая всё это...
Одновременно приводятся настройки как для LDAP так и для HTTPBasicAuth авторизации и не понятно, какой тип авторизации используется в конкретный проблемный момент.

Для начала нужно правильно поставить задачу.


1. Какова причина отказа от LDAP авторизации и переход на HTTPBasicAuth?
pgandalipov писал(а):необходимо закрыть доступ к агентскому интрефейсу всем, кроме одной группы доступа в AD.
Так или иначе пользователю придется вводить свои учетные данные, если ты конечно не хочешь выдавать прямые разрешения привилегированным агентам по IP адресу.
Строка
$Self->{'AuthModule::LDAP::GroupDN'} = 'cn=grAdmins,ou="AccessGroups",dc=domain';
не имеет никакой силы при использовании HTTPBasicAuth, хоть комментируй её, хоть нет.

2. Непонятны сделанные выводы:
pgandalipov писал(а):Хотя он синхронизирует роли только для одной группы, и не понятно что будет со всеми остальными.
Это где я такое делаю?
У меня имеется одна группа безопасности AD, в которую включены все агенты, имеющие доступ к интерфейсу агента OTRS. Эта группа указана в параметре:
$Self->{'AuthModule::LDAP::GroupDN'}
И ещё пять групп безопасности для распределения ролей согласно своим обязанностям:

Код: Выделить всё

    $Self->{'AuthSyncModule::LDAP::UserSyncRolesDefinition'} = {
          # ldap groups
          'CN=OTRS_OSIV,OU=ldap,OU=System users,DC=ame,DC=ru' => {
              #'OASUTP' => 0,
              'OSIV' => 1,
              #'PROGRAMMERS' => 0,
          },
          'CN=OTRS_PROGRAMMERS,OU=ldap,OU=System users,DC=ame,DC=ru' => {
              #'OASUTP' => 0,
              #'OSIV' => 0,
              'PROGRAMMERS' => 1,
          },
          'CN=OTRS_OASUTP,OU=ldap,OU=System users,DC=ame,DC=ru' => {
              'OASUTP' => 1,
              #'OSIV' => 0,
              #'PROGRAMMERS' => 0,
          },
          'CN=OTRS_CTD,OU=ldap,OU=System users,DC=ame,DC=ru' => {
              'CTD' => 1,
              #'OASUTP' => 0,
              #'OSIV' => 0,
              #'PROGRAMMERS' => 0,
          },
          'CN=OTRS_BUCHET,OU=ldap,OU=System users,DC=ame,DC=ru' => {
              'BUCHET' => 1,
              #'OASUTP' => 0,
              #'OSIV' => 0,
              #'PROGRAMMERS' => 0,
          },
    };
И созданные в OTRS пять ролей 'BUCHET', 'CTD', 'OASUTP', 'OSIV', 'PROGRAMMERS'.
Для каждой роли настроены права в каждой группе.

Итого имеем.
* Только пользователи в специального группе имеет доступ к интерфейсу агента.

* Если агенту не назначена роль, то он имеет полный доступ к в группах указанных в параметре
$Self->{'AuthSyncModule::LDAP::UserSyncInitialGroups'}
Там имеется либо самый минимум, либо убрать оттуда всё.

* При добавлении агента в группы безопасности ролей права каждой назначенной роли складываются.
Тут правда я не проверял как поведет себя OTRS в ситуации если по одному правилу роль выдается
'OASUTP' => 1,
а по одному правилу правилу забирается
'OASUTP' => 0,
И пользователю назначены обе группы. :D

Ты конечно можешь использовать AuthSyncModule::LDAP::UserSyncGroupsDefinition для синхронизации прав в группа, причем по той же схеме. что и для ролей, т.е. не для одной группы, а для нескольких:

Код: Выделить всё

    $Self->{'AuthSyncModule::LDAP::UserSyncGroupsDefinition'} = {
        # ldap group
        'cn=agent,o=otrs' => {    # Это первая группа безопасности !!!
            # otrs group
            'admin' => {
                # permission
                rw => 1,
                ro => 1,
            },
            'faq' => {
                rw => 0,
                ro => 1,
            },
        },
        'cn=agent2,o=otrs' => {   # Это ВТОРАЯ группа безопасности !!!
            'users' => {
                rw => 1,
                ro => 1,
            },
        }
    };
Обрати внимание на строчку в коде Это ВТОРАЯ группа безопасности !!!

Но меня такой способ синхронизации не устроил.
Каждый раз заходить на сервер, чтобы конфиг подправить, когда нужно расширить или урезать права определенной группы агентов...
Я посчитал, что рациональней иметь под руками роли, правами которых я могу управлять через интерфейс OTRS.

Думаю, этой информации должно хватить, чтобы решить твою проблему. Если что обращайся.
Я не флудер, у меня просто не получаются маленькие посты.

pgandalipov
OTRS Новобранец
Сообщения: 7
Зарегистрирован: 27 окт 2010, 10:22
Контактная информация:

Re: Доступ к агентскому интерфейсу при использовании SSO

Сообщение pgandalipov » 29 окт 2010, 05:59

Спасибо, ULiX за подробный пост по синхронизации ролей и групп.
Сейчас у меня авторизация работает по HTTPBasicAuth c использованием Apache2::AuthenNTLM, все настройки в первом посте.
Как я понимаю: AuthSyncModule работает независимо от AuthModule. Сейчас я пытаюсь найти настройку AuthSyncModule или другого модуля, чтобы ограничить доступ клиентов к агентскому интерфейсу.

Вот все настройки в Config.pm по авторизации агентов и клиентов:

Код: Выделить всё

     # This is an example configuration for using an MS AD backend
    $Self->{'AuthModule'} = 'Kernel::System::Auth::LDAP';
    $Self->{'AuthModule::LDAP::Host'} = '10.50.9.2';
    $Self->{'AuthModule::LDAP::BaseDN'} = 'ou=Комэнерго,dc=ке,dc=ru';
    $Self->{'AuthModule::LDAP::UID'} = 'sAMAccountName';

    # Check if the user is allowed to auth in a posixGroup
    # (e. g. user needs to be in a group OTRS_Agents to use otrs)
  #  $Self->{'AuthModule::LDAP::GroupDN'} = 'cn=grAdmins,ou="Группы доступа",dc=КЕ,dc=ru';
  #  $Self->{'AuthModule::LDAP::AccessAttr'} = 'member';
  #  $Self->{'AuthModule::LDAP::UserAttr'} = 'DN';

    # Bind credentials to log into AD
    $Self->{'AuthModule::LDAP::SearchUserDN'} = 'cn=otrs,cn=Users,dc=КЕ,dc=ru';
    $Self->{'AuthModule::LDAP::SearchUserPw'} = 'some-pass';

   # Now sync data with OTRS DB

    $Self->{'AuthSyncModule'} = 'Kernel::System::Auth::Sync::LDAP';
    $Self->{'AuthSyncModule::LDAP::Host'} = '10.50.9.2';
    $Self->{'AuthSyncModule::LDAP::BaseDN'} = 'ou=Комэнерго,dc=KE, dc=ru';
    $Self->{'AuthSyncModule::LDAP::UID'} = 'sAMAccountName';
    $Self->{'AuthSyncModule::LDAP::SearchUserDN'} = 'cn=otrs,cn=Users,dc=KE,dc=ru';
    $Self->{'AuthSyncModule::LDAP::SearchUserPw'} = 'some-pass';

    $Self->{'AuthSyncModule::LDAP::UserSyncMap'} = {
        # DB -> LDAP
        UserFirstname => 'givenName',
        UserLastname  => 'sn',
        UserEmail     => 'mail',
    };
$Self->{'AuthModule'} = 'Kernel::System::Auth::HTTPBasicAuth';

   $Self->{AgentPanelLoginURL} = 'http://ubunsrv1/otrs/index.pl';
   $Self->{AgentPanelLogoutURL} = 'http://ubunsrv1/otrs/index.pl';


     $Self->{'Customer::AuthModule'} = 'Kernel::System::CustomerAuth::HTTPBasicAuth';

     $Self->{CustomerPanelLoginURL} = 'http://ubunsrv1/otrs/customer.pl';
     $Self->{CustomerPanelLogoutURL} = 'http://ubunsrv1/otrs/customer.pl';

# User sync and authtorization
   # CustomerUser1
  # (customer user ldap backend and settings)
  $Self->{CustomerUser1} = {
    Name => 'LDAP BackEnd',
    Module => 'Kernel::System::CustomerUser::LDAP',
    Params => {
      # ldap host
      Host => '10.50.9.2',
      # ldap base dn
      BaseDN => 'ou=Комэнерго,dc=КЕ, dc=ru',
      # search scope (one|sub)
      SSCOPE => 'one',
      # The following is valid but would only be necessary if the
      # anonymous user does NOT have permission to read from the LDAP tree
      UserDN => 'cn=OTRS, cn=Users, dc=KE, dc=ru',
      UserPw => 'some-pass',
      AlwaysFilter => '',
      SourceCharset => 'utf-8',
      #DestCharset => 'iso-8859-1',
          DestCharset => 'utf-8',
    },
  # customer uniq id
    CustomerKey => 'sAMAccountName',
    # customer #
    CustomerID => 'department',
    CustomerUserListFields => ['sAMAccountName', 'cn', 'mail'],
    CustomerUserSearchFields => ['sAMAccountName', 'cn', 'mail'],
    CustomerUserSearchPrefix => '',
    CustomerUserSearchSuffix => '*',
    CustomerUserSearchListLimit => 250,
    CustomerUserPostMasterSearchFields => ['mail'],
    CustomerUserNameFields => ['givenname', 'sn'],
    Map => [
      # note: Login, Email and CustomerID needed!
      # var, frontend, storage, shown, required, storage-type
      [ 'UserSalutation', 'Title', 'title', 1, 0, 'var' ],
      [ 'UserFirstname', 'Firstname', 'givenname', 1, 1, 'var' ],
      [ 'UserLastname', 'Lastname', 'sn', 1, 1, 'var' ],
      [ 'UserLogin', 'Login', 'sAMAccountName', 1, 1, 'var' ],
      [ 'UserEmail', 'Email', 'mail', 1, 1, 'var' ],
      [ 'UserCustomerID', 'CustomerID', 'department', 0, 1, 'var' ],
        # [ 'UserCustomerIDs', 'CustomerIDs', 'customer_ids', 1, 0, 'var', '', 0 ],
      [ 'UserPhone', 'Phone', 'telephonenumber', 1, 0, 'var' ],
      [ 'UserAddress', 'Address', 'postaladdress', 1, 0, 'var' ],
   ],
  };



При данной конфигурации клиенты успешно заходят на otrs/index.pl и добавляются в список агентов.

JohniGo
OTRS Бывалый
Сообщения: 369
Зарегистрирован: 21 окт 2010, 15:31

Re: Доступ к агентскому интерфейсу при использовании SSO

Сообщение JohniGo » 29 окт 2010, 10:40

Подтверждаю. У меня срабатывает аналогично. При вкючении HTTPBasicAuth для агентов кастомеры тоже могут попадать на index.pl... :(
Пока вижу только вариант отказываться от NTLM для агентови сохранять пароль в браузере...
Автоматизирую бардак.
Послужной список

ULiX
OTRS Новобранец
Сообщения: 45
Зарегистрирован: 12 окт 2010, 08:56
Контактная информация:

Re: Доступ к агентскому интерфейсу при использовании SSO

Сообщение ULiX » 02 ноя 2010, 03:04

Код: Выделить всё

    # Только пользователи LDAP группы OTRSstaff могут пользоваться интерфейсом агента:
    $Self->{'AuthModule::LDAP::GroupDN'} = 'CN=OTRSstaff,OU=ldap,OU=System users,DC=ame,DC=ru';
Неужели этот параметр не решает проблемы?

Ты хочешь перейти на LDAP авторизацию, или хочешь остаться с HTTPBasicAuth и ограничить доступ?

Можно попробовать вот такими настройками апача.

Код: Выделить всё

<Location ~ "(/otrs/index.pl)">
        AuthType Basic
#        AuthzLDAPAuthoritative Off # вырубить авторизацию по лдап (пустить всех)
        AuthName "Otrs Agents"
        AuthBasicProvider ldap
        AuthLDAPURL "ldap://dc.domain.ru:389/ou=Organization,dc=domain,dc=ru?sAMAccountName?sub?(objectclass=person)"
        AuthLDAPBindDN "CN=ldapusers,OU=Ldap,OU=System users,DC=domain,DC=ru"
        AuthLDAPBindPassword "ldapuserspass"
        Require ldap-group "CN=OTRSAgents,OU=System users,DC=domain,DC=ru"
</Location>
В приведенном тобой примере
<Location /otrs>
единый способ авторизации как на
/otrs/index.pl
так и на
/otrs/customer.pl
Я не флудер, у меня просто не получаются маленькие посты.

pgandalipov
OTRS Новобранец
Сообщения: 7
Зарегистрирован: 27 окт 2010, 10:22
Контактная информация:

Re: Доступ к агентскому интерфейсу при использовании SSO

Сообщение pgandalipov » 08 ноя 2010, 11:40

ULiX писал(а):

Код: Выделить всё

    # Только пользователи LDAP группы OTRSstaff могут пользоваться интерфейсом агента:
    $Self->{'AuthModule::LDAP::GroupDN'} = 'CN=OTRSstaff,OU=ldap,OU=System users,DC=ame,DC=ru';
Неужели этот параметр не решает проблемы?
При переходе на HTTPBasicAuth данный параметр никак не влияет на авторизацию.
ULiX писал(а): Ты хочешь перейти на LDAP авторизацию, или хочешь остаться с HTTPBasicAuth и ограничить доступ?
Хочу остаться на HTTPBasicAuth и ограничить доступ.



ULiX писал(а):
Можно попробовать вот такими настройками апача.

Код: Выделить всё

<Location ~ "(/otrs/index.pl)">
        AuthType Basic
#        AuthzLDAPAuthoritative Off # вырубить авторизацию по лдап (пустить всех)
        AuthName "Otrs Agents"
        AuthBasicProvider ldap
        AuthLDAPURL "ldap://dc.domain.ru:389/ou=Organization,dc=domain,dc=ru?sAMAccountName?sub?(objectclass=person)"
        AuthLDAPBindDN "CN=ldapusers,OU=Ldap,OU=System users,DC=domain,DC=ru"
        AuthLDAPBindPassword "ldapuserspass"
        Require ldap-group "CN=OTRSAgents,OU=System users,DC=domain,DC=ru"
</Location>
В приведенном тобой примере
<Location /otrs>
единый способ авторизации как на
/otrs/index.pl
так и на
/otrs/customer.pl
Попробовал, апач не понимает строки AuthBasicProvider ldap, конкретно что такое ldap.
Погуглив, не нашел рабочей конфы авторизации OTRS через mod_auth_basic.
ULiX, если ты сможешь предложить вариант авторизации агентов по группе доступа LDAP при использовании HTTPBasicAuth,
то это будет чрезвычайно полезная статья для wiki.otrs.org. Если у тебя нет возможности проверить конфу - готов тестировать варианты на себе. Если есть соображения - пиши здесь или в icq.

ULiX
OTRS Новобранец
Сообщения: 45
Зарегистрирован: 12 окт 2010, 08:56
Контактная информация:

Re: Доступ к агентскому интерфейсу при использовании SSO

Сообщение ULiX » 12 ноя 2010, 03:23

Тебе нужно ознакомится с документацией на используемый тобой апач в плане конфигурации.
В принципе если у тебя работает приведенный тобой формат конфигурации:
pgandalipov писал(а):Были сделаны следующие настройки в /etc/apache2/conf.d/otrs.conf

Код: Выделить всё

    <Location /otrs>
      PerlAuthenHandler Apache2::AuthenNTLM
      AuthType ntlm,basic
      AuthName Basic
      require valid-user
      PerlAddVar ntdomain "DOMAIN dc bdc"
      PerlSetVar defaultdomain DOMAIN
      PerlSetVar splitdomainprefix 1
    </Location>
То основное и главное отличие это разделение локаций (<Location>) на две:
<Location ~ "(/otrs/index.pl)"> - интерфейс агента
<Location ~ "(/otrs/customer.pl)"> - интерфейс заявителя

и указание различных настроек для каждой локации.

Информации по настройки LDAP авторизации для APCH куча:
http://www.linux.com/archive/feature/120050
http://httpd.apache.org/docs/2.2/mod/mo ... alias.html

Возможно у тебя в конфигах апача не подгружаются необходимые модули, скажем закомментированы строчки:

Код: Выделить всё

LoadModule ldap_module modules/mod_ldap.so
LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
Или другие созвучные с ними.
Возможно что для твоей версии нужно вместо ключевого слова "ldap" указать что-то иное. Я с этим постоянно сталкиваюсь. когда перехожу с debian на centos и в обратном направлении.

Вот сейчас смотрю ещё один вариант конфига apache2.conf
Там есть строчки:

Код: Выделить всё

# Include module configuration:
Include mods-enabled/*.load
Include mods-enabled/*.conf
Чтобы активировать модули необходимо создать симлинк в директории /mods-enabled на файл модуля находящийся в директории доступных модулей: /mods-available

Нужно включить модули:
authnz_ldap.load
ldap.load

По умолчанию они отключены.
Наверно это твой случай (Apache2).
Я не флудер, у меня просто не получаются маленькие посты.

Ответить