
Ich kämpfe jetzt schon seit ungefähr einer Woche damit. Ich versuche, einen RADIUS-Server dazu zu bringen, sich gegenüber unserem Samba-basierten Active Directory zu authentifizieren, aber ich bekomme es nicht zum Laufen. Aufgrund unserer Infrastruktur funktioniert PAP nicht. Da AD kein bekanntes gutes Klartextkennwort bietet, funktioniert CHAP nicht. Also bleibt nur noch MSCHAP.
Der RADIUS-Server befindet sich auf einer eigenen VM. Diese VM ist mit Winbind mit der Domäne verknüpft. Ich habe Folgendes /etc/raddb/mods-available/mschap
:
$ cat /etc/raddb/mods-available/mschap|grep -Ev '^\s*(#|$)'
mschap {
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}"
winbind_username = "%{mschap:User-Name}"
winbind_domain = "[domain]"
winbind_retry_with_normalised_username = yes
pool {
start = ${thread[pool].start_servers}
min = ${thread[pool].min_spare_servers}
max = ${thread[pool].max_servers}
spare = ${thread[pool].max_spare_servers}
uses = 0
retry_delay = 30
lifetime = 86400
cleanup_interval = 300
idle_timeout = 600
}
}
Wenn ein Client versucht, sich zu authentifizieren, radiusd -X
lautet die relevante Ausgabe:
Listening on auth address * port 1812 bound to server default
Listening on acct address * port 1813 bound to server default
Listening on auth address :: port 1812 bound to server default
Listening on acct address :: port 1813 bound to server default
Listening on auth address 127.0.0.1 port 18120 bound to server inner-tunnel
Ready to process requests
(0) Received Access-Request Id 22 from 192.168.6.179:43922 to 192.168.6.192:1812 length 180
(0) Service-Type = Framed-User
(0) Framed-Protocol = PPP
(0) NAS-Port = 15728668
(0) NAS-Port-Type = Virtual
(0) User-Name = "duncan"
(0) Calling-Station-Id = "192.168.6.100"
(0) Called-Station-Id = "192.168.6.179"
(0) MS-CHAP-Challenge = 0x7fd91ada13b38b1800f2f5c1b9a107e4
(0) MS-CHAP2-Response = 0x01000ff84b43a7f4d54b20da108b5f6a76480000000000000000b366008c649fc36a4a9bfb044f65dc8daf3aee10ad679141
(0) NAS-Identifier = "MikroTik"
(0) NAS-IP-Address = 192.168.6.179
(0) # Executing section authorize from file /usr/local/etc/raddb/sites-enabled/default
(0) authorize {
(0) policy filter_username {
(0) if (&User-Name) {
(0) if (&User-Name) -> TRUE
(0) if (&User-Name) {
(0) if (&User-Name =~ / /) {
(0) if (&User-Name =~ / /) -> FALSE
(0) if (&User-Name =~ /@[^@]*@/ ) {
(0) if (&User-Name =~ /@[^@]*@/ ) -> FALSE
(0) if (&User-Name =~ /\.\./ ) {
(0) if (&User-Name =~ /\.\./ ) -> FALSE
(0) if ((&User-Name =~ /@/) && (&User-Name !~ /@(.+)\.(.+)$/)) {
(0) if ((&User-Name =~ /@/) && (&User-Name !~ /@(.+)\.(.+)$/)) -> FALSE
(0) if (&User-Name =~ /\.$/) {
(0) if (&User-Name =~ /\.$/) -> FALSE
(0) if (&User-Name =~ /@\./) {
(0) if (&User-Name =~ /@\./) -> FALSE
(0) } # if (&User-Name) = notfound
(0) } # policy filter_username = notfound
(0) [preprocess] = ok
(0) mschap: Found MS-CHAP attributes. Setting 'Auth-Type = mschap'
(0) [mschap] = ok
(0) [digest] = noop
(0) files: users: Matched entry DEFAULT at line 181
(0) [files] = ok
(0) [expiration] = noop
(0) [logintime] = noop
(0) pap: WARNING: No "known good" password found for the user. Not setting Auth-Type
(0) pap: WARNING: Authentication will fail unless a "known good" password is available
(0) [pap] = noop
(0) } # authorize = ok
(0) Found Auth-Type = mschap
(0) # Executing group from file /usr/local/etc/raddb/sites-enabled/default
(0) authenticate {
(0) mschap: Creating challenge hash with username: duncan
(0) mschap: Client is using MS-CHAPv2
(0) mschap: Executing: /usr/bin/ntlm_auth --request-nt-key --username=%{%{Stripped-User-Name}:-%{%{User-Name}:-None}} --challenge=%{%{mschap:Challenge}:-00} --nt-response=%{%{mschap:NT-Response}:-00}:
(0) mschap: EXPAND --username=%{%{Stripped-User-Name}:-%{%{User-Name}:-None}}
(0) mschap: --> --username=duncan
(0) mschap: Creating challenge hash with username: duncan
(0) mschap: EXPAND --challenge=%{%{mschap:Challenge}:-00}
(0) mschap: --> --challenge=6c2a06548de859d5
(0) mschap: EXPAND --nt-response=%{%{mschap:NT-Response}:-00}
(0) mschap: --> --nt-response=b366008c649fc36a4a9bfb044f65dc8daf3aee10ad679141
(0) mschap: ERROR: Program returned code (1) and output 'Logon failure (0xc000006d)'
(0) mschap: External script failed
(0) mschap: ERROR: External script says: Logon failure (0xc000006d)
(0) mschap: ERROR: MS-CHAP2-Response is incorrect
(0) [mschap] = reject
(0) } # authenticate = reject
(0) Failed to authenticate the user
(0) Using Post-Auth-Type Reject
(0) # Executing group from file /usr/local/etc/raddb/sites-enabled/default
(0) Post-Auth-Type REJECT {
(0) attr_filter.access_reject: EXPAND %{User-Name}
(0) attr_filter.access_reject: --> duncan
(0) attr_filter.access_reject: Matched entry DEFAULT at line 11
(0) [attr_filter.access_reject] = updated
(0) } # Post-Auth-Type REJECT = updated
(0) Delaying response for 1.000000 seconds
Waking up in 0.6 seconds.
Waking up in 0.3 seconds.
(0) Sending delayed response
(0) Sent Access-Reject Id 22 from 192.168.6.192:1812 to 192.168.6.179:43922 length 103
(0) MS-CHAP-Error = "\001E=691 R=1 C=06f7ce6fa5be464d72e8def2f9634910 V=3 M=Authentication rejected"
Waking up in 3.9 seconds.
(0) Cleaning up request packet ID 22 with timestamp +8
Ready to process requests
Und die Ausgabe des Samba-Protokolls der Stufe 5:
[2018/03/19 11:13:13.166062, 3] ../libcli/auth/schannel_state_tdb.c:190(schannel_fetch_session_key_tdb)
schannel_fetch_session_key_tdb: restored schannel info key SECRETS/SCHANNEL/GS-RADIUS
[2018/03/19 11:13:13.166160, 3] ../source4/auth/ntlm/auth.c:271(auth_check_password_send)
auth_check_password_send: Checking password for unmapped user [AD]\[duncan]@[\\GS-RADIUS]
[2018/03/19 11:13:13.166171, 5] ../source4/auth/ntlm/auth_util.c:57(map_user_info_cracknames)
map_user_info_cracknames: Mapping user [AD]\[duncan] from workstation [\\GS-RADIUS]
auth_check_password_send: mapped user is: [AD]\[duncan]@[\\GS-RADIUS]
[2018/03/19 11:13:13.166994, 5] ../source4/auth/ntlm/auth.c:67(auth_get_challenge)
auth_get_challenge: returning previous challenge by module netr_LogonSamLogonWithFlags (normal)
[2018/03/19 11:13:13.167006, 5] ../lib/util/util.c:555(dump_data)
[0000] 2D F2 C3 E3 15 05 ED 58 -......X
[2018/03/19 11:13:13.167502, 2] ../libcli/auth/ntlm_check.c:424(ntlm_password_check)
ntlm_password_check: NTLMv1 passwords NOT PERMITTED for user duncan
[2018/03/19 11:13:13.167518, 3] ../libcli/auth/ntlm_check.c:431(ntlm_password_check)
ntlm_password_check: NEITHER LanMan nor NT password supplied for user duncan
[2018/03/19 11:13:13.167630, 5] ../source4/dsdb/common/util.c:5252(dsdb_update_bad_pwd_count)
Not updating badPwdCount on CN=duncan,CN=Users,DC=ad,DC=goldblattsystems,DC=com after wrong password
[2018/03/19 11:13:13.167656, 2] ../source4/auth/ntlm/auth.c:430(auth_check_password_recv)
auth_check_password_recv: sam_ignoredomain authentication for user [AD\duncan] FAILED with error NT_STATUS_WRONG_PASSWORD
[2018/03/19 11:13:13.348906, 3] ../source4/smbd/service_stream.c:66(stream_terminate_connection)
Terminating connection - 'ldapsrv_call_loop: tstream_read_pdu_blob_recv() - NT_STATUS_CONNECTION_DISCONNECTED'
[2018/03/19 11:13:13.348929, 3] ../source4/smbd/process_single.c:114(single_terminate)
single_terminate: reason[ldapsrv_call_loop: tstream_read_pdu_blob_recv() - NT_STATUS_CONNECTION_DISCONNECTED]
Was ist die Ursache dafür? Wie kann ich das Problem beheben?
Antwort1
Sie müssen weder die ntlm_auth
Zeile in aktivieren /etc/raddb/mods-available/mschap
noch ntlm auth = yes
in Ihrem festlegen smb.conf
.Da MSCHAPv2 NTLMv2 nicht zu unterstützen scheint, DuTunmüssen Sie Folgendes in Ihrem festlegen smb.conf
:
ntlm auth = mschapv2-and-ntlmv2-only
Zitierendie smb.conf-Manpage:
„Erlauben Sie NTLMv1 nur, wenn der Client verspricht, dass er eine MSCHAPv2-Authentifizierung bereitstellt (z. B. das
ntlm_auth
Tool).“
Bei modernen Sambas und aktuellen Versionen von Freeradius ist die Aktivierung jedoch nicht mehr ntlm_auth
explizit erforderlich, daFreeradius 3.0.8 und neuere Versionen können direkt mit Winbind kommunizieren. Denken Sie daran, ihm Leseberechtigungen für die Pipe von Winbind zu erteilen! Unter Debian könnte man beispielsweise ausführen setfacl -m u:freerad:rx /var/lib/samba/winbindd_privileged/
.
Alles in allem sind alle Änderungen an der Mschap-Modulkonfiguration, die ich vorgenommen habe, um Access-Accept von radtest -t mschap testaccount mypass 127.0.0.1 0 testing123
einer Debian-Buster-Box zu erhalten, auf der Samba als AD DC und Freeradius laufen, im folgenden Diff:
diff --git a/freeradius/3.0/mods-available/mschap b/freeradius/3.0/mods-available/mschap
index d7efcb1..e297ed4 100644
--- a/freeradius/3.0/mods-available/mschap
+++ b/freeradius/3.0/mods-available/mschap
@@ -21,12 +21,12 @@ mschap {
# if mppe is enabled require_encryption makes
# encryption moderate
#
-# require_encryption = yes
+ require_encryption = yes
# require_strong always requires 128 bit key
# encryption
#
-# require_strong = yes
+ require_strong = yes
# The module can perform authentication itself, OR
# use a Windows Domain Controller. This configuration
@@ -81,8 +81,8 @@ mschap {
# or later to be installed. Make sure that ntlm_auth above is
# commented out.
#
-# winbind_username = "%{mschap:User-Name}"
-# winbind_domain = "%{mschap:NT-Domain}"
+ winbind_username = "%{mschap:User-Name}"
+ winbind_domain = "%{%{mschap:NT-Domain}:-MYDOMAIN}"
# When using single sign-on with a winbind connection and the
# client uses a different casing for the username than the
@@ -91,7 +91,7 @@ mschap {
# user in the correct casing in the backend, and retry
# authentication with that username.
#
-# winbind_retry_with_normalised_username = no
+ winbind_retry_with_normalised_username = yes
#
# Information for the winbind connection pool. The configuration
(Bitte beachten Sie, dass dies winbind_retry_with_normalised_username
in diesem Testkontext wahrscheinlich irrelevant ist.)
MYDOMAIN
ist der Domänenname in der klassischen NT4-Form, nicht in der Kerberos-ähnlichen DOMAIN.TLD
Form. Selbst wenn Sie Freeradius nicht direkt auf dem DC ausführen, sollte die tatsächliche Mschap-Modulkonfiguration von Freeradius immer noch dieselbe sein, solange der Server der Domäne ordnungsgemäß beigetreten ist. Wenn der DC Windows ist, gibt es offensichtlich keine smb.conf, aber die Möglichkeit, NTLMv1 zu verwenden, hängt von derDomänenfunktionsebeneUndob der Benutzer zu einer geschützten Benutzergruppe gehört.
Beachten Sie, dass, wenn MSCHAPv2 für die Wi-Fi-Authentifizierung verwendet wird,Es sollte nur innerhalb von Tunneln mit gegenseitiger Authentifizierung verwendet werdenzum Schutz vor gefälschten Zugriffspunkten. Informationen zu den EAP-Typen finden Sie unterWikipediaEine Zusammenfassung der Clientbeschränkungen finden Sie in der zweiten Antwort inWarum würden Sie EAP-TTLS anstelle von PEAP verwenden?
Antwort2
Die Einstellung ntlm auth = yes
im globalen Abschnitt von smb.conf hat das Problem „behoben“. Ich würde gerne wieder dazu zurückkehren, ntlmv1 zu verbieten. Wenn also jemand eine Möglichkeit hat, dies ohne ntlmv1 zum Laufen zu bringen, posten Sie bitte Ihre eigene Antwort.