Anonymous kerberos provides a mechanism for principals to authenticate to a remote service without disclosing their identity.There are two primary use cases:
- Principals with no Kerberos identity at all authenticating to create an identity or to protect some communication
- Principals authenticating to some external service, disclosing that they are affiliated with a particular realm but not disclosing their full identity.
There are two modes of anonymous Kerberos to meet these objectives: completely anonymous and realm-exposed.
In completely anonymous Kerberos, a principal can authenticate to a realm with no Kerberos identity in that realm. Diffie-Hellman key exchange is used to establish a shared secret.. To use completely anonymous Kerberos:
- Configure the KDC to support pkinit, setting at least pkinit_identity on the KDC.
- Set pkinit_anchors so that the client can verify the KDC certificate
- Create the WELLKNOWN/ANONYMOUS principal in the realm to signal that fully anonymous Kerberos is enabled.
On the client use kinit -n @REALM or kadmin -n @REALM to request anonymous tickets. In klist and in service ACLs the resulting authentication will use the WELLKNOWN/ANONYMOUS@WELLKNOWN:ANONYMOUS well known principal.
Realm Exposed Anonymous
Alternatively, clients can authenticate normally to the KDC but request that the KDC return a credential that only exposes the client's realm. The MIT Kerberos client is believed to support this mode as of Kerberos 1.8, although the KDC currently does not support this mode.
On the client, use kinit -n principal to authenticate. A password or other credential will be required just as if the -n flag is not included. However, the resulting principal will be WELLKNOWN/ANONYMOUS@REALM.
One common use case for anonymous Kerberos is to permit any user to register a host in a realm even if they don't have a Kerberos identity. That way, these automated installation systems can register a host for Kerberos so that Kerberos services can be established. To permit this use case, configure fully anonymous Kerberos as described above. Then, add the following entry to kadm5.acl
WELLKNOWN/ANONYMOUS@WELLKNOWN:ANONYMOUS a host/*@YOUR_REALM Status ==
See Projects/Anonymous pkinit for implementation status.