Obsah


Níže uvedený návod funguje jen pokud MS AD podporuje NTLMv1 což je zastaralý a nedoporučovaný protokol, viz článek Stop using LAN Manager and NTLMv1!.

Pokud jsou účty z MS AD použivány ke kritickým systémům insituce, jako např. mzdové agendy. Je vhodné používat oddělené eduroam heslo od hlavního hesla do MS AD.

Délka hesla nehraje roli.

Nejdůležitějším prvkem zabezpeční je to aby uživatelé ověřovali certifikát a hostname RADIUS serveru, tj. aby používali eduroam CAT. Což hojně nečinní.

Nastavení ověřování Freeradiusu přes Windows AD

Návod vychází z návodu připraveného pro Debian 8 (Jessie) a distribuční balíček FreeRADIUS v2 od Jana Vondráčka z UPCE. Sekce specifické pro napojení na eduroam.cz byly vypuštěny. Originální návod je k dispozici.

OS se musí nejdříve zaregistrovat ve Windowsové doméně, pomocí samby a winbindu. A potom lze používat ověření ntlm_auth ze Samby ve Freeradiusu. Hesla v AD jsou uložena jako NT hash a tuto hash lze použít v MS-CHAPv2 autorizaci (bez potřeby znát plain textové heslo). AD DC musí povolovat NTLMv1 ověření, což je trochu v rozporu s best practice od Microsoftu.

Nejdříve doinstalujte balíky:

apt-get install samba winbind krb5-config krb5-user

Přidání systému do Windows domény

Konfigurační soubor /etc/krb5.conf:

[libdefaults]
	default_realm = UNIVERZITA.CZ
	dns_lookup_realm = false
	dns_lookup_kdc = false

[realms]
	UNIVERZITA.CZ = {
		kdc = 192.168.0.2
		kdc = 192.168.0.3
		admin_server = ldapdc.univerzita.cz
		default_domain = univerzita.cz
	}

[domain_realm]
	.univerzita.cz = UNIVERZITA.CZ
	univerzita.cz = UNIVERZITA.CZ

[appdefaults]
	pam = {
		debug = false
		ticket_lifetime = 36000
		renew_lifetime = 36000
		forwardable = true
		krb4_convert = false
	}

Pozor na malé a velké znaky, ty je nutno dodržet. Dva kdc jsou zde kvůli zvýšené dostupnosti, systém je schopen při výpadku přecházet plynule mezi dvěma DC. IP jsou zde použity, aby se systém zaregistroval na oba DC zároveň, lze také použít unikátní FQDN.

Soubor /etc/smb.conf (Debian 9 má soubor v /etc/samba/smb.conf):

[global]
workgroup = UNIVERZITA
security = ads
password server = 192.168.0.2, 192.168.0.3
realm = UNIVERZITA.CZ

Pozor, workgroup není doména, jméno musí být uvedeno bez koncovky domény 1. řádu. DC jsou opět dva.

Soubor /etc/nsswitch.conf:

passwd: compat files winbind
group: compat files winbind
shadow: compat files winbind

Tj. ke stávajícím definicím ověřování passwd, group a shadow přidáme winbind.

Samba a winbind musí být spuštěné. Při změně konfigurace je třeba winbind nejdříve zastavit, restartovat sambu a winbind opět spustit

Následujícími těmito příkazy otestujeme, zda DC vidíme a jsme schopni se přihlásit, vytvoříme si kerberosový tiket. Identifikátor domény vyplňovat nemusíme, použije se defaultní. Uživatel nemusí být doménovým administrátorem. Na konci pokusu se musí přihlášení zrušit, krb5 tiket totiž platí 8 hodin. Prostupy FW jsou trochu oříšek, já vypozoroval používání TCP 88, 389, 445 a UDP 88. Ale pak ještě aplikační ping na členy domény, je to volání DCERPC a chodí po dynamických portech 1024-65535, spojení navazují různě obě strany.

kinit bezny_uzivatel
klist
kdestroy -A

Teď můžeme systém zaregistrovat do AD pomocí doménového administrátora. Po zaregistrování lze krb5 tiket zrušit (hlavně když správce radiusu a doménový admin nejsou jedna osoba a doménový admin se obává, abyste jeho jménem nepáchali nějaké nepravosti :-) ). Připojení do domény si samba ukládá do adresáře /var/run/samba/.

~# kinit admin_uzivatel
~# net ads join -U admin_uzivatel
Using short domain name -- UNIVERZITA
Joined 'HONZA-LAB' to dns domain 'univerzita.cz'
~# kdestroy -A
~# systemctl restart winbind.service

Nyní ověříme zda vidíme informace z AD, uživatele a skupiny. Ping na DC doporučuji použít i jako test v dohledovém systému. Pak můžeme otestovat přihlášení přímo pomocí ntlm, které používá freeradius. Druhý test je kvůli ověření fungování skupin.

~# wbinfo -u
UNIVERZITA\novak
UNIVERZITA\kocicika
...
~# wbinfo -g
UNIVERZITA\studenti
UNIVERZITA\ucitele
...
~# wbinfo -P
checking the NETLOGON for domain[UNIVERZITA] dc connection to "ldapdc.univerzita.cz" succeeded
~# ntlm_auth --request-nt-key --domain=UNIVERZITA --username=bezny_uzivatel
--require-membership-of="UNIVERZITA\g_eduroam"
Password:
NT_STATUS_OK: Success (0x0)
~# ntlm_auth --request-nt-key --domain=UNIVERZITA --username=bezny_uzivatel
--require-membership-of="UNIVERZITA\g_zakazano"
Password:
NT_STATUS_LOGON_FAILURE: Logon failure (0xc000006d)

Zajištění automatického startu winbind služby:

~# systemctl unmask winbind
~# systemctl enable winbind

Konfigurace freeRADIUSu

Je třeba povolit procesu freeradius přístup k winbindové pipe

chown root:freerad /var/lib/samba/winbindd_privileged

a nebo přidejte uživatele freerad do skupiny winbindd_priv která má práva čtení a spouštění na dotčeném adresáři. Je třeba zajistit aby změna byla presistentní a přežila i upgrady systému, tj. např. to přidejte do startovacího skriptu FreeRADIUSu.

V souboru /etc/freeradius/mods-enabled/mschap se nastaví ověření pomocí sambového ntlm_auth. Pozor na nutnost escapování znaku backslash u verzí =< 3.0.4 musí být dvě lomítka u vyšších verzí jen jedno.

mschap {
	use_mppe = yes
	require_encryption = yes
	require_strong = yes
	with_ntdomain_hack = yes
	ntlm_auth = "/usr/bin/ntlm_auth --request-nt-key --username=%{%{Stripped-User-Name}:-%{%{User-Name}:-None}} --challenge=%{%{mschap:Challenge}:-00} --nt-response=%{%{mschap:NT-Response}:-00} --require-membership-of='UNIVERZITA\g_eduroam'"
}

Odkazy a zdroje