Корпоративный портал: Active Directory + Apache + php + mysql + Joomla + SSO. Часть 1

Не сильно ошибусь, если скажу, что каждый сисадмин настраивал веб-сервер. Это мог быть IIS или Apache — в общем не важно. Развертывание всего этого добра на Windows или Linux довольно шаблонная задача, не вызывающая трудностей. А если даже таковые возникают, то способы решения не трудно найти в интернете.

Сегодня я хочу рассказать об одном частном случае, который случается в корпоративной сети, где все компьютеры и пользователи входят в домен Active Directory. Мы будем делать корпоративный web портал на каком-нибудь простеньком движке типа joomla. На портале будут размещаться различные новости, опросы, формы обратной связи, форумы и пр. Одна из основных фишек такого портала заключается в том, что все пользователи должны автоматически аутентифицироваться при входе на портал, а не регистрироваться/логиниться в ручную. Таким образом, любые действия на портале будут автоматически осуществляться от имени этого доменного пользователя. Эта функция как раз и называется SSO (Single Sing On) Подробнее см в wiki.

SSO_single_sign_on-336x336SSO будет работать если:

  • Движок портала (в нашем случае Joomla) умеет аутентифицировать пользователей по LDAP
  • Веб-сервер передает обработчику PHP имя пользователя, который открыл портал
  • Пользователь должен аутентифицироваться на уровне веб-сервера, однако, веб-сервер должен где-то проверять валидность пользователя, отсюда вытекает следующий пункт
  • Операционная система интегрирована в Active Directory

Ровно на этом месте встает вопрос, на каком web-сервере делать портал? Какую ОС взять за основу: Linux или Windows?

Рассмотрим варианты:

  1. ОС Windows, веб-сервер IIS. На первый взгляд кажется самым очевидным вариантом. Интеграция с AD на уровне операционки уже есть. php и MySQL поставить труда не составит. Однако, IIS будет нормально работать только на Windows Server, который стоит приличных денег. Если же взять какой-нибудь Windows 7, то IIS в нем имеет серьезное ограничение по количеству одновременных сессий и по факту связка Windows 7 + IIS не годится.
  2. ОС Linux, веб-сервер Apache. Основные преимущества — бесплатность и скорость работы. Основная трудность — вогнать Linux машину в домен Active Directory и правильно настроить Apache.
  3. ОС Windows 7, веб-сервер Apache. Относительно не дорого, подойдет тем, кто с Linux «на вы», интеграция с AD уже есть, потребуется небольшая настройка веб-сервера под наши задачи.

К своему удивлению, по п.2 и п.3 я не нашел в интернете полного мануала как сделать всё «от и до». В этом обзоре я остановлюсь на 3м варианте и попробую рассказать как это делается. И так, поехали…

Нам понадобится комп или виртуалка с любой виндой: XP, 7, 8 — подойдет что угодно. Этот комп должен входить в состав домена Active Directory.

Следующим шагом нам нужно установить Apache, PHP, MySQL на наш комп. Устанавливать эти компоненты можно по отдельности, скачивая windows-сборки этих программ, но я бы рекомендовал скачать один сборник WAMP (Windows Apache MySQL PHP). На момент написания обзора актуальная версия WAMP 2.5. Все компоненты установятся в несколько кликов. Т.к. это сборник компилируется разработчиками компиляторами MS, то предварительно на вашем компе должен быть установлен пакет Microsoft Visual C++ 2012 Redistributable Package той же разрядности что и WAMP. Если WAMP вы скачали 32-битный, а операционка у вас 64-бита, то VC2012 надо ставить обеих разрядностей. В целом, под наши задачи 64 бита это баловство и я бы рекомендовал взять 32 битную ОС и 32 битный WAMP.

Очень рекомендую установить на комп какой-нибудь нормальный текстовый редактор для правки конфигурационных файлов WAMP сервера. Например, bred. Встроенный Блокнот Windows не распознает переносы строк с Linux-like текстовых файлов.

WAMP обычно устанавливается в каталог C:\wamp. В процессе установки нас попросят указать браузер по умолчанию. Я так и не понял какой именно браузер они спрашивают: файловый или интернет, я указал iexplore по адресу С:\Program Files\Internet Explorer\iexplore.exe. После установки в трее появится иконка в виде буквы W. Цвет значка обозначает статус работы: зеленый — все работает, оранжевый — запускается или останавливается, красный — не работает.

wamp1Клик левой кнопки мыши по значку открывает основное меню WAMPа.

wamp2

По умолчанию, свежеустановленный веб-сервер будет открываться только с того компьютера, где он установлен по адресу http://localhost (верхний пункт меню) Если туда зайти, то мы увидим стартовую страницу, где будет расписано какие расширения установлены, можно быстренько глянуть phpinfo и пр:

wamp3

Т.к. проект WAMP постоянно развивается, но не лишним будет песоздать все относительные ссылки, путь которых от версии к версии меняется. Делает это одним кликом, нужно просто кликнуть мышой по номеру версии в меню Apache\Version\x.x.x, где x.x.x это версия Апача:

wamp4Если этого не сделать, то некоторые нужные нам PHP-модули могут не загружаться, о чем будет много записей в логах:

wamp5

Затем, нам нужно прикрутить к Apache модуль sspi той же разрядности, что и WAMP. Скачиваем его из первоисточника.

В архиве вы найдете 2 папки, их нужно скопировать с заменой в каталог C:\wamp\bin\apache\apachex.x.x\

wamp6

После этого с помощью текстового редактора открываем конфиг апача из каталога c:\wamp\bin\apache\apachex.x.x\conf\httpd.conf

wamp7

Примерно в начале конфига будет раздел, где прописаны все загружаемые модули. Дописываем туда модуль sspi (LoadModule authnz_sspi_module modules/mod_authnz_sspi.so) и проверяем, что модули authn_core_module и authz_core_module не закомментированы символом #:

wamp8

Затем проматываем конфиг ниже до момента настроек корневого каталога веб-сервера. Тут надо вписать все как на скриншоте ниже.

wamp9

Сохраняем конфиг и перезапускаем все сервисы:

wamp10Если все было сделано правильно то Apache успешно перезагрузится. Зайдя на начальную страницу кликните по phpinfo:

wamp11

Если среди параметров PHP будет параметр REMOTE_USER, то значит SSO работает и наш веб-сервер полностью готов для установки движка портала:

wamp13

Не забудьте включить доступ веб-сервера для всех:

wamp14

Половина дела сделана, про развертывание и настройку движка расскажу во второй части.

Успехов! 🙂

 

Корпоративный портал: Active Directory + Apache + php + mysql + Joomla + SSO. Часть 1: 15 комментариев

  1. Александр

    Поддерживаю вопрос,хотелось бы почитать продолжение!
    Спасибо.

  2. Екатерина

    Все требуем часть 2. Как книга без конца :-)))) Так не интересно….

    1. alexmdv Автор записи

      Спасибо за отзывы! Постараюсь написать продолжение в ближайшие выходные.

        1. alexmdv Автор записи

          Да, будет, но пока не могу сказать когда. Писать что-то очевидное не интересно, а неочевидные, но интересные нюансы настройки еще не накопились…

  3. basawruk

    Всё сделал по инструкции. На этом этапе заработало, спасибо.
    Но как сделать чтобы не спрашивало логин/пароль при входе на сайт, а подхватывало данные пользователя залогинившегося в Windows?

    Ну и ждем продолжения. Как банально установить и привязать портал к учетке в AD… )
    Нестандартные вещи можно и в следующих частях описать)

    1. alexmdv Автор записи

      Если вы все сделали правильно, то пользователи уже должны автоматически входить на сайт не вводя никакие логины и пароли — в этом весь смысл SSO. Логин и пароль у вас спрашивает движок Joomla или веб-сервер? Мне просто понять, на каком этапе затык…
      Вторая часть уже больше будет про кастомизацию внешнего вида, типовые функции портала, разграничение прав между пользователями.

      1. Екатерина

        Похоже пока мы дождемся второй части уже все на пенсии книжки будем читать и нам уже портал нафиг не нужен будет… :-)))

      2. basawruk

        Нет, джумла ждет продолжения инструкции )
        Пароль пока спрашивает панель администрирования WAMP по адресу http://localhost
        если отключить модуль mod_authnz_sspi или поставить Require all granted, то пароль не спрашивает и REMOTE_USER — не отображается в переменных.
        Если оставить все как на картинке, то пароль спрашивает и если ввести доменовские логин/пароль то пускает и REMOTE_USER — есть.

        ЗЫ Сервер 2012 введен в домен, все запускается из-под доменовской учетки.

        Не, не будет что кастомизировать. Мы прочитавшие Вашу статью настроили только то что указано в статье. Ни до какой джумлы и прочих порталов дело не дошло ))
        Так что звиняйте, но напишите пожалуйста как все-таки подключить эту джумлу или что там Вы решите ко всему этому )

      3. basawruk

        Сделал эксперименты, виновата — Мозилла. Она, по умолчанию, не умеет автоматически логиниться через SSPI.
        Жаль. Это принципиальное требование на счет Мозиллы…
        Если кто знает как на большом, количестве компов, наиболее просто и безболезненно заставить Mozilla Firefox автоматически логиниться как пользователь зашедший в домен — подскажите?

        1. alexmdv Автор записи

          Проверил у себя — такая же шляпа с Mozilla. Посмотрю, что тут можно сделать…

          1. basawruk

            Было бы здорово.
            Продолжая эксперименты нашел что если в параметр Мозиллы network.automatic-ntlm-auth.trusted-uris добавить адрес сайта, то все происходит как задумано. Происходит SSO-авторизация.
            Теперь как этот параметр массово распространить по сотням компов (файлик prefs.js).
            На разные версии винды, мозилы… Не знаю…

            Приходят на ум — cкрипты, консольные редакторы текста, анализ реестра, политики… Монструозная схема. Изяществом и не пахнет )

  4. Анна

    Добрый день!

    Собираю все на openserver
    Модуль подключаю, настройки файла конфигурации
    нет переменной REMOTE_USER
    в переменной SERVER_SOFTWARE запись только о версии апач, нет данных о модуле SSPI
    apache 2.4.16

    может подскажите в чем проблема?

Добавить комментарий

Ваш e-mail не будет опубликован.