FreeRADIUS в VM РЕД ОС 7.3
Автор Andrey Prokopenko, Last modified by Andrey Prokopenko на 02 февраля 2026 12:43 PM

Предусловие

Хост, на котором развертывается 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

(0 голос(а))
Эта статья полезна
Эта статья бесполезна