Re: Kerberos + Windows

Jeffrey E Altman <[email protected]> Wed, 24 Aug 2022 21:49:32 -0400
Newsgroups gmane.comp.file-systems.openafs.general
Organization AuriStor, Inc.
Message-ID <[email protected]>
On 8/24/2022 12:53 PM, Ben Huntsman ([email protected]) wrote:
>
>    Here's some configuration info:
>
>    Let's say my cell is going to be mydomain.com.  My Active Directory 
> is ad.mydomain.com, and my AFS service account is srvAFS.

When installing Active Directory for a domain "mydomain.com" it is best 
if the Active Directory domain is "MYDOMAIN.COM" instead of 
"AD.MYDOMAIN.COM".  This is because Kerberos clients will attempt to use 
the DNS name of the host as the Kerberos realm name.   The use of 
"AD.MYDOMAIN.COM" or "WIN.MYDOMAIN.COM" naming is common only in cases 
where there is a pre-existing Kerberos realm for "MYDOMAIN.COM".


> Here's my krb5.conf:
>
> [libdefaults]
>         default_realm = AD.MYDOMAIN.COM
>         default_keytab_name = FILE:/etc/krb5/krb5.keytab
>         dns_lookup_realm = true
>         dns_lookup_kdc = true
>         forwardable = true
>
> [realms]
>         AD.MYDOMAIN.COM = {
>                 kdc = ad.mydomain.com:88
>                 admin_server = ad.mydomain.com:749
>                 default_domain = ad.mydomain.com
>         }
>
> [domain_realm]
>         .ad.mydomain.com = AD.MYDOMAIN.COM
>         ad.mydomain.com = AD.MYDOMAIN.COM


You also need to add


     .mydomain.com = AD.MYDOMAIN.COM

     mydomain.com = AD.MYDOMAIN.COM


since the Kerberos realm is not the same as the DNS domain name used for 
the AFS service principal.

>
> [logging]
>         kdc = FILE:/var/krb5/log/krb5kdc.log
>         admin_server = FILE:/var/krb5/log/kadmin.log
>         kadmin_local = FILE:/var/krb5/log/kadmin_local.log
>         default = FILE:/var/krb5/log/krb5lib.log
>
>
> I then created the service account srvAFS, and extracted a keytab on 
> the Domain Controller using the following command:
>
> ktpass /princ afs/[email protected] /mapuser srvAFS /mapop 
> add /out rxkad.keytab +rndpass /crypto all /ptype KRB5_NT_PRINCIPAL 
> +dumpsalt

The use of "afs/[email protected]" is correct.     The 
"[email protected]" service principal name should no longer be used 
and must never be used with Active Directory.


>
> I verified that the account did not have the "Use only Kerberos DES 
> encryption types for this account" box checked. I then copied the 
> rxkad.keytab over to the UNIX host.  I built OpenAFS with a prefix of 
> /opt/openafs, so I put the keytab in /opt/openafs/etc/openafs/server
>
> I used ktutil to delete the two des entries in the keytab. ktutil 
> indicates that the KVNO is 5.
>
> I then added the keys to OpenAFS using the command:
>
> asetkey add rxkad_krb5 5 17 
> /opt/openafs/etc/openafs/server/rxkad.keytab afs/mydomain.com
> asetkey add rxkad_krb5 5 18 
> /opt/openafs/etc/openafs/server/rxkad.keytab afs/mydomain.com

For an Active Directory realm you most likely also need to add rc4-hmac, 
enctype 23.


Did the above "asetkey" commands succeed?   Since the cell is named 
"mydomain.com" I would expect asetkey to expand "afs/mydomain.com" to 
"afs/[email protected]" which is not going to be present in the 
rxkad.keytab file.


What is the output of "asetkey list" after the above commands were executed?

>
> But things aren't quite working:
>
> # ls /afs
> afs: Tokens for user of AFS id 204 for cell mydomain.com are discarded 
> (rxkad error=19270408, server 192.168.0.114)
> ls: /afs: The file access permissions do not allow the specified action.
>
> # kvno [email protected]
> kvno: Server not found in Kerberos database while getting credentials 
> for [email protected]
This is not expected to work.
>
> # vos listvol myserver
> Could not fetch the list of partitions from the server
> rxk: ticket contained unknown key version number
> Error in vos listvol command.
> rxk: ticket contained unknown key version number

19270408 = rxk: ticket contained unknown key version number


It means the OpenAFS servers are not finding the expected key entry.   
There is not a match for the combination of enctype and key version 
number and name.


> # kinit -kt /opt/openafs/etc/openafs/server/rxkad.keytab 
> afs/[email protected]
>
The above command is using the afs/[email protected] keytab 
entry to obtain a client Ticket Granting Ticket.    I doubt that is what 
you intended.


Instead you wanted to "kinit" using a client principal and then execute 
the kvno command below.

> # kvno afs/[email protected]
> afs/[email protected]: kvno = 5

In addition to the key version number you also need to know the 
encryption type used to encrypt the service private portion of the 
afs/[email protected] service ticket.  It is that encryption 
type which does not need to match either the encryption type used to 
encrypt the client private portion of the ticket or the session key 
which needs to match the keys added via asetkey.


After adding the keys via "asetkey" did you install KeyFileExt on every 
server in the cell?


Did you restart the services or touch the server instance of the 
CellServDB file to force the new keys to be loaded?


>
> Did I miss something, or make a mistake along the way somewhere?

Ben mentions in a separate reply that the OpenAFS krb.conf file needs to 
be created and specify the local authentication realm as 
"AD.MYDOMAIN.COM".  Failure to do so will prevent authorization from 
succeeding but would not result in a key version not found error.


Jeffrey Altman
smime.p7s (application/pkcs7-signature, 3.9 KB) - not displayed