Instalación do servidor kerberos en Ubuntu Server

De Manuais Informática - IES San Clemente.
Ir a la navegación Ir a la búsqueda

Neste apartado abordaremos os pasos necesarios para instalar o servidor kerberos e configuralo para que use como base de datos de usuarios o servidor LDAP. Pero en primeiro lugar, teremos que engadir no LDAP o esquema de kerberos, que define unha serie de atributos que o servidor kerberos precisará almacenar para os principals, e que deberán ter aqueles usuarios que vaian usar kerberos para autenticarse contra outros servizos.


Instalar e configurar o servidor kerberos

  • Teremos que configurar o servidor de kerberos para que actúe como Centro de Distribución de Chaves (KDC). Instalamos no servidor os paquetes necesarios:
sudo apt-get install krb5-kdc krb5-admin-server

Na instalación dos paquetes, pediránsenos algúns datos de configuración básicos para o novo servidor kerberos:


Configurar o servidor LDAP para servir de base de datos de kerberos

Incluír o esquema de kerberos no servidor LDAP

  • Instalaremos o paquete krb5-kdc-ldap que contén o esquema de kerberos para LDAP:
sudo apt-get install krb5-kdc-ldap


  • O paquete inclúe o esquema en formato schema e comprimido, así que o descomprimiremos e transformarémolo a formato LDIF para poder engadilo no LDAP:
sudo gzip -d /usr/share/doc/krb5-kdc-ldap/kerberos.schema.gz
sudo cp /usr/share/doc/krb5-kdc-ldap/kerberos.schema /etc/ldap/schema/


  • Creamos o ficheiro schema_convert.conf co seguinte contido:
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/collective.schema
include /etc/ldap/schema/corba.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/duaconf.schema
include /etc/ldap/schema/dyngroup.schema
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/java.schema
include /etc/ldap/schema/misc.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/openldap.schema
include /etc/ldap/schema/ppolicy.schema
include /etc/ldap/schema/kerberos.schema


  • Creamos un directorio temporal para almacenar o ficheiros LDIF:
mkdir /tmp/ldif_output


  • Usamos o comando slapcat para converter o ficheiro de esquema a LDIF:
slapcat -f schema_convert.conf -F /tmp/ldif_output -n0 -s "cn={12}kerberos,cn=schema,cn=config" > /tmp/cn=kerberos.ldif


  • Editamos o ficheiro creado por este último comando: /tmp/cn\=kerberos.ldif, cambiando estes dous atributos:
dn: cn=kerberos,cn=schema,cn=config
...
cn: kerberos


  • e borrando as seguintes liñas que se atopan ao final do ficheiro:
structuralObjectClass: olcSchemaConfig
entryUUID: 18ccd010-746b-102d-9fbe-3760cca765dc
creatorsName: cn=config
createTimestamp: 20090111203515Z
entryCSN: 20090111203515.326445Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20090111203515Z


  • Cargamos o esquema en formato LDIF (contrasinal 1234):
ldapadd -x -D cn=admin,cn=config -W -f /tmp/cn\=kerberos.ldif
Enter LDAP Password: 
adding new entry "cn=kerberos,cn=schema,cn=config"

Engadir os índices necesarios para as buscas de kerberos

  • Engadimos un índice para o atributo krbPrincipalName, que almacena o nome do usuario ou principal, que será o dato polo que kerberos buscará aos usuarios (Premer despois da última liña Control+D):
ldapmodify -x -D cn=admin,cn=config -W
Enter LDAP Password:
dn: olcDatabase={1}hdb,cn=config
add: olcDbIndex
olcDbIndex: krbPrincipalName eq,pres,sub

Actualizar a listas de control de acceso do LDAP

  • Utilizamos de novo o comando ldapmodify (De novo prememos Control+D para introducir as liñas en formato LDIF):
ldapmodify -x -D cn=admin,cn=config -W
Enter LDAP Password:
dn: olcDatabase={1}hdb,cn=config
replace: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange,krbPrincipalKey by self write by anonymous auth by dn.base="cn=admin,dc=iescalquera,dc=local" write by * none
-
add: olcAccess
olcAccess: to dn.base="" by * read
-
add: olcAccess
olcAccess: to * by dn="cn=admin,dc=iescalquera,dc=local" write by * read

Configurar o reino kerberos e autenticación contra o LDAP

Configurar kerberos para usar o LDAP como base de datos

  • Imos editar o ficheiro de configuración de kerberos /etc/krb5.conf incluíndo as liñas que aparecen en negriña. O que facemos con esta configuración é configurar o servidor kerberos para que use como base de datos de usuario o servidor LDAP. Tamén de paso imos activar os logs do servidor kerberos para poder analizar posibles erros:
[realms]
        IESCALQUERA.LOCAL = {
                kdc = server00.iescalquera.local
                admin_server = server00.iescalquera.local
                default_domain = iescalquera.local
                database_module = openldap_ldapconf
        }

[domain_realm]
        .iescalquera.local = IESCALQUERA.LOCAL
        iescalquera.local = IESCALQUERA.LOCAL

[dbdefaults]
        ldap_kerberos_container_dn = dc=iescalquera,dc=local

[dbmodules]
        openldap_ldapconf = {
                db_library = kldap
                ldap_kdc_dn = "cn=admin,dc=iescalquera,dc=local"

                # este obxecto precisa ter permisos de lectura no contedor
                # do reino, contedor de usuario e subarbores do reino
                ldap_kadmind_dn = "cn=admin,dc=iescalquera,dc=local"

                ldap_service_password_file = /etc/krb5kdc/service.keyfile
                ldap_servers = ldapi:///
                ldap_conns_per_server = 5
        }

[logging]
     kdc = SYSLOG:INFO:DAEMON
     admin_server = SYSLOG:INFO:DAEMON
     default = SYSLOG:INFO:DAEMON

Crear e configurar o reino kerberos

  • Usamos o comando kdb5_ldap_util utility para crear o reino de kerberos. O comando solicitaranos o contrasinal do usuario administrador do LDAP (admin) e despois establecer un contrasinal para a base de datos mestra do LDAP (poremos abc123.):
sudo kdb5_ldap_util -D  cn=admin,dc=iescalquera,dc=local create -subtrees dc=iescalquera,dc=local -r IESCALQUERA.LOCAL -s -H ldap://localhost
Password for "cn=admin,dc=iescalquera,dc=local": 
Initializing database for realm 'IESCALQUERA.LOCAL'
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: 


  • Creamos un ficheiro no que se almacena o contrasinal que terá que usar kerberos para conectarse ao servidor LDAP:
sudo kdb5_ldap_util -D  cn=admin,dc=iescalquera,dc=local stashsrvpw -f /etc/krb5kdc/service.keyfile cn=admin,dc=iescalquera,dc=local


  • Lanzamos os servizos de kerberos, para comprobar que os datos introducidos son correctos:
sudo /etc/init.d/krb5-admin-server restart
sudo /etc/init.d/krb5-kdc restart

Sincronizar a hora do sistema

  • Como vimos na introdución a kerberos, neste protocolo é moi importante a sincronización da hora entre o cliente e o servidor, xa que o ticket emitido polo servidor kerberos ten unha validez entre unha data/hora inicio e data/hora fin, e o cliente crea o paquete autenticador introducindo a súa hora do sistema, que logo e comprobado polo Servidor do Servizo. É por iso que se a hora do sistema cliente e servidor teñen un desfase superior a 5 minutos, o protocolo kerberos pode comezar a fallar.


  • Para evitalo, imos sincronizar a hora do cliente e do servidor con un servidor de tempos, usando o protocolo NTP. En Ubuntu podemos usar o comando ntpdate para sincronizar a hora con un servidor de tempos. Por exemplo:
sudo ntpdate es.pool.ntp.org


  • Con isto xa temos sincronizada a hora do servidor con este servidor. Para maior seguridade, sería interesante definir unha tarefa programada que cada certas horas execute este comando, pero isto o veremos máis adiante.


Engadir usuario administrador de kerberos

  • En kerberos, os usuarios reciben o nome de pincipals. Imos crear un principal con privilexios de administración en kerberos, para poder manipular no futuro a información de kerberos (e lle teremos que asociar un contrasinal). Usaremos os comandos kadmin.local e kadmin, que permiten xestionar a información de kerberos (usaremos kadmin.local cando nos imos conectar a kerberos dende o propio servidor):
sudo kadmin.local -q "addprinc admin/admin"
Authenticating as principal root/admin@IESCALQUERA.LOCAL with password.
WARNING: no policy specified for admin/admin@IESCALQUERA.LOCAL; defaulting to no policy
Enter password for principal "admin/admin@IESCALQUERA.LOCAL": 
Re-enter password for principal "admin/admin@IESCALQUERA.LOCAL": 
Principal "admin/admin@IESCALQUERA.LOCAL" created.


  • Darémoslle privilexios a este usuario, creando o ficheiro /etc/krb5kdc/kadm5.acl co contido:
*/admin@IESCALQUERA.LOCAL	*

E reiniciamos de novo os servizos de kerberos para cargar a nova acl:

sudo /etc/init.d/krb5-admin-server restart
sudo /etc/init.d/krb5-kdc restart

Engadir un principal

Agora xa podemos engadir un principal que se corresponda con un usuario do dominio, como por exemplo o usuario xan. Asignarémoslle como contrasinal abc123. xa que é o mesmo contrasinal que o usuario xan ten no LDAP:

sudo kadmin.local
Authenticating as principal root/admin@IESCALQUERA.LOCAL with password.
kadmin.local:   addprinc -x dn="uid=xan,ou=usuarios,dc=iescalquera,dc=local" xan
WARNING: no policy specified for xan@IESCALQUERA.LOCAL; defaulting to no policy
Enter password for principal "xan@IESCALQUERA.LOCAL": 
Re-enter password for principal "xan@IESCALQUERA.LOCAL": 
Principal "xan@IESCALQUERA.LOCAL" created.
kadmin.local:  exit


-- Antonio de Andrés Lema e Carlos Carrión Álvarez