Kerberos V su OpenBSD
Vedremo come configurare un kerberos V kdc su OpenBSD, come impostare il sistema per autenticarsi sullo stesso e come configurare openssh per accettare login kerberos.
Non tratterò qui nè i principi di funzionamento di kerberos nè la configurazione di un dns autoritativo per un dominio locale, materiale in rete ce n’è a volontà. Bisogna però sapere che ogni host kerberizzato deve essere registrato nel dns, e deve essere presente un’associazione inversa valida.
Ad esempio, se il nostro host ha ip 192.168.1.1 e si chiama kdc.gnustile.lan, dovra esistere un PTR a kdc.gnustile.lan per 1.1.168.192.in-addr.arpa.
Ricordiamoci anche che nelle macchine che faranno solo da client non è necessario creare i file di configurazione di kerberos, in quanto le informazioni necessarie possono essere ricevute via dns (record SRV appropriati).
ad esempio:
$ORIGIN gnustile.lan.
_kerberos TXT "GNUSTILE.LAN"
_kerberos._tcp SRV 10 1 88 kdc.gnustile.lan.
_kerberos._udp SRV 10 1 88 kdc.gnustile.lan.
_kpasswd._udp SRV 10 1 464 kdc.gnustile.lan.
_kerberos-adm._tcp SRV 10 1 749 kdc.gnustile.lan.
Detto questo, passiamo alla pratica.
OpenBSD include Heimdal kerberos V. Vediamo come renderlo operativo: per prima cosa dobbiamo editare il file di configurazione, /etc/kerberosV/krb5.conf (troviamo un esempio del file in /etc/kerberosV/krb5.conf.sample)
il contenuto dovrà essere qualcosa simile al seguente:
[libdefaults]
# Set the realm of this host here
default_realm = GNUSTILE.LAN
# Maximum allowed time difference between KDC and this host
clockskew = 300
# Uncomment this if you run NAT on the client side of kauth.
# This may be considered a security issue though.
# no-addresses = yes
[realms]
GNUSTILE.LAN = {
# Specify KDC here
kdc = kdc.gnustile.lan
# Administration server, used for creating users etc.
admin_server = kdc.gnustile.lan
}
# This sections describes how to figure out a realm given a DNS name
[domain_realm]
.gnustile.lan = GNUSTILE.LAN
[kadmin]
# This is the trickiest part of a Kerberos installation. See the
# heimdal infopage for more information about encryption types.
# For a k5 only realm, this will be fine
default_keys = v5
[logging]
# The KDC logs by default, but it's nice to have a kadmind log as well.
kadmind = FILE:/var/heimdal/kadmind.log
passiamo ora alla creazione del database:
creiamo la cartella in cui risiederà
mkdir /var/heimdal
cd /var/heimdal
e creiamo la master-key:
kstash
passiamo quindi alla creazione vera e propria:
entriamo nella console di amministrazione con:
kadmin -l
e poi
kadmin> init GNUSTILE.LAN
Realm max ticket life [unlimited]:
Realm max renewable ticket life [unlimited]:
aggiungiamo quindi il nostro primo utente
kadmin> add utente1
Max ticket life [unlimited]:
Max renewable life [unlimited]:
Attributes []:
Password: (inseriamo la password)
Verifying password - Password: (confermiamola)
usciamo quindi dalla console di amministrazione:
kadmin> exit
facciamo partire il servizio kdc con:
/usr/libexec/kdc &
e proviamo a recuperare un ticker per l’utente appena creato:
kinit utente1
klist
Dovremmo ottenere un output del tipo:
Credentials cache: /tmp/krb5cc_0
Principal: [email protected]
Issued Expires Principal
Jun 9 07:25:55 Jun 9 17:25:55 krbtgt/[email protected]
Possiamo far partire al boot il KDC modificando la riga:
krb5_master_kdc=NO
in:
krb5_master_kdc=YES
nel file /etc/rc.conf.
Entriamo di nuovo nella console kadmin e creiamo ora la chiave per il nostro host:
kadmin -l
kadmin> add --random-key host/kdc.gnustile.lan
Max ticket life [unlimited]:
Max renewable life [unlimited]:
Attributes []:
e la estraiamo nel keytab. (/etc/kerberosV/krb5.keytab)
kadmin> ext host/kdc.gnustile.lan
procediamo allo stesso modo per tutte le macchine kerberizzate della nostra rete:
kadmin> add --random-key host/server1.gnustile.lan
e estraiamo in un keytab “esterno”, che poi porteremo in maniera sicura sulle macchine e rinomineremo in /etc/kerberosV/krb5.keytab.
kadmin> ext --keytab=/root/keytab.server1 host/server1.gnustile.lan
Se vogliamo consentire l’amministrazione remota dobbiamo configurare e far partire il demone kadmind, (con la configurazione precedente in rc.conf parte automaticamente)
/usr/libexec/kadmind &
dobbiamo poi definire che utenti, e con che privilegi, potranno accedere al database kerberos che risiede su kdc.gnustile.lan
editiamo quindi il file /var/heimdal/kadmind.acl:
stefano/[email protected] all
adminmenu/[email protected] change-password
avviamo anche il demone per il cambio password da remoto (partirà comunque automaticamente al boot)
/usr/libexec/kpasswdd &
Settiamo ora una politica per la complessità delle password: ri-editiamo /etc/kerberosV/krb5.conf e aggiungiamo:
[password_quality]
policies = minimum-length character-class
min_length = 8
min_classes = 3
in questo modo le password dovranno essere lunghe almeno 8 caratteri, e dovranno contenere almeno 3 classi di caratteri (le classi sono: lettere minuscole, lettere maiuscole, numeri, simboli).
Vediamo ora come creare una classe di utenti per il login di sistema con kerberos: editiamo /etc/login.conf e aggiungiamo:
kuser:\
:path=/usr/bin /bin /usr/sbin /sbin /usr/X11R6/bin /usr/local/bin:\
:umask=022:\
:datasize-max=512M:\
:datasize-cur=512M:\
:maxproc-max=128:\
:maxproc-cur=64:\
:openfiles-cur=128:\
:stacksize-cur=5M:\
:auth=krb5:
poi modifichiamo /etc/adduser.conf aggiungendo all’array login_classes anche kuser.
Creiamo ora il nostro utente, con il comando adduser
:
Reading /etc/shells
Check /etc/master.passwd
Check /etc/group
Ok, let's go.
Don't worry about mistakes. There will be a chance later to correct any input.
Enter username []: utente1
Enter full name []: Utente kerberizzato 1
Enter shell csh ksh nologin sh [ksh]:
Uid [1003]:
Login group utente1 [utente1]:
Login group is ``utente1''. Invite utente1 into other groups: guest no
[no]:
Login class authpf daemon default kuser staff [default]: kuser
Enter password []: (non insieriamo niente qui, la password è già memorizzata nel database kerberos)
Set the password so that user cannot logon? (y/n) [n]: y
Name: utente1
Password: ****
Fullname: Utente kerberizzato 1
Uid: 1003
Gid: 1003 (utente1)
Groups: utente1
Login Class: kuser
HOME: /home/utente1
Shell: /bin/ksh
OK? (y/n) [y]: y
Added user ``utente1''
Proviamo ora a fare login come utente1, con la password precedentemente inserita nel database kerberos;
una volta fatto login verifichiamo di avere il ticket con il comando klist
:
Credentials cache: FILE:/tmp/krb5cc_xByrs21856
Principal: [email protected]
Issued Expires Principal
Jul 9 15:50:38 Jul 10 01:50:38 krbtgt/[email protected]
configuriamo ora ssh per consentire login kerberizzati: modifichiamo i seguenti parametri in /etc/ssh/sshd_config:
PubkeyAuthentication no
ChallengeResponseAuthentication yes
KerberosAuthentication yes
KerberosOrLocalPasswd yes
KerberosTicketCleanup yes
GSSAPIAuthentication yes
e questi in /etc/ssh/ssh_config:
Host *
ForwardAgent no
ForwardX11 yes
RSAAuthentication yes
PasswordAuthentication yes
GSSAPIAuthentication yes
Molto bene, ora dovrebbe funzionare tutto (dopo aver riavviato sshd) :)