MIT Kerberose kasutamine Debianiga

Allikas: Kuutõrvaja
Redaktsioon seisuga 23. juuni 2010, kell 16:31 kasutajalt Imre (arutelu | kaastöö) (Teise kasutaja rolli võtmine)

Sissejuhatus

Kerberos on SSO süsteem. MIT Kerberos http://web.mit.edu/Kerberos/ on üks Kerberos v5 protokolli http://www.faqs.org/rfcs/rfc1510.html implementatsioon.

Käesolevas tekstis tutvustatakse Kerberose tööleseadmist ning kasutamist SSH serveri ja kliendi näitel. Muud populaarsed nö kerberiseeritud teenused on nt NFS kasutamine Debianiga ja Samba.

Tööpõhimõte

Kerberose abil saab korraldada SSH serveri sshd teenuse kasutamise SSH klient arvuti kasutaja jaoks nii, et kasutajalt ei küsita ssh-server.loomaaed arvutisse sisselogimisel parooli.

     kerberos.loomaaed 
          ___
         |   | krb5kdc - 88/tcp
         |___| kadmind - 749/tcp
           |   /etc/krb5kdc/principal
           |
       ----|----------|-------------------------|---
                      |                         |
                    __|__                     __|__
                   |     | /tmp/krb5cc_1000  |     |  /etc/krb5.keytab
                   |_____|                   |_____|

             ssh-klient.loomaaed        ssh-server.loomaaed

Selline asjakorraldus on võimalik sellisele saladuste paigutusele ja kasutusele

  • Kerberose server teab kõigi kasutajate ja teenuste paroole, mis on kirjas failis /etc/krb5kdc/principal
  • SSH server teab ise enda nö teenuse parooli, mis on kirjas failis /etc/krb5.keytab
  • SSH kliendis töötav kasutaja on oma parooli alusel saanud Kerberose serverilt kasutada pilete (ingl. k. ticket), mis on kirjas failis /tmp/krb5cc_1000

Kui sellise saladuste paigutuse puhul SSH kliendis töötav kasutaja pöördub SSH serveri teenuse poole, siis on sshd teenusel võimalik kasutaja autentida ilma, et ssh kasutaja peaks mingit täiendavat parooli sisestama.

Käesoleval kasutusjuhul peab kasutaja priit olema kirjeldatud mõlema arvuti nö /etc/passwd failis tavapärasel moel.

Mõisted

  • võtmejaotuskeskus (ingl. Key Distribution Center, KDC)
  • osapool (ingl. k. principal)
  • pilet (ingl. k. ticket)
  • täpsustus (ingl. k. instance)
  • piletite hankimise pilet (ingl. k. Ticket Granting Ticket, TGT)
  • Generic Security Services Application Programming Interface, GSSAPI

Ettevalmistused

  • Asjaosaliste arvutite nimede päri-ja pöördteisendused peavad lahenema korrektselt.
  • Asjaosaliste arvutite kellaaeg peab olema sama.

Kerberose serveri tarkvara paigaldamine

Kerberose serverisse paigaldatakse tavaliselt selline tarkvara

# apt-get install krb5-kdc krb5-admin-server krb5-user krb5-config libkadm55 krb5-doc

Paigaldamisel tuletatakse arvuti dns domeeninimest Kerberose piirkonna nimi (ingl. realm) ning küsitakse kerberose serverite nimed, kusjuures paigaldamine lõpeb veateatega

krb5kdc: cannot initialize realm LOOMAAED - see log file for details
Setting up krb5-admin-server (1.6.dfsg.4~beta1-5lenny4) ...
kadmind: No such file or directory while initializing, aborting

Selles mõttes võib seda veateadet ignoreerida, et järgmistes punktides tutvustatakse Kerberose andmebaasi loomist ja kasutamist.

Kerberose serveri seadistamine

Kerberose serveri tööd juhib seadistusfail /etc/krb5.conf, mille sisu võiks olla nt selline

[libdefaults]
  default_realm = LOOMAAED

  kdc_timesync = 1
  forwardable = true
  proxiable = true

[realms]
  LOOMAAED = {
     kdc = ns.loomaaed
     admin_server = ns.loomaaed
  }

[domain_realm]
  .loomaaed = LOOMAAED

[logging]
  kdc = FILE:/var/log/kerberos/krb5kdc.log
  admin_server = FILE:/var/log/kerberos/kadmin.log
  default = FILE:/var/log/kerberos/krb5lib.log

kus

  • [realms] - sektsioonis seostatakse Kerberose piirkonna nimi seda piirkonda teenindavat Kerberose serveritega
  • [domain_realm] - sektsioonis kirjeldatakse Kerberose osaliste arvutite domeeninime ja Kerberose piirkonna nime vaheline seos; . algusege domeeninime tähendab kõigi selle domeeni nimesid
  • [loggin] - vaikimisi logib Kerberos syslog abil, kuid nii saab salvestada logi eraldi failidesse

Seejärel tuleb moodustada Kerberose piirkond sh andmebaas öeldes

# krb5_newrealm 
This script should be run on the master KDC/admin server to initialize
a Kerberos realm.  It will ask you to type in a master key password.
This password will be used to generate a key that is stored in
/etc/krb5kdc/stash.  You should try to remember this password, but it
is much more important that it be a strong password than that it be
remembered.  However, if you lose the password and /etc/krb5kdc/stash,
you cannot decrypt your Kerberos database.
Loading random data
Initializing database '/var/lib/krb5kdc/principal' for realm 'LOOMAAED',
master key name 'K/M@LOOMAAED'
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: 


Now that your realm is set up you may wish to create an administrative
principal using the addprinc subcommand of the kadmin.local program.
Then, this principal can be added to /etc/krb5kdc/kadm5.acl so that
you can use the kadmin program on other computers.  Kerberos admin
principals usually belong to a single user and end in /admin.  For
example, if jruser is a Kerberos administrator, then in addition to
the normal jruser principal, a jruser/admin principal should be
created.

Don't forget to set up DNS information so your clients can find your
KDC and admin servers.  Doing so is documented in the administration
guide.

Tulemusena moodustatakse Kerberose andmebaas

# file /var/lib/krb5kdc/principal
/var/lib/krb5kdc/principal: Berkeley DB 1.85/1.86 (Btree, version 3, native byte-order)

Kontrolliks saab küsida kadmin.local utiliidiga Kerberose andmebaasi sisu öeldes

# kadmin.local 
Authenticating as principal root/admin@LOOMAAED with password.
kadmin.local:  listprincs 
K/M@LOOMAAED
kadmin/admin@LOOMAAED
kadmin/changepw@LOOMAAED
kadmin/history@LOOMAAED
kadmin/kerberos.loomaaed@LOOMAAED
krbtgt/LOOMAAED@LOOMAAED

Seejärel tuleb lisada Kerberosse kasutaja root/admin öeldes, kasutajale tuleb näidata ka parool

# kadmin.local -q "addprinc root/admin"

/etc/krb5kdc/kadm5.acl peab sisaldama rida

*/admin*

ning peale admin serveri restarti

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

saab kadmin programmiga Kerberose poole pöörduda

# kadmin
Authenticating as principal root/admin@LOOMAAED with password.
Password for root/admin@LOOMAAED: 
kadmin:

kadmin.local ja kadmin erinevus seisneb selles, et esimene suhtleb failisüsteemis asuva Kerberose andmebaasiga otse, kusjuures teine suhtleb kasutades Kerberos protokolli. Seetõttu saab kadmin.local programmi kasutada ainult samas arvutis kus asub andmebaasi faili, aga kadmin on kasutatav ka üle võrgu.

Kerberose andmebaasi haldamine

Kerberose andmebaas sisaldab andmeid Kerberose kasutajate kohta ja seda andmebaasi hallatakse kadmin (või erandjuhul kadmin.local) programmiga, nt käsuga listprincs saab küsida registreeritud principalide nimekirja

  • Lokaalses arvutis, kasutades otse failisüsteemist Kerberose andmebaasifaili
# kadmin.local
Authenticating as principal root/admin@AUUL with password.
kadmin.local:  listprincs 
K/M@AUUL
kadmin/admin@AUUL
...
  • Üle võrgu, kasutades Kerberose andmebaasifaili Kerberose protokolli abil
# kadmin -p root/admin

Kasutaja lisamine

Kerberose kasutaja lisamiseks sobib öelda

# kadmin
kadmin: addprinc priit
WARNING: no policy specified for priit@LOOMAAED; defaulting to no policy
Enter password for principal "priit@LOOMAAED": 
Re-enter password for principal "priit@LOOMAAED": 
Principal "priit@LOOMAAED" created.

Lühemalt saab sama öelda, esmalt küsitakse Kerberose root/admin kasutaja ligipääsu ja seejärel uue kasutaja parooli

# kadmin -q "addprinc priit"

Kasutaja kustutamine

Kerberose kasutaja kustutamiseks sobib öelda

# kadmin
kadmin: delprinc priit
Are you sure you want to delete the principal "priit@LOOMAAED"? (yes/no): yes
Principal "priit@LOOMAAED" deleted.
Make sure that you have removed this principal from all ACLs before reusing.

Kasutaja andmete esitamine

# kadmin -q "getprinc priit"
Authenticating as principal root/admin@LOOMAAED with password.
Password for root/admin@LOOMAAED: 
Principal: priit@LOOMAAED
Expiration date: [never]
Last password change: Wed Jun 23 14:42:53 EEST 2010
Password expiration date: [none]
Maximum ticket life: 1 day 00:00:00
Maximum renewable life: 0 days 00:00:00
Last modified: Wed Jun 23 14:42:53 EEST 2010 (root/admin@LOOMAAED)
Last successful authentication: [never]
Last failed authentication: [never]
Failed password attempts: 0
Number of keys: 2
Key: vno 1, Triple DES cbc mode with HMAC/sha1, no salt
Key: vno 1, DES cbc mode with CRC-32, no salt
Attributes:
Policy: [none]

Hosti lisamine

kadmin.local:  addprinc -randkey host/debian-testing-2.auul

SSH serveri ettevalmistamine

SSH serveri ettevalmistamiseks tuleb sinna paigalda paketid krb5-config, krb5-user ja libkadm55

# apt-get install krb5-config krb5-user libkadm55

ning näidata Kerberose serveri nimi. Esitatud andmete põhjal moodustatakse Kerberoses süsteemis osalevale arvutile seadistusfail

/etc/krb5.conf

mille sisu võiks kohendada samasuguseks nagu Kerberose serveri samanimelises failis.

Veendumaks, et SSH server ja Kerberose server oskavad suhelda maksab proovida kadmin programmiga pöörduda Kerberose poole öeldes

# kadmin 
Authenticating as principal root/admin@LOOMAAED with password.
Password for root/admin@LOOMAAED:
...

Selleks, et kasutaja saaks SSH serveri sshd teenust kasutada tuleb lisada Kerberose andmebaasi vastava teenuse jaoks kasutaja. Üldisemalt võiks seda teha lisades lihtsalt vastava arvuti nimelise Kerberose osapoole öeldes nt kliendist

# kadmin -q "addprinc -randkey host/ssh-server.loomaaed"
Authenticating as principal root/admin@LOOMAAED with password.
Password for root/admin@LOOMAAED: 
WARNING: no policy specified for host/ssh-server@LOOMAAED; defaulting to no policy
Principal "host/ssh-server.loomaaed@LOOMAAED" created.

kus -randkey tähendab, et host tüüpi sissekandele genereeritakse automaatselt parool. Seejärel tuleb kopeerida Kerberose andmebaasist arvuti parool SSH serveri failisüsteemi /etc/krb5.keytab faili öeldes

# kadmin -q "ktadd -k /etc/krb5.keytab host/ssh-server.loomaaed"                
Authenticating as principal root/admin@LOOMAAED with password.
Password for root/admin@LOOMAAED: 
Entry for principal host/ssh-server.loomaaed with kvno 3, encryption type Triple DES cbc mode \
  with HMAC/sha1 added to keytab WRFILE:/etc/krb5.keytab.
Entry for principal host/ssh-server.loomaaed with kvno 3, encryption type DES cbc mode \
  with CRC-32 added to keytab WRFILE:/etc/krb5.keytab.

Lõpuks tuleb sshd seadistada usaldama Kerberosega kasutajate autentimist, selleks peab /etc/ssh/sshd_config seadistusfailis sisalduma rida

GSSAPIAuthentication yes

SSH kliendi ettevalmistamine ja kasutamine

SSH kliendi arvutisse tuleb paigaldada paketid krb5-config krb5-user libkadm55 öeldes

# apt-get install krb5-config krb5-user libkadm55

ning näidata Kerberose serveri nimi. Esitatud andmete põhjal moodustatakse Kerberoses süsteemis osalevale arvutile seadistusfail

/etc/krb5.conf

mille sisu võiks kohendada samasuguseks nagu Kerberose serveri samanimelises failis.

Veendumaks, et SSH klient ja Kerberose server oskavad suhelda, maksab proovida kadmin programmiga pöörduda Kerberose poole öeldes

# kadmin 
Authenticating as principal root/admin@LOOMAAED with password.
Password for root/admin@LOOMAAED:
...

Selleks, et kasutaja saaks SSH serveri sshd teenust kasutada, peab Kerberose andmebaasis leiduma vastav sissekanne, mis moodustati eelpool 'kadmin: addprinc priit' abil. SSH kliendi arvutis peab kasutaja esmalt küsima omale Kerberoselt võtme öeldes

$ kinit 
Password for priit@LOOMAAED: 

Olemasolevaid pileteid näeb öeldes

$ klist 
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: priit@LOOMAAED

Valid starting     Expires            Service principal
06/23/10 15:20:18  06/24/10 15:20:18  krbtgt/LOOMAAED@LOOMAAED

Kerberos 4 ticket cache: /tmp/tkt1000
klist: You have no tickets cached

kus

  • Ticket cache: - piletid asuvad failis FILE:/tmp/krb5cc_1000, kus 1000 viitab kasutaja UID väärtusele
  • Default principal: - tegu on Kerberose kasutaja priit@LOOMAAED piletitega
  • krbtgt/LOOMAAED@LOOMAAED - esialgu on kasutajale usaldatud ainult nn TGT ehk piletiti hankimise pilet
  • piletitel on kehtivusaeg

Seejärel peab SSH serveri sshd teenuse kasutamine õnnestuma

$ ssh priit@ssh-server.loomaaed

Taustal toimuvad sellised tegevused

  • SSH klient kastab TGT piletit ja saab endale Kerberose servilt SSH serveri sshd teenuse kasutamiseks vajaliku pileti
  • SSH klient esitab ssh teenuse kasutamise pileti SSH serverile

Õnnestumisel tekib SSH serveri auth.log faili

Jun 20 17:36:08 ssh-server sshd[4597]: Authorized to priit, krb5 principal priit@LOOMAAED (krb5_kuserok)
Jun 20 17:36:08 ssh-server sshd[4597]: Accepted gssapi-with-mic for priit from 192.168.10.205 port 33144 ssh2
Jun 20 17:36:08 ssh-server sshd[4597]: pam_unix(sshd:session): session opened for user priit by (uid=0)

Oluline on tähele panna, et peale ssh-serverisse sisselogimist on kasutajal ssh-kliendi kaks pileti juurde tekkinud

$ klist 
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: priit@LOOMAAED

Valid starting     Expires            Service principal
06/23/10 15:24:25  06/24/10 15:24:24  krbtgt/LOOMAAED@LOOMAAED
06/23/10 15:24:30  06/24/10 15:24:24  host/ssh-server.loomaaed@
06/23/10 15:24:30  06/24/10 15:24:24  host/ssh-server.loomaaed@LOOMAAED

Kerberose võtmete kasutamine

Kerberiseeritud teenuste kasutamine toimub piletite (ingl. k. ticket) alusel.

Pileti omandamine

Pilete saamiseks sobib nt öelda

$ kinit

Võtmeid näeb klist käsuga

$ klist
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: priit@LOOMAAED

Valid starting     Expires            Service principal
06/21/10 00:40:13  06/21/10 10:40:13  krbtgt/LOOOMAAED@LOOMAAED
        renew until 06/22/10 00:40:09

Pileti kehtivuse pikendamine

Pileti kehtivuse pikendamiseks sobib öelda, kusjuures olemasolev pilet peab veel kehtima

$ kinit -R

Kui püüda pikenda kehtetut piletit saab sellise veateate

kinit: Ticket expired while renewing credentials

Pileti kustutamine

Lõpetamiseks

$ kdestroy

Kerberose keytab faili kasutamine

Keytab (key table) fail on kasutuses arvutis, mis pakub mingit kerberiseeritud teenust. Selles failis sisalduvad teenustele vastavad paroolid, mille abil teenused kontrollivad nende poole pöörduvate klientide teenusepiletite autentsust.

Keytab failiga töötatakse tavaliselt kolme programmi abil

  • klist - võimaldab keytab faili sisu esitada, st lugeda faili
  • ktutil - võimaldab keytab faili sisu redigeerida, sh kahe faili sisu kokku ühendada
  • kadmin - võimaldab võtmejaotuskeskusest salvestada andmeid keytab faili

klist

Koos krüpto tüübiga SSH serveri keytab faili sisu esitamine

# klist -e -k /etc/krb5.keytab
Keytab name: FILE:/etc/krb5.keytab
KVNO Principal
---- --------------------------------------------------------------------------
   3 host/ssh-server.loomaaed@LOOMAAED (Triple DES cbc mode with HMAC/sha1) 
   3 host/ssh-server.loomaaed@LOOMAAED (DES cbc mode with CRC-32) 

ktutil

keytab faili sisu esitamine ktutil abil

# ktutil 
ktutil:  rkt /etc/krb5.keytab
ktutil:  list
slot KVNO Principal
---- ---- ---------------------------------------------------------------------
  1    3                  host/ssh-server.loomaaed@LOOMAAED
  2    3                  host/ssh-server.loomaaed@LOOMAAED

Sisu redigeerimisel peab arvestada, et olemasolevasse faili saab võtmeid ainult lisada. ktutil töötab nii, et ta sisaldab mälus nn slotte kuhu saab laadida keytab failist andmed ning siis mällu laaditud seisu saab salvestada failiks.

kadmin

kadmin on üldiselt Kerberose andmebaasi haldusprogramm, mis muu seal võimaldab andmebaasist salvestada andmeid keytab faili

kadmin: ktadd -k /etc/krb5.keytab -randkey host/ssh-server.loomaaed@LOOMAAED
# kadmin -p root/admin -q "ktadd -e des-cbc-crc:normal -k /etc/krb5.keytab nfs/debian-testing-1.auul"

Lisaks saab kadmin abil ka keytab failist andmeid kustutada

kadmin:  ktremove -k /etc/krb5.keytab  nfs/debian-testing-1.auul

Teise kasutaja rolli võtmine

Kui ssh-server arvutis sisaldub selline fail

# cat /root/.k5login 
priit@LOOMAAED

siis saab Kerberos süsteemi kasutaja priit ilma paroolita minna ssh-serveri juurkasutajaks öeldes

$ ssh root@ssh-server.loomaaed

kshell tarkvara kasutamine

kshell (Kerberized rsh) kasutamiseks, nt teiselt arvutilt küsida keskkonna kohta, sobib öelda

$ krb5-rsh -x debian-kdc env
This rsh session is encrypting input/output data transmissions.
KRB5LOCALADDR=192.168.10.204
TERM=network
SHELL=/bin/bash
USER=priit
KRB5REMOTEPORT=55424
PATH=/usr/bin:/local/bin:/usr/bin:/bin:/usr/local/bin:/usr/bin/X11:.
KRB5LOCALPORT=544
PWD=/home/priit
SHLVL=1
HOME=/home/priit
KRB5REMOTEADDR=192.168.10.205
_=/usr/bin/env

LDAP kasutamine

TODO

PAM kasutamine

TODO

Märkused

  • /tmp kataloog peab olema kõigile kirjutatav (nii nagu ta reeglina ka olema peab)
  • Erinevalt ssh'st ei suuna Kerberos edasi X11 ühendusi

Kasulikud lisamaterjalid