Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Данный способ интеграции основан на запуске отдельного сервиса, который занимается маршрутизацией запросом от 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".

В этом окне укажите параметры взаимодействия к контроллером домена:

Image Removed

Задайте полное 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
SUDO

chmod 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.target

EOF

Посмотрите, и возможно отредактируйте конфигурационный файл /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 авторизации абонентов вашей сети.

...