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.
# 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.
#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 * |
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 |
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 |
Per abilitare pam e kerberos vanno ricompilati.
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