Предусловие
Хост, на котором развертывается docker контейнер с FreeRADIUS введен в домен с помощью Samba/Winbind.
Дополнительная информация:
Для использования протокола MSCHAPv2 в рамках данной конфигурации на хосте должна быть установлена операционная система РЕД ОС версии 7.3. Использование других версий РЕД ОС не поддерживается и может привести к некорректной работе FreeRADIUS. На машине должен быть установлен docker для запуска FreeRADIUS. Для ввода в домен должен использоваться winbind. Перед вводом в домен время на клиентской машине должно быть синхронизировано с AD сервером. Графическая утилита не всегда выводит итоговое окно об успешном вводе в домен. Результат можно посмотреть в лог файле.
Полезные статьи:
Предварительная подготовка компьютера к вводу в домен Установка и настройка ntp Ввод РЕД ОС в домен MSAD с помощью утилиты join-to-domain
Проверка
wbinfo -u выведет список пользователей.
- Можно сменить пользователя на доменного , команда
su user@my.domain
Команда ntlm_auth отрабатывает корректно. Задать простое имя пользователя (без префиксов и суффиксов) Пример: /usr/bin/ntlm_auth --request-nt-key --domain=my.domain --username=user --password=MyPassword
Результат:: (0x0)
Настройка изменения пароля через ntlm_auth
- Отключить режим winbind offline logon
В файле /etc/samba/smb.conf установить или поправить строку
winbind offline logon = No в разделе [global]
- Перезагрузить
samba systemctl restart winbind smb nmb
Проверить изменение пароля через ntlm_auth
- убедится, что текущий пользователь находится в группе wbpriv (команда id)
- При необходимости пользователя добавить в группу wbpriv (команда sudo usermod -aG wbpriv $USER)
- Закрыть/Открыть сессию пользователя, чтобы изменения вступили в силу
- Выполнить команду изменения пароля:
printf "username: user\nnt-domain: my.domain\nOld-Password: old-password\nNew-Password: new-password\n.\n" | ntlm_auth --helper-protocol=ntlm-change-password-1
Проверить, что пароль у пользователя изменился
Trusted domains
Conditional Forwarder на другой домен
На каждом домене создаём условную пересылку (Conditional Forwarder) на другой домен: Домены: company1.local company2.local DNS-серверы: 192.168.10.10 192.168.20.10
В company1.local: DNS → Conditional Forwarders → New Conditional Forwarder DNS domain → company2.local IP → 192.168.20.10 (или несколько DC)
То же самое делаем в обратную сторону.
Проверяем:
nslookup dc01.company2.local ← из company1
nslookup dc01.company1.local ← из company2
Создаём доверие
Active Directory Domains and Trusts → ПКМ на название домена → Properties → Trusts → New Trust... Выбираем: Тип доверия → Forest trust Направление → Two-way (двухстороннее) Scope → Both this domain and the specified domain (если есть учетные записи администратора в обоих доменах) Указываем имя второго домена (company2.local) Вводим учётную запись Enterprise Admin второго домена Authentication → Forest-wide authentication
Проверка Trusted domains в Windows Server
NLTEST
nltest /sc_verify:company2.local
nltest /sc_query:company2.local
Результат:
Trusted DC Connection Status Status = 0 0x0 NERR_Success
Trusted domain company2.local
VALIDATE В GUI
В графическом интерфейсе в Active Directory Domains and Trusts → правый клик на название домена → Properties есть кнопка Validate.
ДОСТУП К ПОЛЬЗОВАТЕЛЮ
Get-ADUser -Identity "user" -Server "company2.local"
ПОСМОТРЕТЬ ВСЕ ДОВЕРИТЕЛЬНЫЕ ОТНОШЕНИЯ:
Get-ADTrust -Filter *
ПОИСК ПОЛЬЗОВАТЕЛЯ В GUI
На компьютере/сервере в домене company1.local:
Правой кнопкой → Свойства папки → Вкладка «Безопасность» → «Изменить» Добавить → Вводим company2\имя_пользователя или company2\Domain Users Нажимаем «Проверить имена»
Если имена успешно разрешились → доверие живое и аутентификация работает.
Настройка Trusted domains на РЕД ОС
ПАРАМЕТРЫ В SMB.CONF
[global] winbind scan trusted domains = yes allow trusted domains = yes
IDMAP-НАСТРОЙКИ ДЛЯ ДОМЕНА B
[global] idmap config DOMAINB : backend = rid idmap config DOMAINB: range = 1000000-1999999
После правок:
net cache flush
systemctl restart winbind smb
Проверка Trusted domains на РЕД ОС
ПОКАЗАТЬ ДОМЕНЫ
wbinfo -m
ПОКАЗАТЬ ПОЛЬЗОВАТЕЛЕЙ ИЗ ДОВЕРЕННОГО ДОМЕНА
wbinfo -u --domain=DOMAINB
ПОКАЗАТЬ ID ПОЛЬЗОВАТЕЛЯ ИЗ ДОВЕРЕННОГО ДОМЕНА
id DOMAINB\\user
NTLM_AUTH
/usr/bin/ntlm_auth --request-nt-key --domain=DOMAINB --username=user --password=Password
Настройки FreeRADIUS контейнера
Пользователь, под которым будет запускаться FreeRADIUS, должен быть членом группы wbpriv. Подсмотреть gid группы на хосте можно,например, командой
getent group wbpriv В файл docker-compose.yml должен быть добавлен gid группы wbpriv с помощью опции group_add, пример:
group_add: - 88
Для FreeRADIUS контейнера необходимо дополнительно расшарить следующие каталоги и файлы:
- /var/lib/samba/winbindd_privileged:/var/lib/samba/winbindd_privileged:ro,Z - /var/run/samba:/var/run/samba:ro,Z - /etc/samba/smb.conf:/etc/samba/smb.conf:ro,Z - /lib64/:/host/lib64/:ro,Z - /usr/lib64/samba/:/usr/lib64/samba/:ro,Z - /usr/bin/ntlm_auth:/usr/bin/ntlm_auth:ro,Z
Проверка
Работа ntlm_auth
- Запустить контейнер FreeRADIUS
- Зайти в запущенный контейнер FreeRADIUS
Пример: 
- Проверить работоспсобность внутренней утилиты ntlm_auth.
Задать простое имя пользователя (без префиксов и суффиксов) Пример: /opt/ntlm_auth_host --request-nt-key --domain=my.domain --username=user --password=MyPassword
MS-CHAP
- Установить пакет freeradius-utils.
- Запустить контейнер FreeRADIUS
- Запустить тест MS-CHAP.
Имя пользователя в формате UPN. Пример: radtest -t mschap user@my.domain MyPassword localhost 0 testing123
MS-CHAPv2
Для тестирования можно использовать Python утилиту. Пример использования питон утилиты на linux хосте. Должен быть установлен Python. В отдельном каталоге.
- Создать файл mschapv2.py:
from radius_eap_mschapv2 import RADIUS
radius_host = '127.0.0.1'
radius_secret = 'testing123'
radius_nas_ip = '127.0.0.1'
radius_nas_id = 'mynas'
username = 'user@my.domain'
password = 'MyPassword'
#legacy MSCHAPv2 (no EAP)
r = RADIUS(radius_host, radius_secret, radius_nas_ip, radius_nas_id,
timeout=30, eap=False)
print(r.is_credential_valid(username, password))
- Cделать его исполняемым:
chmod a+x ./mschapv2.py
- Создать файл requirements.txt:
radius-eap-mschapv2-client
- Создать виртуальное окружение
python -m venv .venv
- Активировать виртуальное окружение:
source ./venv/bin/activate
- Установить зависимости:
pip install -r requirements.txt
- Заполнить mschapv2.py корректной настройкой и запустить:
./mschapv2.py
В случае успеха выведется: True
|