So debugging this with Wireshark showed that during the SPNEGO negotiation,
server and client could not settle on a mutually supported authentication
mechanism. The server was only offering NTLMSSP while the client offers MS
KRB5/KRB5 (due to --use-kerberos=required).

The server needs to have "kerberos method" set to use the right keytab, for
some reason "system keytab" does not work and I had to explicitly set

   kerberos method = dedicated keytab
   dedicated keytab file = /etc/krb5.keytab

This allows SPNEGO negotiation to succeed but leads to the next error:

[2023/09/26 15:21:29.755056,  5] 
../../source3/auth/auth.c:565(make_auth3_context_for_ntlm)
  make_auth3_context_for_ntlm: Making default auth method list for server role 
= 'standalone server', encrypt passwords = yes
[2023/09/26 15:21:29.755119,  5] ../../source3/auth/auth.c:52(smb_register_auth)
  Attempting to register auth backend anonymous
[2023/09/26 15:21:29.755141,  5] ../../source3/auth/auth.c:64(smb_register_auth)
  Successfully added auth method 'anonymous'
[2023/09/26 15:21:29.755154,  5] ../../source3/auth/auth.c:52(smb_register_auth)
  Attempting to register auth backend sam
[2023/09/26 15:21:29.755164,  5] ../../source3/auth/auth.c:64(smb_register_auth)
  Successfully added auth method 'sam'
[2023/09/26 15:21:29.755173,  5] ../../source3/auth/auth.c:52(smb_register_auth)
  Attempting to register auth backend sam_ignoredomain
[2023/09/26 15:21:29.755183,  5] ../../source3/auth/auth.c:64(smb_register_auth)
  Successfully added auth method 'sam_ignoredomain'
[2023/09/26 15:21:29.755191,  5] ../../source3/auth/auth.c:52(smb_register_auth)
  Attempting to register auth backend sam_netlogon3
[2023/09/26 15:21:29.755201,  5] ../../source3/auth/auth.c:64(smb_register_auth)
  Successfully added auth method 'sam_netlogon3'
[2023/09/26 15:21:29.755210,  5] ../../source3/auth/auth.c:52(smb_register_auth)
  Attempting to register auth backend winbind
[2023/09/26 15:21:29.755219,  5] ../../source3/auth/auth.c:64(smb_register_auth)
  Successfully added auth method 'winbind'
[2023/09/26 15:21:29.755228,  5] ../../source3/auth/auth.c:52(smb_register_auth)
  Attempting to register auth backend unix
[2023/09/26 15:21:29.755237,  5] ../../source3/auth/auth.c:64(smb_register_auth)
  Successfully added auth method 'unix'
[2023/09/26 15:21:29.755246,  5] ../../source3/auth/auth.c:426(load_auth_module)
  load_auth_module: Attempting to find an auth method to match anonymous
[2023/09/26 15:21:29.755276,  5] ../../source3/auth/auth.c:451(load_auth_module)
  load_auth_module: auth method anonymous has a valid init
[2023/09/26 15:21:29.755286,  5] ../../source3/auth/auth.c:426(load_auth_module)
  load_auth_module: Attempting to find an auth method to match sam_ignoredomain
[2023/09/26 15:21:29.755296,  5] ../../source3/auth/auth.c:451(load_auth_module)
  load_auth_module: auth method sam_ignoredomain has a valid init
[2023/09/26 15:21:29.757684,  3] 
../../auth/gensec/gensec_start.c:1083(gensec_register)
  GENSEC backend 'gssapi_spnego' registered
[2023/09/26 15:21:29.757719,  3] 
../../auth/gensec/gensec_start.c:1083(gensec_register)
  GENSEC backend 'gssapi_krb5' registered
[2023/09/26 15:21:29.757732,  3] 
../../auth/gensec/gensec_start.c:1083(gensec_register)
  GENSEC backend 'gssapi_krb5_sasl' registered
[2023/09/26 15:21:29.757744,  3] 
../../auth/gensec/gensec_start.c:1083(gensec_register)
  GENSEC backend 'spnego' registered
[2023/09/26 15:21:29.757754,  3] 
../../auth/gensec/gensec_start.c:1083(gensec_register)
  GENSEC backend 'schannel' registered
[2023/09/26 15:21:29.757764,  3] 
../../auth/gensec/gensec_start.c:1083(gensec_register)
  GENSEC backend 'ncalrpc_as_system' registered
[2023/09/26 15:21:29.757774,  3] 
../../auth/gensec/gensec_start.c:1083(gensec_register)
  GENSEC backend 'sasl-EXTERNAL' registered
[2023/09/26 15:21:29.757784,  3] 
../../auth/gensec/gensec_start.c:1083(gensec_register)
  GENSEC backend 'ntlmssp' registered
[2023/09/26 15:21:29.757793,  3] 
../../auth/gensec/gensec_start.c:1083(gensec_register)
  GENSEC backend 'ntlmssp_resume_ccache' registered
[2023/09/26 15:21:29.757803,  3] 
../../auth/gensec/gensec_start.c:1083(gensec_register)
  GENSEC backend 'http_basic' registered
[2023/09/26 15:21:29.757813,  3] 
../../auth/gensec/gensec_start.c:1083(gensec_register)
  GENSEC backend 'http_ntlm' registered
[2023/09/26 15:21:29.757822,  3] 
../../auth/gensec/gensec_start.c:1083(gensec_register)
  GENSEC backend 'http_negotiate' registered
[2023/09/26 15:21:29.757835,  3] 
../../auth/gensec/gensec_start.c:1083(gensec_register)
  GENSEC backend 'krb5' registered
[2023/09/26 15:21:29.757853,  3] 
../../auth/gensec/gensec_start.c:1083(gensec_register)
  GENSEC backend 'fake_gssapi_krb5' registered
[2023/09/26 15:21:29.757980,  5] 
../../auth/gensec/gensec_start.c:844(gensec_start_mech)
  Starting GENSEC mechanism spnego
[2023/09/26 15:21:29.758031,  5] 
../../auth/gensec/gensec_start.c:844(gensec_start_mech)
  Starting GENSEC submechanism gse_krb5
[2023/09/26 15:21:29.767904,  5] 
../../source3/auth/auth.c:565(make_auth3_context_for_ntlm)
  make_auth3_context_for_ntlm: Making default auth method list for server role 
= 'standalone server', encrypt passwords = yes
[2023/09/26 15:21:29.767924,  5] ../../source3/auth/auth.c:426(load_auth_module)
  load_auth_module: Attempting to find an auth method to match anonymous
[2023/09/26 15:21:29.767931,  5] ../../source3/auth/auth.c:451(load_auth_module)
  load_auth_module: auth method anonymous has a valid init
[2023/09/26 15:21:29.767936,  5] ../../source3/auth/auth.c:426(load_auth_module)
  load_auth_module: Attempting to find an auth method to match sam_ignoredomain
[2023/09/26 15:21:29.767941,  5] ../../source3/auth/auth.c:451(load_auth_module)
  load_auth_module: auth method sam_ignoredomain has a valid init
[2023/09/26 15:21:29.767971,  5] 
../../auth/gensec/gensec_start.c:844(gensec_start_mech)
  Starting GENSEC mechanism spnego
[2023/09/26 15:21:29.768004,  5] 
../../auth/gensec/gensec_start.c:844(gensec_start_mech)
  Starting GENSEC submechanism gse_krb5
[2023/09/26 15:21:29.768378,  1] 
../../source3/auth/auth_generic.c:211(auth3_generate_session_info_pac)
  auth3_generate_session_info_pac: Unexpected PAC for [atest@INTERN] in 
standalone mode - NT_STATUS_BAD_TOKEN_TYPE

This leads to a bug in Samba, based on false assumptions, which was
introduced in 2021 and makes it impossible to use MIT Kerberos
authentication with the standalone server role.

There is a long thread on the Samba list starting at
https://lists.samba.org/archive/samba/2023-April/244842.html about it,
the actual cause is described by Andrew Bartlett from the Samba team:

    > So I knew this would happen, sorry about that.
    >
    > When we did the big 2021 security fixes, we strictly set a line between
    > 'AD has a PAC' and 'MIT Krb5 (traditional) does not'.
    >
    > This was meant to ensure that folks would not connect Samba as a
    > 'standalone' server in an AD domain, bypassing the security mitigation
    > we put in place against the 'dollar ticket attack' where users could
    > create an account called 'root$' but print it as 'root'.
    >
    > The problem is that subsequent to that, I saw that the MIT folks
    > decided to always issue a PAC, just without the LOGON_INFO
    > component.  Samba doesn't do well with that, and a fix is needed both
    > in this code an in winbindd to change the test from 'has a PAC' to 'has a 
PAC with LOGON_INFO'.

    (see https://lists.samba.org/archive/samba/2023-April/244999.html)

So if we don't want to set up  a AD DC we will probably not be able to use
Kerberos authentication with our current setup.


-- 
Guido Berhoerster

Reply via email to