Не сильно ошибусь, если скажу, что каждый сисадмин настраивал веб-сервер. Это мог быть IIS или Apache — в общем не важно. Развертывание всего этого добра на Windows или Linux довольно шаблонная задача, не вызывающая трудностей. А если даже таковые возникают, то способы решения не трудно найти в интернете.
Сегодня я хочу рассказать об одном частном случае, который случается в корпоративной сети, где все компьютеры и пользователи входят в домен Active Directory. Мы будем делать корпоративный web портал на каком-нибудь простеньком движке типа joomla. На портале будут размещаться различные новости, опросы, формы обратной связи, форумы и пр. Одна из основных фишек такого портала заключается в том, что все пользователи должны автоматически аутентифицироваться при входе на портал, а не регистрироваться/логиниться в ручную. Таким образом, любые действия на портале будут автоматически осуществляться от имени этого доменного пользователя. Эта функция как раз и называется SSO (Single Sing On) Подробнее см в wiki.
SSO будет работать если:
- Движок портала (в нашем случае Joomla) умеет аутентифицировать пользователей по LDAP
- Веб-сервер передает обработчику PHP имя пользователя, который открыл портал
- Пользователь должен аутентифицироваться на уровне веб-сервера, однако, веб-сервер должен где-то проверять валидность пользователя, отсюда вытекает следующий пункт
- Операционная система интегрирована в Active Directory
Ровно на этом месте встает вопрос, на каком web-сервере делать портал? Какую ОС взять за основу: Linux или Windows?
Рассмотрим варианты:
- ОС Windows, веб-сервер IIS. На первый взгляд кажется самым очевидным вариантом. Интеграция с AD на уровне операционки уже есть. php и MySQL поставить труда не составит. Однако, IIS будет нормально работать только на Windows Server, который стоит приличных денег. Если же взять какой-нибудь Windows 7, то IIS в нем имеет серьезное ограничение по количеству одновременных сессий и по факту связка Windows 7 + IIS не годится.
- ОС Linux, веб-сервер Apache. Основные преимущества — бесплатность и скорость работы. Основная трудность — вогнать Linux машину в домен Active Directory и правильно настроить Apache.
- ОС 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. Цвет значка обозначает статус работы: зеленый — все работает, оранжевый — запускается или останавливается, красный — не работает.
Клик левой кнопки мыши по значку открывает основное меню WAMPа.
По умолчанию, свежеустановленный веб-сервер будет открываться только с того компьютера, где он установлен по адресу http://localhost (верхний пункт меню) Если туда зайти, то мы увидим стартовую страницу, где будет расписано какие расширения установлены, можно быстренько глянуть phpinfo и пр:
Т.к. проект WAMP постоянно развивается, но не лишним будет песоздать все относительные ссылки, путь которых от версии к версии меняется. Делает это одним кликом, нужно просто кликнуть мышой по номеру версии в меню ApacheVersionx.x.x, где x.x.x это версия Апача:
Если этого не сделать, то некоторые нужные нам PHP-модули могут не загружаться, о чем будет много записей в логах:
Затем, нам нужно прикрутить к Apache модуль sspi той же разрядности, что и WAMP. Скачиваем его из первоисточника.
В архиве вы найдете 2 папки, их нужно скопировать с заменой в каталог C:wampbinapacheapachex.x.x
После этого с помощью текстового редактора открываем конфиг апача из каталога c:wampbinapacheapachex.x.xconfhttpd.conf
Примерно в начале конфига будет раздел, где прописаны все загружаемые модули. Дописываем туда модуль sspi (LoadModule authnz_sspi_module modules/mod_authnz_sspi.so) и проверяем, что модули authn_core_module и authz_core_module не закомментированы символом #:
Затем проматываем конфиг ниже до момента настроек корневого каталога веб-сервера. Тут надо вписать все как на скриншоте ниже.
Сохраняем конфиг и перезапускаем все сервисы:
Если все было сделано правильно то Apache успешно перезагрузится. Зайдя на начальную страницу кликните по phpinfo:
Если среди параметров PHP будет параметр REMOTE_USER, то значит SSO работает и наш веб-сервер полностью готов для установки движка портала:
Не забудьте включить доступ веб-сервера для всех:
Половина дела сделана, про развертывание и настройку движка расскажу во второй части.
Успехов! 🙂
16 комментариев to “Корпоративный портал: Active Directory + Apache + php + mysql + Joomla + SSO. Часть 1”
max_mad - 17 сентября, 2015
Когда будет продолжение? Очень интересно…
Антон - 24 сентября, 2015
Как скоро будет продолжение?
Александр - 9 октября, 2015
Поддерживаю вопрос,хотелось бы почитать продолжение!
Спасибо.
Екатерина - 20 октября, 2015
Все требуем часть 2. Как книга без конца :-)))) Так не интересно….
alexmdv - 21 октября, 2015
Спасибо за отзывы! Постараюсь написать продолжение в ближайшие выходные.
fajotaweco - 8 февраля, 2016
Будет продолжение?
alexmdv - 10 февраля, 2016
Да, будет, но пока не могу сказать когда. Писать что-то очевидное не интересно, а неочевидные, но интересные нюансы настройки еще не накопились…
basawruk - 17 марта, 2016
Всё сделал по инструкции. На этом этапе заработало, спасибо.
Но как сделать чтобы не спрашивало логин/пароль при входе на сайт, а подхватывало данные пользователя залогинившегося в Windows?
Ну и ждем продолжения. Как банально установить и привязать портал к учетке в AD… )
Нестандартные вещи можно и в следующих частях описать)
alexmdv - 17 марта, 2016
Если вы все сделали правильно, то пользователи уже должны автоматически входить на сайт не вводя никакие логины и пароли — в этом весь смысл SSO. Логин и пароль у вас спрашивает движок Joomla или веб-сервер? Мне просто понять, на каком этапе затык…
Вторая часть уже больше будет про кастомизацию внешнего вида, типовые функции портала, разграничение прав между пользователями.
Екатерина - 17 марта, 2016
Похоже пока мы дождемся второй части уже все на пенсии книжки будем читать и нам уже портал нафиг не нужен будет… :-)))
basawruk - 18 марта, 2016
Нет, джумла ждет продолжения инструкции )
Пароль пока спрашивает панель администрирования WAMP по адресу http://localhost
если отключить модуль mod_authnz_sspi или поставить Require all granted, то пароль не спрашивает и REMOTE_USER — не отображается в переменных.
Если оставить все как на картинке, то пароль спрашивает и если ввести доменовские логин/пароль то пускает и REMOTE_USER — есть.
ЗЫ Сервер 2012 введен в домен, все запускается из-под доменовской учетки.
Не, не будет что кастомизировать. Мы прочитавшие Вашу статью настроили только то что указано в статье. Ни до какой джумлы и прочих порталов дело не дошло ))
Так что звиняйте, но напишите пожалуйста как все-таки подключить эту джумлу или что там Вы решите ко всему этому )
basawruk - 18 марта, 2016
Сделал эксперименты, виновата — Мозилла. Она, по умолчанию, не умеет автоматически логиниться через SSPI.
Жаль. Это принципиальное требование на счет Мозиллы…
Если кто знает как на большом, количестве компов, наиболее просто и безболезненно заставить Mozilla Firefox автоматически логиниться как пользователь зашедший в домен — подскажите?
alexmdv - 18 марта, 2016
Проверил у себя — такая же шляпа с Mozilla. Посмотрю, что тут можно сделать…
basawruk - 18 марта, 2016
Было бы здорово.
Продолжая эксперименты нашел что если в параметр Мозиллы network.automatic-ntlm-auth.trusted-uris добавить адрес сайта, то все происходит как задумано. Происходит SSO-авторизация.
Теперь как этот параметр массово распространить по сотням компов (файлик prefs.js).
На разные версии винды, мозилы… Не знаю…
Приходят на ум — cкрипты, консольные редакторы текста, анализ реестра, политики… Монструозная схема. Изяществом и не пахнет )
Анна - 3 августа, 2016
Добрый день!
Собираю все на openserver
Модуль подключаю, настройки файла конфигурации
нет переменной REMOTE_USER
в переменной SERVER_SOFTWARE запись только о версии апач, нет данных о модуле SSPI
apache 2.4.16
может подскажите в чем проблема?
porwgiy - 20 мая, 2019
Спасибо за информацию!!!!!