Versions Compared

Key

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

Данный способ интеграции основан на запуске отдельного сервиса, который занимается маршрутизацией запросов от системы WNAM к серверам доменам. При его использовании не потребуется ручная настройка nginx, samba или других инструментов. Сервис написан на языке python3 и требует для своей работы ряда библиотек (преимущественно поддержки протокола LDAP). Его работа в режиме веб-сервиса обеспечивается инструментарием flask. 

Warning
Можно настроить взаимодействие системы авторизации WNAM с доменом аналогично как на самом сервере, на котором работает ПО WNAM, так

Подключение сервера WNAM в домен Windows требуется для:

  • проверки учетных данных пользователя сети (логин/пароль)
  • получения списка всех групп домена
  • проверки членства пользователя в заданной группе
  • получение NTML хэша пароля при EAP/MSCHAPv2 авторизации

Внимание! Взаимодействие с другими системами управления доменом, или другими LDAP-серверами, в настоящее время не поддерживается. Если вам это требуется - пишите на support@netams.com 

1. Установка необходимого ПО

...

и на любом другом соседнем Linux-сервере

...

.

Схема взаимодействия компонентов представлена на рисунке:

 

Image Added


Info

Для сервера, не имеющего выхода в Интернет, существует вариант автоматической оффлайн-инсталляции, при котором все *.deb и python-пакеты устанавливаются из заранее подготовленного архива.

Последующие обновления actool можно производить скриптом https://www.netams.com/files/wnam/misc/upgrade-adctool.sh

Необходимо установить следующий набор пакетов:

apt install python3-flask python3-dnspython python3-ldap3 python3-pyasn1 python3-pyasn1-modules python3-six python3-gssapi krb5-user libkrb5-dev python3-pycryptodome winbind python3-apscheduler sudo libcurl4-nss-dev python3-cryptography libgpgme-dev python3-dotenv python3-apt python3-pip 

Затем запросить и получить у службы техподдержки компании Netams интеграционный модуль, который поставляется в виде архива, и распаковать его:

mkdir -p /home/wnam/adctool/logs
tar zxvf adctool.tgz -C /home/wnam
chown -R wnam:wnam /home/wnam/adctool
cd /home/wnam/adctool
pip3 install -r requirements.txt

Задать права на нужные файлы:

cat > /etc/sudoers.d/wnam << SUDO
wnam ALL = NOPASSWD: /usr/bin/net
wnam ALL = NOPASSWD: /usr/bin/wbinfo
wnam ALL = NOPASSWD: /usr/bin/systemctl
wnam ALL = NOPASSWD: /usr/bin/mv
wnam ALL = NOPASSWD: /usr/bin/ntlm_auth
SUDO
chmod +x /home/wnam/adctool/*.py
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": "/home/wnam/adctool"
}

Включить сервис и запустить его:

systemctl enable adctool
systemctl start adctool

В лог-файле /home/wnam/adctool/logs/console.log следует проверить результат запуска сервиса на предмет ошибок.

Затем необходимо проверить, открывается ли тестовый интерфейс этого инструмента. Тестовый интерфейс доступен по адресу http://адрес_сервера:9080/. В корректном режиме работы он должен показывать список тестовых ссылок, которые отображают статус взаимодействия с контроллерами доменов, позволяют получить список групп, пройти проверку прав пользователя и т.п. (можно поменять имена доменов и учетных записей в URL). В продуктивном режиме следует отключить такой тестовый доступ (указать в директории /home/wnam/adctool/.flaskenv параметр FLASK_RUN_HOST=127.0.0.1).

Если тестовый интерфейс отображает ошибку, например, сообщения типа:

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/flask/cli.py", line 330, in __call__
...
ImportError: cannot import name 'SAFE_RESTARTABLE' from 'ldap3' (/usr/lib/python3/dist-packages/ldap3/__init__.py)

Это означает, что модули Python не установились как следует. Необходимо заменить в файле /etc/systemd/system/adctool.service параметр:

ExecStart=/usr/bin/flask run

на

ExecStart=/usr/local/bin/flask run

и далее выполнить команду:

systemctl daemon-reload && systemctl restart adctool

Когда интеграционный модуль будет работать корректно, следует перейти в административный интерфейс системы WNAM в раздел "Конфигурация" → "Службы каталогов". Окно отобразит следующие данные:

  • Статус взаимодействия с интеграционной службой adctool с возможностью отправки команды на её перезапуск.
  • Список подключенных доменов с информацией:
    • название домена, имя контроллера домена;
    • число доменных групп, найденных и отмеченных к дальнейшему использованию в профилях аутентификации.
    • название хоста, применяемого для коннектора, типы и статус интеграционных сервисов (LDAPSи NTLM-коннекторы), имя контроллера домена. цвет плашки:
      • зеленый статус: всё ОК
      • красный статус: коннектор не может получить корректную информацию (не сработал join к домену, или он развалился)
      • серый статус: ADCTool не успел получить ответ от коннектора за тайм-аут 5 секунд; вероятны сетевые или DNS проблемы

Image Added

Продолжить настройку, подключив вашу систему к службам каталога:

  • Active Directory. Допустимо создать несколько коннекторов к разным доменам Active Directory, но для EAP_PEAP-авторизации (через механизм NTLM) работает только один коннектор.
  • FreeIPA. Допустимо создать несколько коннекторов к разным доменам FreeIPA, и для EAP_PEAP-авторизации работают все коннекторы, где включена функция принудительного хранения хэша пароля в каталоге

...

Первым делом, установите ПО 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

Обязательно сохраните настройки!

Затем нажмите на кнопку "Обновить список групп". При этом с заданными учетными данными контроллер будет запрошен на предмет всех групп домена. Внимание! Эта операция может занять минуту.

Вы получите полный список. Чекбоксами отметьте интересующие вас группы: только их можно будет указывать в профилях аутентификации.

Image Removed

Снова нажмите на "Сохранить".

...

  • .