Данный способ интеграции основан на запуске отдельного сервиса, который занимается маршрутизацией запросом от WNAM ко внутренним компонентам или доменам. При его использовании вам не понадобится настраивать nginx, samba или другие инструменты. После установки работой с конфигурационными файлами займется сам сервис. Он написан на python3 и требует для своей работы ряда библиотек (преимущественно поддержки протокола LDAP). Его работа в режиме веб-сервиса обеспечивается инструментарием flask.
Подключение сервера WNAM в домен Windows требуется для:
- проверки учетных данных пользователя сети (логин/пароль)
- получения списка всех групп домена
- проверки членства пользователя в заданной группе
- получение NTML хэша пароля при EAP/MSCHAPv2 авторизации
Внимание! Взаимодействие с другими системами управления доменом, или другими LDAP-серверами, в настоящее время не поддерживается. Если вам это требуется - пишите на support@netams.com
1. Установка необходимого ПО
Внимание: вы можете настроить взаимодействие сервиса авторизации WNAM с доменом как на том же сервере, где работает ПО WNAM, как и на любом другом соседнем Linux-сервере . Именно поэтому взаимодействие производится через веб-скрипт.
Первым делом, установите ПО Samba:
apt-get install samba winbind
Отредактируйте его файл конфигурации /etc/samba/smb.conf:
[global]
workgroup = <имя_вашего_домена>
server string = %h server (Samba, Ubuntu)
dns proxy = no
security = ads
password server = <полное_имя_вашего_контроллера_домена>
realm = <полное_имя_вашего_домена>
log file = /var/log/samba/log.%m
max log size = 1000
syslog = 0
panic action = /usr/share/samba/panic-action %d
server role = standalone server
passdb backend = tdbsam
obey pam restrictions = yes
unix password sync = yes
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
pam password change = yes
map to guest = bad user
usershare allow guests = yes
Проверяем:
testparm
Запускаем:
systemctl unmask samba
systemctl enable samba
systemctl restart samba/etc/init.d/nmbd restart
/etc/init.d/smbd restart
Вносим сервер в домен:
net ads join -U <ваш_логин_в домене>
затем
/etc/init.d/winbind restart
Создаем в домене тестовую учётку wifitest с паролем wifitest
Проверяем авторизацию через Samba и контроллер домена:
ntlm_auth --request-nt-key --domain=<имя_домена> --username=wifitest --password=wifitest
Создаем веб-сервис, через который WNAM будет делать проверку пароля. Для этого ставим nginx (который впрочем должен быть установлен при установке WNAM), и редактируем (например) файл /etc/nginx/sites-available/wnam
server {
listen 80 default_server;root /var/www/html;
server_name _;
location / {
proxy_pass http://127.0.0.1:8080/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_read_timeout 120;
proxy_connect_timeout 120;
}location ~ ^/cgi {
root /home/wnam/cgi;
rewrite ^/cgi/(.*) /$1 break;include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
fastcgi_param SCRIPT_FILENAME /home/wnam/cgi$fastcgi_script_name;
}}
Не забудьте поставить модуль FastCGI:
apt install fcgiwrap
systemctl restart nginx
Сам скрипт проверки ntlmauth.cgi можно загрузить здесь. Он представляет собой примитивную обёртку над командой /usr/bin/ntlm_auth. Положите его в папку /home/wnam/cgi/ (создайте её при необходимости), дайте скрипту права "на исполнение":
mkdir /home/wnam/cgi
cd /home/wnam/cgi
wget -O ntlmauth.cgi https://netams.com/files/wnam/misc/ntlmauth.cgi
chmod +x ntlmauth.cgi
Убедитесь, скрипт доступен для вызова со стороны FastCGI-движка. Выполните:
chmod a+x /home/wnam && chmod a+x /home/wnam/cgi
Вам также придется добавить пользователя, от которого работает nginx (скорее всего это www-data), и его скрипты, в группу winbindd_priv, а также установить права на каталог, где находится сокет winbindd:
usermod -a -G winbindd_priv www-data
chown root:www-data /var/lib/samba/winbindd_privileged/
Для созданной тестовой учетной записи можно проверить работу локальной утилиты генерации хеша, и работу скрипта-обертки через веб запрос:
/usr/bin/ntlm_auth --request-nt-key --username=wifitest --challenge=89b2cc47d4571192 --nt-response=7413e0e319aa658f2214baadb65c131da88b767ab7771f17
wget -O - 'http://localhost/cgi/ntlmauth.cgi?username=wifitest&challenge=89b2cc47d4571192&nt-response=7413e0e319aa658f2214baadb65c131da88b767ab7771f17'
Должен получиться хэш в виде ответа:
NT_KEY: 535A15A134F3555A8089A772D0591D4C
Если так и происходит, можно продолжать настройку взаимодействия с Active Directory на стороне WNAM. Если нет, попробуйте такой (не очень хороший, тем не менее) способ:
chmod a+s /usr/bin/ntlm_auth
или пишите на support@netams.com.
2. Настройка взаимодействия с доменом
Внимание! WNAM поддерживает работу с несколькими доменами, но для этого вам буден необходимо организовать несколько виртуальных машин (по числу доменов), на которых работает настроенная выше конструкция samba+nginx+ntlmauth.
Для настройки перейдите в административный интерфейс WNAM, меню "Конфигурация - Корпоративная авторизация - Служба Active Directory".
В этом окне укажите параметры взаимодействия к контроллером домена:
Задайте полное FQDN имя домена, имя контроллера домена (только хост, без домена), логин и пароль вашей специальной сервисной учетной записи в домене (любой, которая имеет к нему доступ - с её помощью будет производиться получение списка групп домена).
Также укажите URL веб-сервиса проверки NTML-пароля, подготовленный на предыдущем шаге. Ссылка (по умолчанию) http://localhost/cgi/ntlmauth.cgi
Обязательно сохраните настройки!
(отправьте запрос в техподдержку).
Необходимо установить следующий набор пакетов:
apt install python3-flask python3-dnspython python3-ldap3 python3-pyasn1 python3-pyasn1-modules python3-six python3-gssapi krb5-user libkrb5-dev python3-pycryptodome python3-apscheduler sudo winbind
Затем запросите и получите у нашей службы техподдержки интеграционный модуль, он поставляется в виде архива. Распакуйте:
mkdir -p /home/wnam/adctool/logs
tar zxvf adctool.tgz /home/wnam/adctool
chown -R wnam:wnam /home/wnam/adctool
Задайте права на нужные файлы:
cat > /etc/sudoers.d/wnam << SUDO
wnam ALL = NOPASSWD: /usr/bin/net
wnam ALL = NOPASSWD: /usr/bin/systemctl
SUDOchmod a+s /usr/bin/wbinfo
chmod a+s /usr/bin/ntlm_auth
chown wnam /etc/samba/smb.conf
Создайте systemd-скрипт для нового сервиса:
cat > /etc/systemd/system/adctool.service << EOF
[Unit]
Description="WNAM Active Directory tools service"
After=network.target[Service]
WorkingDirectory=/home/wnam/adctool
ExecStart=/usr/bin/flask run
Restart=on-failure
SuccessExitStatus=143
RestartSec=10
User=wnam
Group=wnam
StandardOutput=append:/home/wnam/adctool/logs/application.log
StandardError=append:/home/wnam/adctool/logs/console.log[Install]
WantedBy=multi-user.targetEOF
Посмотрите, и возможно отредактируйте конфигурационный файл /home/wnam/adctool/.flaskenv:
FLASK_APP=ad_tools.py
FLASK_RUN_HOST=0.0.0.0
FLASK_RUN_PORT=9080
FLASK_DEBUG=True
Посмотрите, и возможно отредактируйте конфигурационный файл /home/wnam/adctool/config.json:
{
"kcache_refresh": 3600,
"root_path": "/root/adctool"
}
Включите сервис, и запустите его
systemctl enable adctool
systemctl start adctool
Посмотрите в лог-файле /home/wnam/adctool/logs/console.log результат запуска сервиса, нет ли явных ошибок
Перейдите в административный интерфейс WNAM, в раздел "Конфигурация - Корпоративная авторизация - Службы Active Directory":
Затем нажмите на кнопку "Обновить список групп". При этом с заданными учетными данными контроллер будет запрошен на предмет всех групп домена. Внимание! Эта операция может занять минуту.
...
На этом настройка закончена. Ваша система WNAM сможет общаться к контроллером доменаконтроллерам доменов, и использовать его их для проведения EAP-PEAP/MSCHAPv2 авторизации абонентов вашей сети.
...