Корпоративный портал: 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 FilesInternet Exploreriexplore.exe. После установки в трее появится иконка в виде буквы W. Цвет значка обозначает статус работы: зеленый — все работает, оранжевый — запускается или останавливается, красный — не работает.

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

wamp2

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

wamp3

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

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

wamp5

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

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

wamp6

После этого с помощью текстового редактора открываем конфиг апача из каталога c:wampbinapacheapachex.x.xconfhttpd.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

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

Успехов! 🙂

admin

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

Вы можетеоставить отзыв или Обратную ссылку эта запись.
  1. max_mad - 17 сентября, 2015

    Когда будет продолжение? Очень интересно…

  2. Антон - 24 сентября, 2015

    Как скоро будет продолжение?

  3. Александр - 9 октября, 2015

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

  4. Екатерина - 20 октября, 2015

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

  5. alexmdv - 21 октября, 2015

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

  6. fajotaweco - 8 февраля, 2016

    Будет продолжение?

  7. alexmdv - 10 февраля, 2016

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

  8. basawruk - 17 марта, 2016

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

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

  9. alexmdv - 17 марта, 2016

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

  10. Екатерина - 17 марта, 2016

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

  11. basawruk - 18 марта, 2016

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

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

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

  12. basawruk - 18 марта, 2016

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

  13. alexmdv - 18 марта, 2016

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

  14. basawruk - 18 марта, 2016

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

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

  15. Анна - 3 августа, 2016

    Добрый день!

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

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

  16. porwgiy - 20 мая, 2019

    Спасибо за информацию!!!!!

Нужно войти чтобы оставить комментарий.