mirror of
https://github.com/samba-team/samba.git
synced 2025-01-07 17:18:11 +03:00
7055827b8f
This makes it clearer that we always want to do heimdal changes via the lorikeet-heimdal repository. Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Joseph Sutton <josephsutton@catalyst.net.nz> Autobuild-User(master): Joseph Sutton <jsutton@samba.org> Autobuild-Date(master): Wed Jan 19 21:41:59 UTC 2022 on sn-devel-184
316 lines
13 KiB
Plaintext
316 lines
13 KiB
Plaintext
@c $Id$
|
|
|
|
|
|
@node Windows compatibility, Programming with Kerberos, Kerberos 4 issues, Top
|
|
@comment node-name, next, previous, up
|
|
@chapter Windows compatibility
|
|
|
|
Microsoft Windows, starting from version 2000 (formerly known as Windows NT 5), implements Kerberos 5. Their implementation, however, has some quirks,
|
|
peculiarities, and bugs. This chapter is a short summary of the compatibility
|
|
issues between Heimdal and various Windows versions.
|
|
|
|
The big problem with the Kerberos implementation in Windows
|
|
is that the available documentation is more focused on getting
|
|
things to work rather than how they work, and not that useful in figuring
|
|
out how things really work. It's of course subject to change all the time and
|
|
mostly consists of our not so inspired guesses. Hopefully it's still
|
|
somewhat useful.
|
|
|
|
@menu
|
|
* Configuring Windows to use a Heimdal KDC::
|
|
* Inter-Realm keys (trust) between Windows and a Heimdal KDC::
|
|
* Create account mappings::
|
|
* Encryption types::
|
|
* Authorisation data::
|
|
* Quirks of Windows 2000 KDC::
|
|
* Useful links when reading about the Windows::
|
|
@end menu
|
|
|
|
@node Configuring Windows to use a Heimdal KDC, Inter-Realm keys (trust) between Windows and a Heimdal KDC, Windows compatibility, Windows compatibility
|
|
@comment node-name, next, precious, up
|
|
@section Configuring Windows to use a Heimdal KDC
|
|
|
|
You need the command line program called @command{ksetup.exe}. This program comes with the Windows Support Tools, available from either the installation CD-ROM (@file{SUPPORT/TOOLS/SUPPORT.CAB}), or from Microsoft web site. Starting from Windows 2008, it is already installed. This program is used to configure the Kerberos settings on a Workstation.
|
|
|
|
@command{Ksetup} store the domain information under the registry key:
|
|
@code{HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\LSA\Kerberos\Domains}.
|
|
|
|
Use the @command{kadmin} program in Heimdal to create a host principal in the
|
|
Kerberos realm.
|
|
|
|
@example
|
|
unix% kadmin
|
|
kadmin> ank --password=password host/datan.example.com
|
|
@end example
|
|
|
|
The name @samp{datan.example.com} should be replaced with DNS name of
|
|
the workstation.
|
|
|
|
You must configure the workstation as a member of a workgroup, as opposed
|
|
to a member in an NT domain, and specify the KDC server of the realm
|
|
as follows:
|
|
@example
|
|
C:> ksetup /setdomain EXAMPLE.COM
|
|
C:> ksetup /addkdc EXAMPLE.COM kdc.example.com
|
|
@end example
|
|
|
|
Set the machine password, i.e.@: create the local keytab:
|
|
@example
|
|
C:> ksetup /SetComputerPassword password
|
|
@end example
|
|
|
|
The password used in @kbd{ksetup /setmachpassword} must be the same
|
|
as the password used in the @kbd{kadmin ank} command.
|
|
|
|
The workstation must now be rebooted.
|
|
|
|
A mapping between local NT users and Kerberos principals must be specified.
|
|
You have two choices. First:
|
|
|
|
@example
|
|
C:> ksetup /mapuser user@@MY.REALM nt_user
|
|
@end example
|
|
|
|
This will map a user to a specific principal; this allows you to have
|
|
other usernames in the realm than in your NT user database. (Don't ask
|
|
me why on earth you would want that@enddots{})
|
|
|
|
You can also say:
|
|
@example
|
|
C:> ksetup /mapuser * *
|
|
@end example
|
|
The Windows machine will now map any user to the corresponding principal,
|
|
for example @samp{nisse} to the principal @samp{nisse@@MY.REALM}.
|
|
(This is most likely what you want.)
|
|
|
|
@node Inter-Realm keys (trust) between Windows and a Heimdal KDC, Create account mappings, Configuring Windows to use a Heimdal KDC, Windows compatibility
|
|
@comment node-name, next, precious, up
|
|
@section Inter-Realm keys (trust) between Windows and a Heimdal KDC
|
|
|
|
See also the Step-by-Step guide from Microsoft, referenced below.
|
|
|
|
Install Windows, and create a new controller (Active Directory
|
|
Server) for the domain.
|
|
|
|
By default the trust will be non-transitive. This means that only users
|
|
directly from the trusted domain may authenticate. This can be changed
|
|
to transitive by using the @command{netdom.exe} tool. @command{netdom.exe}
|
|
can also be used to add the trust between two realms.
|
|
|
|
You need to tell Windows on what hosts to find the KDCs for the
|
|
non-Windows realm with @command{ksetup}, see @xref{Configuring Windows
|
|
to use a Heimdal KDC}.
|
|
|
|
This needs to be done on all computers that want enable cross-realm
|
|
login with @code{Mapped Names}. @c XXX probably shouldn't be @code
|
|
|
|
Then you need to add the inter-realm keys on the Windows KDC@. Start the
|
|
Domain Tree Management tool (found in Programs, Administrative tools,
|
|
Active Directory Domains and Trusts).
|
|
|
|
Right click on Properties of your domain, select the Trust tab. Press
|
|
Add on the appropriate trust windows and enter domain name and
|
|
password. When prompted if this is a non-Windows Kerberos realm, press
|
|
OK.
|
|
|
|
Do not forget to add trusts in both directions (if that's what you want).
|
|
|
|
If you want to use @command{netdom.exe} instead of the Domain Tree
|
|
Management tool, you do it like this:
|
|
|
|
@example
|
|
netdom trust NT.REALM.EXAMPLE.COM /Domain:EXAMPLE.COM /add /realm /passwordt:TrustPassword
|
|
@end example
|
|
|
|
You also need to add the inter-realm keys to the Heimdal KDC. But take
|
|
care to the encryption types and salting used for those keys. There should be
|
|
no encryption type stronger than the one configured on Windows side for this
|
|
relationship, itself limited to the ones supported by this specific version of
|
|
Windows, nor any Kerberos 4 salted hashes, as Windows does not seem to
|
|
understand them. Otherwise, the trust will not works.
|
|
|
|
Here are the version-specific needed information:
|
|
@enumerate
|
|
@item Windows 2000: maximum encryption type is DES
|
|
@item Windows 2003: maximum encryption type is DES
|
|
@item Windows 2003RC2: maximum encryption type is RC4, relationship defaults to DES
|
|
@item Windows 2008: maximum encryption type is AES, relationship defaults to RC4
|
|
@end enumerate
|
|
|
|
For Windows 2003RC2, to change the trust encryption type, you have to use the
|
|
@command{ktpass}, from the Windows 2003 Resource kit *service pack2*, available
|
|
from Microsoft web site.
|
|
|
|
@example
|
|
C:> ktpass /MITRealmName UNIX.EXAMPLE.COM /TrustEncryp RC4
|
|
@end example
|
|
|
|
For Windows 2008, the same operation can be done with the @command{ksetup}, installed by default.
|
|
|
|
@example
|
|
C:> ksetup /SetEncTypeAttre EXAMPLE.COM AES256-SHA1
|
|
@end example
|
|
|
|
Once the relationship is correctly configured, you can add the required
|
|
inter-realm keys, using heimdal default encryption types:
|
|
|
|
@example
|
|
kadmin add krbtgt/NT.REALM.EXAMPLE.COM@@EXAMPLE.COM
|
|
kadmin add krbtgt/REALM.EXAMPLE.COM@@NT.EXAMPLE.COM
|
|
@end example
|
|
|
|
Use the same passwords for both keys.
|
|
|
|
And if needed, to remove unsupported encryptions, such as the following ones for a Windows 2003RC2 server.
|
|
|
|
@example
|
|
kadmin del_enctype krbtgt/REALM.EXAMPLE.COM@@NT.EXAMPLE.COM aes256-cts-hmac-sha1-96
|
|
kadmin del_enctype krbtgt/REALM.EXAMPLE.COM@@NT.EXAMPLE.COM des3-cbc-sha1
|
|
kadmin del_enctype krbtgt/NT.EXAMPLE.COM@@EXAMPLE.COM aes256-cts-hmac-sha1-96
|
|
kadmin del_enctype krbtgt/NT.EXAMPLE.COM@@EXAMPLE.COM des3-cbc-sha1
|
|
@end example
|
|
|
|
Do not forget to reboot before trying the new realm-trust (after
|
|
running @command{ksetup}). It looks like it might work, but packets are
|
|
never sent to the non-Windows KDC.
|
|
|
|
@node Create account mappings, Encryption types, Inter-Realm keys (trust) between Windows and a Heimdal KDC, Windows compatibility
|
|
@comment node-name, next, precious, up
|
|
@section Create account mappings
|
|
|
|
Start the @code{Active Directory Users and Computers} tool. Select the
|
|
View menu, that is in the left corner just below the real menu (or press
|
|
Alt-V), and select Advanced Features. Right click on the user that you
|
|
are going to do a name mapping for and choose Name mapping.
|
|
|
|
Click on the Kerberos Names tab and add a new principal from the
|
|
non-Windows domain.
|
|
|
|
@c XXX check entry name then I have network again
|
|
This adds @samp{authorizationNames} entry to the users LDAP entry to
|
|
the Active Directory LDAP catalog. When you create users by script you
|
|
can add this entry instead.
|
|
|
|
@node Encryption types, Authorisation data, Create account mappings, Windows compatibility
|
|
@comment node-name, next, previous, up
|
|
@section Encryption types
|
|
|
|
Windows 2000 supports both the standard DES encryptions (@samp{des-cbc-crc} and
|
|
@samp{des-cbc-md5}) and its own proprietary encryption that is based on MD4 and
|
|
RC4 that is documented in and is supposed to be described in
|
|
@file{draft-brezak-win2k-krb-rc4-hmac-03.txt}. New users will get both
|
|
MD4 and DES keys. Users that are converted from a NT4 database, will
|
|
only have MD4 passwords and will need a password change to get a DES
|
|
key.
|
|
|
|
@node Authorisation data, Quirks of Windows 2000 KDC, Encryption types, Windows compatibility
|
|
@comment node-name, next, previous, up
|
|
@section Authorisation data
|
|
|
|
The Windows 2000 KDC also adds extra authorisation data in tickets.
|
|
It is at this point unclear what triggers it to do this. The format of
|
|
this data is only available under a ``secret'' license from Microsoft,
|
|
which prohibits you implementing it.
|
|
|
|
A simple way of getting hold of the data to be able to understand it
|
|
better is described here.
|
|
|
|
@enumerate
|
|
@item Find the client example on using the SSPI in the SDK documentation.
|
|
@item Change ``AuthSamp'' in the source code to lowercase.
|
|
@item Build the program.
|
|
@item Add the ``authsamp'' principal with a known password to the
|
|
database. Make sure it has a DES key.
|
|
@item Run @kbd{ktutil add} to add the key for that principal to a
|
|
keytab.
|
|
@item Run @kbd{appl/test/nt_gss_server -p 2000 -s authsamp
|
|
@kbd{--dump-auth}=@var{file}} where @var{file} is an appropriate file.
|
|
@item It should authenticate and dump for you the authorisation data in
|
|
the file.
|
|
@item The tool @kbd{lib/asn1/asn1_print} is somewhat useful for
|
|
analysing the data.
|
|
@end enumerate
|
|
|
|
@node Quirks of Windows 2000 KDC, Useful links when reading about the Windows, Authorisation data, Windows compatibility
|
|
@comment node-name, next, previous, up
|
|
@section Quirks of Windows 2000 KDC
|
|
|
|
There are some issues with salts and Windows 2000. Using an empty salt---which is the only one that Kerberos 4 supported, and is therefore known
|
|
as a Kerberos 4 compatible salt---does not work, as far as we can tell
|
|
from out experiments and users' reports. Therefore, you have to make
|
|
sure you keep around keys with all the different types of salts that are
|
|
required. Microsoft have fixed this issue post Windows 2003.
|
|
|
|
Microsoft seems also to have forgotten to implement the checksum
|
|
algorithms @samp{rsa-md4-des} and @samp{rsa-md5-des}. This can make Name
|
|
mapping (@pxref{Create account mappings}) fail if a @samp{des-cbc-md5} key
|
|
is used. To make the KDC return only @samp{des-cbc-crc} you must delete
|
|
the @samp{des-cbc-md5} key from the kdc using the @kbd{kadmin
|
|
del_enctype} command.
|
|
|
|
@example
|
|
kadmin del_enctype lha des-cbc-md5
|
|
@end example
|
|
|
|
You should also add the following entries to the @file{krb5.conf} file:
|
|
|
|
@example
|
|
[libdefaults]
|
|
default_etypes = des-cbc-crc
|
|
default_etypes_des = des-cbc-crc
|
|
@end example
|
|
|
|
These configuration options will make sure that no checksums of the
|
|
unsupported types are generated.
|
|
|
|
@node Useful links when reading about the Windows, , Quirks of Windows 2000 KDC, Windows compatibility
|
|
@comment node-name, next, previous, up
|
|
@section Useful links when reading about the Windows
|
|
|
|
See also our paper presented at the 2001 Usenix Annual Technical
|
|
Conference, available in the proceedings or at
|
|
@uref{http://www.usenix.org/publications/library/proceedings/usenix01/freenix01/westerlund.html}.
|
|
|
|
There are lots of texts about Kerberos on Microsoft's web site, here is a
|
|
short list of the interesting documents that we have managed to find.
|
|
|
|
@itemize @bullet
|
|
|
|
@item Step-by-Step Guide to Kerberos 5 (krb5 1.0) Interoperability:
|
|
@uref{http://www.microsoft.com/technet/prodtechnol/windows2000serv/howto/kerbstep.mspx}.
|
|
Kerberos GSS-API (in Windows-eze SSPI), Windows as a client in a
|
|
non-Windows KDC realm, adding unix clients to a Windows 2000 KDC, and
|
|
adding cross-realm trust (@pxref{Inter-Realm keys (trust) between Windows
|
|
and a Heimdal KDC}).
|
|
|
|
@item Windows 2000 Kerberos Authentication:
|
|
@uref{www.microsoft.com/technet/prodtechnol/windows2000serv/deploy/confeat/kerberos.mspx}.
|
|
White paper that describes how Kerberos is used in Windows 2000.
|
|
|
|
@item Overview of Kerberos:
|
|
@uref{http://support.microsoft.com/support/kb/articles/Q248/7/58.ASP}.
|
|
Links to useful other links.
|
|
|
|
@c @item Klist for Windows:
|
|
@c @uref{http://msdn.microsoft.com/library/periodic/period00/security0500.htm}.
|
|
@c Describes where to get a klist for Windows 2000.
|
|
|
|
@item Event logging for Kerberos:
|
|
@uref{http://support.microsoft.com/support/kb/articles/Q262/1/77.ASP}.
|
|
Basically it say that you can add a registry key
|
|
@code{HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters\LogLevel}
|
|
with value DWORD equal to 1, and then you'll get logging in the Event
|
|
Logger.
|
|
|
|
@c @item Access to the Active Directory through LDAP:
|
|
@c @uref{http://msdn.microsoft.com/library/techart/kerberossamp.htm}
|
|
|
|
@end itemize
|
|
|
|
Other useful programs include these:
|
|
|
|
@itemize @bullet
|
|
@item pwdump2
|
|
@uref{http://www.bindview.com/Support/RAZOR/Utilities/Windows/pwdump2_readme.cfm}
|
|
@end itemize
|