IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

Kerberos és un protocol d'autenticació que proporciona autenticació segur a aplicacions client-servidor utilitzant criptogràfia simètrica (criptogràfica de clau secreta).

Els tallafocs són un mecanisme insuficient de seguretat ja que com màxim restringeixen el trànsit d'entrada provinent de de 
lloc sense autorització, però no eviten que el trànsit que prové de localitzacions autoritzades realitzi activitats no  
autoritzades.

Introducció

Kerberos va ser creat al MIT com una solució als problemes de seguretat de la xarxa. El protocol Kerbero utilitza criptogràfia forta de forma que els clients puguin provar la seva identitat a un servidor i viceversa a través d'una xarxa insegura. Un cop un client i un servidor s'han autenticat, a més poden xifrar les seves comunicacions per tal d'assegurar la privacitat i la integritat de les dades transmeses.

Kerberos és un trusted third-party service. Això significa que un tercer (el servidor kerberos) que és un servidor de confiança per a totes les entitats de la xarxa (usuaris i serveis, normalment anomenats "principals"). Tots els principals comparteixen una paraula de pas o clau secreta amb el servidor Kerberos i això permet als principals verificar els missatges provinents del servidor kerberos són autèntics. D'aquesta forma, confiant en el servidor Kerberos, els usuaris i els serveis es poden autenticar entre si.

Durant un cert temps Kerberos va ser una tecnologia que no es podia exportar d'Estats Units. Un versió lliure i no documentada de Kerberos va ser implementada a Europa pel Royal Institute of Technology (KTH) de Suècia, aquesta implementació és coneguda com Heimdal Kerberos project. Estats Units va treure les restriccions d'ús de Kerberos a l'exterior.

Windows té la seva pròpia implementació i com no podia ser d'un altre manera hi ha hagut controvèrsia:

Cita: 2002 IDG report[13] by states:

A Microsoft Corp. executive testified at the software giant's remedy hearing that the company goes to great lengths to disclose interfaces and protocols that allow third-party software products to interact with Windows. But a lawyer with the states suing Microsoft pointed out that when it comes to the company's use of the Kerberos authentication specification, not everyone agrees.

Robert Short, vice president of Windows core technology at Microsoft, wrote in his direct testimony prepared before his appearance that non-Microsoft operating systems can disregard the portion of the Kerberos version 5 specification that Windows clients use for proprietary purposes and still achieve interoperability with the Microsoft OS. Microsoft takes advantage of unspecified fields in the Kerberos specification for storing Windows-specific authorization data, Short wrote. The designers of Kerberos left these fields undefined so that software developers could add their own authorization information, he said.

It so happens that Microsoft Windows clients depend on and expect the contents of the unspecified fields in the Kerberos 5 communications data stream for their Windows interoperability, particularly when Samba is expected to emulate a Windows Server 200x domain controller. But the interoperability issue goes far deeper than this. In the domain control protocols that are used by MS Windows XP Professional, there is a tight interdependency between the Kerberos protocols and the Microsoft distributed computing environment (DCE) RPCs that themselves are an integral part of the SMB/CIFS protocols as used by Microsoft.

Resposta de Microsoft:

The DCE Security Services are also layered on the Kerberos protocol. DCE authentication services use RPC representation of Kerberos protocol messages. In addition, DCE uses the authorization data field in Kerberos tickets to convey Privilege Attribute Certificates (PACs) that define user identity and group membership. The DCE PAC is used in a similar manner as Windows NT Security IDs for user authorization and access control. Windows NT services will not be able to translate DCE PACs into Windows NT user and group identifiers. This is not an issue with Kerberos interoperability, but rather an issue of interoperability between DCE and Windows NT access control information.

Instal·lació

Cal instal·lar els paquets:

$ sudo apt-get install krb5-user krb5-config libkadm55 libpam-krb5
  • krb5-user: Programes bàsics per tal d'autenticar utilitzar MIT Kerberos.
  • krb5-config: Fitxers de configuració per a la versió 5 de Kerberos
  • libkadm55: Les llibreries dinàmiques de MIT Kerberos(No longer available in Karmic!!)
  • libpam-krb5: Mòdul PAM per al Kerberos del MIT

Configuració

Si heu instal·lat el paquet krb5-config durant la instal·lació se us preguntarà per el servidor Kerberos del realm i el servidor administratiu:

What are the Kerberos servers for your realm?
What is the administrative server for your Kerberos realm?

Cal que poseu FQDN del vostre KDC. El que escolliu quedarà reflectit al fitxer /etc/krb5.conf

$ cat /etc/krb5.conf
[logging]
    default = FILE:/var/log/krb5.log

[libdefaults]
    default_realm = EXAMPLE.COM
    kdc_timesync = 1
    ccache_type = 4
    forwardable = true
    proxiable = true  

[realms]
    EXAMPLE.COM = {
        kdc = win2k3.example.com 
        admin_server = win2k3.example.com
        default_domain = EXAMPLE.COM 
    }

[domain_realm]
    .example.com = EXAMPLE.COM
    example.com = EXAMPLE.COM

Comprovar el funcionament

Podeu utilitzar l'ordre kinit per comprovar el correcte funcionament. El nom de domini ha d'estar el majúscules. Per exemple:

$ kinit Administrator@LAB.EXAMPLE.COM
Password for Administrator@LAB.EXAMPLE.COM: ****

On podeu substituir Administrator per qualsevolaltre compte vàlida del domini i no cal posar el DOMINI si aquest s'ha especificat correctament al fitxer de configuració de kerberos.

Podeu utilitzar l'ordre klist per tal de verificar que el TGT és vàlid:

$ klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: Administrator@LAB.EXAMPLE.COM

Valid starting     Expires            Service principal
01/21/05 10:28:51  01/21/05 20:27:43    krbtgt/LAB.EXAMPLE.COM@LAB.EXAMPLE.COM
        renew until 01/21/05 20:28:51

Si aquest test funciona, aleshores us heu autenticat correctament amb Kerberos.

Es pot alliberar el ticket amb l'ordre kdestroy.

Glossari

Noms de màquina i DNS

Totes les màquines quesón part d'una autenticació a un realm Kerberos han de tenir assignat un Fully Qualified Domain Name o FQDN que sigui resoluble tant en forward com amb revers (és a dir de nom a IP i de IP a nom).

NOTA: Active Directory és molt depenent de DNS, si tens un domini amb un directori actiu ja existent i amb un servidor de DNS de Windowsj a existent, cal assegurar-se que la màquina que voleu utilitzar com a membre del domini active directory (p.ex. una Linux Ubuntu) ha detenir una entrada al servidor DSN de Windows.

Si ja teniu el DSN configurat el podeu provar amb:

$ nslookup server.example.com
$ nslookup <server ip address>

La sortida de la primera ordre ha de ser la IP i a la segona el FQDN de la màquina. Si no és així Kerberos no funcionarà.

Si no teniu DNS podeu utilitzar el fitxer /etc/hosts:

127.0.0.1 linuxwork.example.com localhost linuxwork

Sincronització de l'hora. NTP

El protocol de Kerberos requereix que l'hora del client i l'hora del servidor coincideixin, si no és així l'autenticació fallarà.La forma més simple de sincronitzar l'hora és utilitzar NTP.

NOTA: El servidors Active Directory Domain Controllers són també típicament servidors NTP, de tal forma que si voleu utilitzar Kerberos el millor quepodeu fer es obtenir l'hora delpropi servidor Active Directory

.

exemple

TODO

IMPORTANT: Canvieu EDU.EXAMPLE.ORG i kerberos.edu.example.org pel que pertoqui en el vostres cas

Cal instal·lar els paquets:

$ sudo apt-get install krb5-kdc-ldap krb5-kdc krb5-admin-server krb5-config krb5-user

Fitxer /etc/krb5.conf:

[libdefaults]
        default_realm = EDU.EXAMPLE.ORG

[realms]
         EDU.EXAMPLE.ORG = {
             kdc = kerberos.edu.example.org
             admin_server = kerberos.edu.example.org
             master_kdc = kerberos.edu.example.org
             default_domain = edu.example.org
             database_module = ldap_edu.example.org
         }

[domain_realm]
         .edu.example.org = EDU.EXAMPLE.ORG
         edu.example.org = EDU.EXAMPLE.ORG

[dbmodules]
        ldap_edu.example.org = {
               db_library = kldap
               ldap_kerberos_container_dn = cn=krbcontainer,dc=edu,dc=example,dc=org
               ldap_kdc_dn = uid=admin,ou=People,dc=edu,dc=example,dc=org
               ldap_kadmind_dn = uid=admin,ou=People,dc=edu,dc=example,dc=org
               ldap_service_password_file = /etc/krb5.secrets
               ldap_servers = ldap://127.0.0.1
               ldap_conns_per_server = 5
        }

NOTA: En aquest exemple per connectar-se al LDAP no hi ha xifratge per que servidor LDAP i kerberos estan a la mateixa màquina

Per tal d'inicialitzar la base de dades kerberos al servidor LDAP, s'utilitza kdb5_ldap_util amb credencials ldap vàlides per tal de poder crear els valors inicials.

TODO: KDC database master key is set at this point. Make it difficult and write it down somewhere.
$ sudo kdb5_ldap_util -D uid=admin,ou=People,dc=edu,dc=example,dc=org \
create -subtrees dc=edu,dc=example,dc=org -s -H ldap://localhost -r EDU.EXAMPLE.ORG

Password for "uid=admin,ou=People,dc=edu,dc=example,dc=org":
Initializing database for realm 'EDU.EXAMPLE.ORG'
You will be prompted for the database Master Password.
It is important that you NOT FORGET this password.
Enter KDC database master key:
Re-enter KDC database master key to verify: 

Kerberos container is missing. Creating now...

Some hints for potential errors:
   * “kdb5_ldap_util: Kerberos container location not specified while reading kerberos container information” – /etc/krb5.conf has
     something wrong so that the realm doesn’t map to any databases
   * Server is unwilling to perform – the ldap suffix configured for the realm is probably not valid

Next the ldap user and password are stored for KDC to access and create principals:

$ sudo kdb5_ldap_util -D uid=admin,ou=People,dc=edu,dc=example,dc=org \
  stashsrvpw -f /etc/krb5.secrets uid=admin,ou=People,dc=edu,dc=example,dc=org

Crear un usuari admin que pugui modificar la base de dades:

$ sudo kadmin.local -q "addprinc john/admin@EDU.EXAMPLE.ORG

Finalment doneu a l'alumne permisos d'accés al fitxer /etc/krb5kdc/kadm5.acl:

  • /admin *

KDC is configured in /etc/krb5kdc/kdc.conf with fairly basic configuration:

[kdcdefaults]
    kdc_ports = 750,88

[realms]
    EDU.EXAMPLE.ORG = {
        database_name = /var/lib/krb5kdc/principal
        admin_keytab = FILE:/etc/krb5kdc/kadm5.keytab
        acl_file = /etc/krb5kdc/kadm5.acl
        key_stash_file = /etc/krb5kdc/stash
        kdc_ports = 750,88
        max_life = 10h 0m 0s
        max_renewable_life = 7d 0h 0m 0s
        master_key_type = des3-hmac-sha1
        supported_enctypes = aes256-cts:normal arcfour-hmac:normal des3-hmac-sha1:normal des-cbc-crc:normal des:normal des:v4 des:norealm des:onlyrealm des:afs3
        default_principal_flags = +preauth
    }

After restarting krb5-kdc and krb5-admin-server one should be able to run kinit and get a kerberos ticket:

$ kinit john/admin
Password for john/admin@EDU.EXAMPLE.ORG:
$ klist
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: john/admin@EDU.EXAMPLE.ORG

Valid starting     Expires            Service principal
01/28/10 03:10:20  01/29/10 03:10:20  krbtgt/EDU.EXAMPLE.ORG@EDU.EXAMPLE.ORG

If you now dump the ldap database, the principal for john/admin is stored in dn: krbPrincipalName=john/admin@EDU.EXAMPLE.ORG,cn=EDU.EXAMPLE.ORG, cn=krbcontainer,dc=edu,dc=example,dc=org

More user principals can be added with kadmin and kadmin.local using the addprinc command. The Ubuntu SingleSignOn manual page has more information about that. Desktop logins using kerberos

Getting client machines to do PAM authentication using kerberos is easy. The libpam-krb5 package is needed for this:

$ sudo apt-get install libpam-krb5

/etc/krb5.conf needs to be configured on the clients to point to the right server. This can be done also using proper name server settings to instruct the kerberos clients to contact the right server based on dns names.

[libdefaults]
        default_realm = EDU.EXAMPLE.ORG

[realms]
         EDU.EXAMPLE.ORG = {
             kdc = kerberos.edu.example.org
             admin_server = kerberos.edu.example.org
             master_kdc = kerberos.edu.example.org
             default_domain = edu.example.org
        }

Vegeu també


Enllaços externs