AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 903445
Accepted
Dessa Simpson
Dessa Simpson
Asked: 2018-03-20 10:14:48 +0800 CST2018-03-20 10:14:48 +0800 CST 2018-03-20 10:14:48 +0800 CST

A autenticação MSCHAPv2 não está funcionando

  • 772

Estou lutando com isso há cerca de uma semana. Estou tentando obter um servidor RADIUS para autenticar em nosso Active Directory baseado em Samba, mas não consigo fazê-lo funcionar. Por causa de nossa infraestrutura, o PAP não funcionará. Como o AD não oferece uma boa senha de texto simples conhecida, o CHAP não funcionará. Então isso deixa MSCHAP.

O servidor RADIUS está em sua própria VM. A referida VM está vinculada ao domínio com o Winbind. Eu tenho o seguinte /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
    }
}

Quando tenho uma tentativa de autenticação do cliente, a radiusd -Xsaída relevante é:

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

E a saída do nível 5 do log do samba:

[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]

O que está causando isso? Como posso corrigi-lo?

active-directory
  • 2 2 respostas
  • 6474 Views

2 respostas

  • Voted
  1. pinjaliina
    2019-05-31T08:16:13+08:002019-05-31T08:16:13+08:00

    Você não precisa habilitar a ntlm_authlinha /etc/raddb/mods-available/mschapnem definir ntlm auth = yesem seu arquivo smb.conf. Como o MSCHAPv2 parece não suportar NTLMv2 , você precisa definir o seguinte em seu smb.conf:

    ntlm auth = mschapv2-and-ntlmv2-only
    

    Para citar a página de manual do smb.conf :

    ”Apenas permita NTLMv1 quando o cliente prometer que está fornecendo autenticação MSCHAPv2 (como a ntlm_authferramenta).”

    No entanto, com Sambas modernos e versões recentes do Freeradius você não precisa habilitar ntlm_authexplicitamente, porque o Freeradius 3.0.8 e os mais recentes podem se comunicar diretamente com o Winbind . Apenas lembre-se de dar permissões de leitura para o pipe do Winbind! Por exemplo. no Debian pode-se executar setfacl -m u:freerad:rx /var/lib/samba/winbindd_privileged/.

    Em suma, todas as alterações na configuração do módulo mschap que fiz para receber o Access-Accept de radtest -t mschap testaccount mypass 127.0.0.1 0 testing123uma caixa Debian Buster executando o Samba como AD DC e Freeradius estão no seguinte 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
    

    (Observe que winbind_retry_with_normalised_usernameprovavelmente é irrelevante neste contexto de teste.)

    MYDOMAINé o nome de domínio no formato NT4 clássico, não no DOMAIN.TLDformato semelhante ao Kerberos. Mesmo se você não estiver executando o Freeradius diretamente no DC, a configuração real do módulo mschap do Freeradius ainda deve ser a mesma, desde que o servidor tenha ingressado no domínio corretamente. Se o DC for Windows, obviamente não há smb.conf, mas a capacidade de usar NTLMv1 depende do nível funcional do domínio e se o usuário pertence a um grupo de usuários protegidos .

    Observe que, se o MSCHAPv2 for usado para autenticação Wi-Fi, ele deve ser usado apenas dentro de túneis autenticados mutuamente para proteger contra pontos de acesso falsos. Para os tipos de EAP, consulte a Wikipedia e para obter um resumo das restrições do cliente, consulte a segunda resposta em Por que você usaria EAP-TTLS em vez de PEAP?

    • 2
  2. Best Answer
    Dessa Simpson
    2018-03-24T10:31:06+08:002018-03-24T10:31:06+08:00

    Configurando ntlm auth = yesna seção global do smb.conf "corrigiu" isso. Eu gostaria de voltar a não permitir o ntlmv1, então, se alguém tiver uma maneira de fazer isso funcionar sem o ntlmv1, poste sua própria resposta.

    • 1

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve