Ad Widget

Collapse

Аутентификация пользователя из Active Directory

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • rip88
    Junior Member
    • Oct 2014
    • 3

    #1

    Аутентификация пользователя из Active Directory

    Всем доброго дня.
    По поиску ничего внятного не нашел, потому решил создать тему.
    Собственно, имеется домен Active Directory и машина, на которой висит Zabbix. Хочется сделать следующее:
    Доступ к консоли Zabbix имеют только те люди, которых добавили в определенную группу в AD, например, Zabbix Users. И один локальный аккаунт администратора. И все.
    При этом хотелось бы, чтобы операция была максимально упрощена - т.е. добавил пользователя AD в группу - и он может пройти аутентификацию. В самом Zabbix не нужно ничего больше править.
    Подскажите, какие пакеты необходимо ставить дополнительно? И скиньте пример настройки - уверен, не одного меня такой вопрос интересовал
  • Strategist
    Member
    • Sep 2013
    • 54

    #2
    На сколько я знаю такое еще не реализовано, тоже искал - бесполезно

    Comment

    • sadman
      Senior Member
      • Dec 2010
      • 1611

      #3
      Покопавшись в коде фронтенда 2.0.2 - подтверждаю, что не все так просто. на логине сразу идет проверка существования имени пользователя во внутренней базе данных zabbix, и только потом, если он существует, производится проверка пользователя/пароля в LDAP.

      Самый простой костыль - это выгребание (по крону, к примеру) пользователей из заданного OU или CN и через Zabbix API впихивание имен во внутреннюю базу данных. Вроде бы проверяемый пользователь ищется по тому же DN, что и указывается в строке Bind DN.

      Comment

      • rip88
        Junior Member
        • Oct 2014
        • 3

        #4
        Originally posted by sadman
        Покопавшись в коде фронтенда 2.0.2 - и только потом, если он существует, производится проверка пользователя/пароля в LDAP.
        Не знал, что именно так. Т.е. если пользователя в БД Zabbix нет, то и проверять он ничего не полезет?
        Выгребание пользователя по крону - вариант неплохой в таком случае.
        Просто думалось, что можно как-то игтегрировать это с самбой, не затрагивая основную БД.

        Comment

        • sadman
          Senior Member
          • Dec 2010
          • 1611

          #5
          Если в базе нет, то дальше не будет проверять. Это косвенно подтверждается документацией:

          LDAP

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


          По крону выгребать неплохо, но только если рассматривать как идею. Придется проверять пользователя на присутствие в базе, смотреть как он авторизуется и пр. С удалением такая же ерунда выйдет. Вобщем, тут кода на целую кастрюлю.

          Ну, или если хотите на баше, то вот вам инструментарий:
          1) http://trac.red-tux.net/wiki/zbx_api/zabcon
          2) ldapsearch -xLLL -D 'cn=zbx,OU=zou,DC=domain,DC=local' -w 'zbPa$$w0rd' "(&(objectCategory=user) (memberOf=cn=zgrp,ou=zou,dc=domain,dc=local))" sAMAccountName | awk '/(sAMAccountName: )/ {print $2}'

          zbx - имя пользователя для бинда (то, что в Bind DN)
          zgrp - группа, куда сваливать пользователей для заббикса
          zou - подразделение, если всё будете делать красиво

          Удачи

          Comment

          • sadman
            Senior Member
            • Dec 2010
            • 1611

            #6
            Накидал я черновой скриптик, который дергает с AD пользователей и создает их на Zabbix-е.

            Для выполнения нужен perl и установленные из CPAN Zabbix::API + Net::LDAP. Запускается с сервера, на котором расположен Zabbix.
            Zabbix, естественно, должен поддерживать работу с API (не помню, с какой версии это появилось)

            В начале скрипта переменные:

            ldapServer - сервер AD (ip или доменное имя)
            userToAuthenticate - "Имя для подключения (Bind DN)" Zabbix-а, т.е. LDAP-путь к пользователю, который имеет право делать аутентифицироваться в AD и, соотв. дергать записи.
            passToAuthenticate - "Пароль подключения (Bind password)" Zabbix-а
            baseDN - поле "База для поиска (BaseDN)" Zabbix-а
            usersDN - LDAP-путь к группе, содержащей пользователей, которых нужно импортировать в Zabbix
            zbxUser - пользователь Zabbix, который имеет права на создание/удаление пользователей/групп
            zbxPass - его пароль
            zbxLDAPGroup - группа Zabbix, к которой будут привязаны все импортированные пользователи
            verbosity - уровень отладки.

            Логика работы: Если группа zbxLDAPGroup не существует на Zabbix, то она создается. В zbxLDAPGroup добавляются все пользователи из usersDN, которые на момент выполнения там отсутствовали. Затем удаляются пользователи, привязанные к zbxLDAPGroup, но которых нет в usersDN.

            Отсюда две особенности: первая - любой пользователь, попавший в zbxLDAPGroup может быть удален; вторая - существующий пользователь zabbix с именем, эквивалентным sAMAccountName из AD не может быть и не будет импортирован и добавлен в zbxLDAPGroup.

            Текущие проблемы: вторая особенность на данный момент вызывает ошибку в скрипте и останавливает его. Русские имена с фамилиями из AD тянутся некорректно.

            Помощь в допиливании / предложения / вопросы принимаются.
            Attached Files
            Last edited by sadman; 15-10-2014, 12:17.

            Comment

            • rip88
              Junior Member
              • Oct 2014
              • 3

              #7
              Заглянул, спасибо. Сейчас попробую разобраться, что к чему.
              Zabbix API и NET LDAP как ставятся? Что-то для меня тут это вообще темный лес, да и сам скрипт вышел немаленьким. В любом случае, интересно попробовать и понять, что к чему.
              По поводу остановки скрипта при совпадении имен - если делать только одну локальную уникальную учетеную запись для администратора - например, ZabbixAdmin, то вообще все просто.
              А по поводу русских имен - странно, довольно. Можно потом посмотреть вывод - по идее должно быть достаточно всего лишь поддержки русского языка в консоли.

              Comment

              • sadman
                Senior Member
                • Dec 2010
                • 1611

                #8
                Originally posted by rip88
                Заглянул, спасибо. Сейчас попробую разобраться, что к чему.
                Zabbix API и NET LDAP как ставятся?
                cpan install Zabbix::API
                cpan install Net::LDAP
                к ним ещё нужен aptitude install build-essential, если не стоит.

                Originally posted by rip88
                По поводу остановки скрипта при совпадении имен - если делать только одну локальную уникальную учетеную запись для администратора - например, ZabbixAdmin, то вообще все просто.
                Да проблемы-то в этом нет, но недоумение вызвать может.

                Originally posted by rip88
                А по поводу русских имен - странно, довольно. Можно потом посмотреть вывод - по идее должно быть достаточно всего лишь поддержки русского языка в консоли.
                Консоль тут непричем. Нужно конвертировать win1251 (в случае с MS AD) в utf-8 перед отдачей Name, Surname Zabbix-у, но с налету не получилось - я не перлописатель.

                Comment

                Working...