Kerberos su slackware


 




Premessa

Questa guida non intende approffondire su kerberos

ma solo facilitarne l'installazione su slackware,è necessario

quindi avere qualche nozione di kerberos e reti prima di

proseguire,in rete trovate tantissima documentazione.

Vi ricordo che con kerberos aggiungete a slackware

un altro sistema di autenticazione e che la guida è

da intendersi a scopo puramente informativo/istruttivo,ed è

sconsigliato applicarla in ambienti di produzione.

È consigliato l'uso di slackyd e slackpkg per installare

i programmi.

Installazione

Installate questi pacchetti:ntpd e krb5

# slackyd -g krb5

# slackyd -B krb5 #(se usate slack64)

# slackpkg install ntpd

con questo comando viene installato(o compilato

se usate la 64bit e sapete modificare gli slackbuild)

ntpd è necessario in quanto il server kerberos e i

client devono essere sincronizzati.

Configurazione di kerberos

Supponiamo il vostro host sia chiamato Slack e il dominio sia

example.org.

#cat /etc/hosts
127.0.0.1               localhost
192.168.0.3             Slack.example.org Slack krb.example.org

come vedete Slack.example.org e krb.example.org puntano a 192.168.0.3

questo è necessario per il corretto funzionamento di kerberos,ora

creiamo 2 files di testo

# touch /var/krb5kdc/kadm5.acl /etc/krb5.conf


e li editiamo

#/etc/krb5.conf

[libdefaults]
        default_realm = EXAMPLE.ORG

[realms]

EXAMPLE.ORG = {
        kdc = slack.example.org
        admin_server = slack.example.org
        default_domain = example.org
}


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

[logging]
#       kdc = CONSOLE
#       kadmin = CONSOLE


attenzione a seguire scrupolosamente le maiuscole e minuscole.

#kadm5.acl
*/admin@EXAMPLE.ORG  *

Avvio di kerberos

Avviamo kerberos(a parte kdb5_util conviene

mettere gli altri 2 comandi in rc.local)

# kdb5_util create -s
# kadmind &
# krb5kdc &


con kdb5 abbiamo creato il database mentre gli altri 2 comandi avviano il server

adesso con kadmin.local creiamo gli utenti(chiamati da kerberos principal)

#kadmin.local
Authenticating as principal root/admin@EXAMPLE.ORG with password.
kadmin.local:  addprinc root/admin
kadmin.local:  addprinc vostroutente
kadmin.local:  addprinc -randkey host/slack.example.org
kadmin.local: ktadd host/slack.example.org@EXAMPLE.ORG


come potete vedere abbiamo aggiunto come utente normale

"vostroutente" e come amministratore root,abbiamo anche

aggiunto l'host slack.example.org nel db kerberos(attenzione

alla randkey(crea una chiave arbitraria) ed alla voce ktadd che aggiunge l'host al keytab)

Adesso possiamo usare kerberos e servizi inclusi

diamo

#  kadmin


se si connette senza problemi siamo a posto.

Ora loggatevi come l'utente aggiunto prima al kadmin(vostroutente)

e date kinit(per l'host e per l'utente) e klist,ora dopo ogni login dovreste vedere il "biglietto"

di kerberos.

#  kinit -k host/slack.example.org
#  kinit vostroutente

otteremo dando $ klist

May  4 22:22:12  May  5 08:22:12  krbtgt/EXAMPLE.ORG@EXAMPLE.ORG



Autenticazione kerberos+pam

Questo è il passo più noioso,ma essenziale in quanto ci permetterà

dopo l'accesso di ottenere automaticamente il biglietto kerberos

sempre che il nostro utente sia stato aggiunto nel db precedentemente.

Installiamo le PAM

# slackyd -g pam

# slackyd -B pam #(se usate slack64)

date ctrl+c eliminate la patch che blocca pam

e modificate lo slackbuild che sarà come questo

./configure \

--prefix=/usr \

--disable-shared \

--disable-desrpc \

--with-libpam \

prima di ricompilare date

# cd /usr/include

# mkdir security

# cd security

# ln -s /usr/include/pam/* .

ricompiliamo...

# sh linux-pam*.SlackBuild

# upgradepkg --install-new linux-pam*.tgz

adesso faremo lo stesso con shadow

la modifica allo slackbuild

./configure \

--prefix=/usr \

--disable-shared \

--disable-desrpc \

--with-libpam

ricompiliamo...

# sh shadow*.SlackBuild

# upgradepkg --reinstal shadow*.txz

adesso andate subito in /etc/pam.d e create gli scripts necessari al login,cambio pass,etc

cat > /etc/pam.d/adduser << "EOF"

#%PAM-1.0

#adduser

auth sufficient pam_rootok.so

auth required pam_unix.so

account required pam_unix.so

session required pam_unix.so

password required pam_permit.so

# End /etc/pam.d/adduser

EOF

cat > /etc/pam.d/chage << "EOF"

#%PAM-1.0

#chage

auth sufficient pam_rootok.so

auth required pam_unix.so

account required pam_unix.so

session required pam_unix.so

password required pam_permit.so

# End /etc/pam.d/chage

EOF

cat > /etc/pam.d/chfn << "EOF"

#%PAM-1.0

#chfn

auth sufficient pam_rootok.so

auth required pam_unix.so

account required pam_unix.so

session required pam_unix.so

password required pam_permit.so

# End /etc/pam.d/chfn

EOF

cat > /etc/pam.d/chgpasswd << "EOF"

#%PAM-1.0

#chgpasswd

auth sufficient pam_rootok.so

account required pam_permit.so

password include system-auth

# End /etc/pam.d/chgpasswd

EOF

cat > /etc/pam.d/chpasswd << "EOF"

#%PAM-1.0

#chpasswd

auth sufficient pam_rootok.so

auth required pam_unix.so

account required pam_unix.so

session required pam_unix.so

password required pam_permit.so

# End /etc/pam.d/chpasswd

EOF

cat > /etc/pam.d/chsh << "EOF"

#%PAM-1.0

#chsh

auth sufficient pam_rootok.so

auth required pam_unix.so

account required pam_unix.so

session required pam_unix.so

password required pam_permit.so

# End /etc/pam.d/chsh

EOF

cat > /etc/pam.d/groupadd << "EOF"

#%PAM-1.0

#groupadd

auth sufficient pam_rootok.so

auth required pam_unix.so

account required pam_unix.so

session required pam_unix.so

password required pam_permit.so

# End /etc/pam.d/groupadd

EOF

cat > /etc/pam.d/groupdel << "EOF"

#%PAM-1.0

#groupdel

auth sufficient pam_rootok.so

auth required pam_unix.so

account required pam_unix.so

session required pam_unix.so

password required pam_permit.so

# End /etc/pam.d/groupdel

EOF

cat > /etc/pam.d/groupmems << "EOF"

#%PAM-1.0

#groupmems

auth sufficient pam_rootok.so

account required pam_permit.so

password include system-auth

# End /etc/pam.d/groupmems

EOF

cat > /etc/pam.d/groupmod << "EOF"

#%PAM-1.0

#groupmod

auth sufficient pam_rootok.so

auth required pam_unix.so

account required pam_unix.so

session required pam_unix.so

password required pam_permit.so

# End /etc/pam.d/groupmod

EOF

cat > /etc/pam.d/kde << "EOF"

#%PAM-1.0

#kde

auth required pam_securetty.so

auth requisite pam_nologin.so

auth sufficient /usr/lib64/security/pam_krb5.so

auth required pam_unix.so nullok

auth required pam_tally.so onerr=succeed file=/var/log/faillog

# use this to lockout accounts for 10 minutes after 3 failed attempts

auth required pam_tally.so deny=2 unlock_time=600 onerr=succeed file=/var/log/faillog

account required pam_access.so

account required pam_time.so

account required /usr/lib64/security/pam_krb5.so

account required pam_unix.so

#password required pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3

#password required pam_unix.so md5 shadow use_authtok

session optional /usr/lib64/security/pam_krb5.so

session required pam_unix.so

session required pam_env.so

session required pam_motd.so

session required pam_limits.so

session optional pam_mail.so dir=/var/spool/mail standard

session optional pam_lastlog.so

# End /etc/pam.d/kde

EOF

cat > /etc/pam.d/login << "EOF"

#%PAM-1.0

#login

auth required pam_securetty.so

auth requisite pam_nologin.so

auth sufficient /usr/lib64/security/pam_krb5.so

auth required pam_unix.so nullok

auth required pam_tally.so onerr=succeed file=/var/log/faillog

# use this to lockout accounts for 10 minutes after 3 failed attempts

auth required pam_tally.so deny=2 unlock_time=600 onerr=succeed file=/var/log/faillog

account required pam_access.so

account required pam_time.so

account required /usr/lib64/security/pam_krb5.so

account required pam_unix.so

#password required pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3

#password required pam_unix.so md5 shadow use_authtok

session optional /usr/lib64/security/pam_krb5.so

session required pam_unix.so

session required pam_env.so

session required pam_motd.so

session required pam_limits.so

session optional pam_mail.so dir=/var/spool/mail standard

session optional pam_lastlog.so

# End /etc/pam.d/login

EOF

cat > /etc/pam.d/newusers << "EOF"

#%PAM-1.0

#newusers

auth sufficient pam_rootok.so

auth required pam_unix.so

account required pam_unix.so

session required pam_unix.so

password required pam_permit.so

# End /etc/pam.d/newusers

EOF

cat > /etc/pam.d/other << "EOF"

#%PAM-1.0

#other

auth required pam_unix.so

account required pam_unix.so

password required pam_unix.so

session required pam_unix.so

# End /etc/pam.d/other

EOF

cat > /etc/pam.d/passwd << "EOF"

#%PAM-1.0

#passwd

#password required pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3

#password required pam_unix.so md5 shadow use_authtok

password required pam_unix.so md5 shadow nullok

# End /etc/pam.d/passwd

EOF

cat > /etc/pam.d/shadow << "EOF"

#%PAM-1.0

#shadow

auth sufficient pam_rootok.so

auth required pam_unix.so

account required pam_unix.so

session required pam_unix.so

password required pam_permit.so

# End /etc/pam.d/shadow

EOF

cat > /etc/pam.d/ssh<< "EOF"

#%PAM-1.0

#ssh

auth required pam_securetty.so

auth requisite pam_nologin.so

auth sufficient /usr/lib64/security/pam_krb5.so

auth required pam_unix.so nullok

auth required pam_tally.so onerr=succeed file=/var/log/faillog

# use this to lockout accounts for 10 minutes after 3 failed attempts

auth required pam_tally.so deny=2 unlock_time=600 onerr=succeed file=/var/log/faillog

account required pam_access.so

account required pam_time.so

account required /usr/lib64/security/pam_krb5.so

account required pam_unix.so

#password required pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3

#password required pam_unix.so md5 shadow use_authtok

session optional /usr/lib64/security/pam_krb5.so

session required pam_unix.so

session required pam_env.so

session required pam_motd.so

session required pam_limits.so

session optional pam_mail.so dir=/var/spool/mail standard

session optional pam_lastlog.so

# End /etc/pam.d/ssh

EOF

cat > /etc/pam.d/su << "EOF"

#%PAM-1.0

#su

auth sufficient pam_rootok.so

# Uncomment the following line to implicitly trust users in the "wheel" group.

#auth sufficient pam_wheel.so trust use_uid

# Uncomment the following line to require a user to be in the "wheel" group.

#auth required pam_wheel.so use_uid

auth required pam_unix.so

account required pam_unix.so

session required pam_unix.so

# End /etc/pam.d/su

EOF

cat > /etc/pam.d/useradd << "EOF"

#%PAM-1.0

#useradd

auth sufficient pam_rootok.so

auth required pam_unix.so

account required pam_unix.so

session required pam_unix.so

password required pam_permit.so

# End /etc/pam.d/useradd

EOF

cat > /etc/pam.d/userdel<< "EOF"

#%PAM-1.0

#userdel

auth sufficient pam_rootok.so

auth required pam_unix.so

account required pam_unix.so

session required pam_unix.so

password required pam_permit.so

# End /etc/pam.d/userdel

EOF

cat > /etc/pam.d/usermod << "EOF"

#%PAM-1.0

#usermod

auth sufficient pam_rootok.so

auth required pam_unix.so

account required pam_unix.so

session required pam_unix.so

password required pam_permit.so

# End /etc/pam.d/usermod

EOF

ricompilate infine sudo e openssh

abilitando --with-pam nello slackbuild di sudo

e

abilitando --with-kerberos5 e with-pam e cancellando --disable-pam nello slackbuild di openssh

Adesso manca solo pam-krb5 modulo che ci consentirà di ottenere il biglietto in automatico dopo il login

potete fare il pacchetto o installarlo a mano(sconsigliato) qui trovate i sorgenti.

Adesso verifichiamo di ottenere un biglietto in automatico facendo il login

dalla macchina,appena loggati date $ klist dovrebbe apparire

Ticket cache: FILE:/tmp/krb5cc_1000_G12737

Default principal: giuseppe@ESEMPIO.IT

Valid starting Expires Service principal

09/25/09 18:16:33 09/26/09 18:16:33 krbtgt/ESEMPIO.IT@ESEMPIO.IT

Ovviamente è possibile usare soltanto l'autenticazione kerberos,prima

aggiungete un utente(addprinc) al db kerberos,poi date useradd mettendo una pass vuota,

il sistema non accetterà password vuota e autentica l'utente con la pass kerberos

Kerberos+ssh

Un ottima soluzione per la sicurezza è il login via ssh con kerberos

per abilitarlo configurate kerberos con queste opzioni

in sshd_config usate

ChallengeResponseAuthentication yes
KerberosAuthentication yes
KerberosOrLocalPasswd no
KerberosTicketCleanup yes


mentre in ssh_config

Host *
ForwardAgent no
ForwardX11 yes
RSAAuthentication yes
PasswordAuthentication yes
GSSAPIAuthentication yes


riavviate sshd per rendere attive le modifiche

# /etc/rc.d/rc.sshd restart




Kdm,Xdm,Gdm

Per abilitare pam e kerberos vanno ricompilati.

Referenze

Se volete approfondire consultate queste guide(attenzione perchè

alcune sono basate su altri sistemi UNix)

http://www.dia.unisa.it/~ads/corso-security/www/CORSO-0001/kerberos/index.html
http://www.debian-administration.org/articles/570
http://www.redhat.com/docs/manuals/linux/RHL-7.3-Manual/ref-guide/s1-kerberos-server.html
http://www.stacken.kth.se/lists/heimdal-discuss/2002-12/msg00020.html
http://stefano.dscnet.org/node/83

Torna all'indice


Aggiornato 26/09/09