2012. szeptember 28., péntek

MIT Kerberos V és NFS4 Ubuntu 12.04-en

A múltkorjában megoldottuk az LDAP-ra támaszkodó Kerberos használatával való bejelentkezést a gépeinkre (meg, mintegy mellékesen, megoldottuk az LDAP és a Kerberos - és a Samba - jelszavak szinkronizálását). Ma a Linux munkaállomásra bejelentkező felhasználó home-jának központi tárhelyről való mountolását igyekszünk megoldani.
(Read this article in English)
Elsőként a szerveren dolgozunk:
sudo mkdir -p /export/home
Az /etc/fstab állományt egy új sorral egészítjük ki:
/home    /export/home   none    bind  0  0
Érvényre juttatjuk a változtatást:
sudo mount -a
Ezzel elkészült az a könyvtár, amit majd az NFS4-szerverünk kiajánl.

Telepítjük az NFS4 szerveroldali komponenseit:
sudo apt-get install nfs-kernel-server nfs-common
Megírjuk az /etc/exports fájlt:
/export gss/krb5(rw,fsid=0,no_subtree_check,async,root_squash)
/export/home gss/krb5(rw,no_subtree_check,async,root_squash)
Majd egyszer érdemes lehet átolvasni a man nfs-t, hogy a krb5 helyére akarunk-e krb5i vagy krb5p kapcsolót megadni.

Az /etc/default/nfs-kernel-server fájlt módosítjuk:
NEED_SVCGSSD=yes
Újraindítjuk az NFS-szervert:
sudo service nfs-kernel-server restart
Ellenőrizzük, hogy az van-e kiajánlva, amit szeretnénk:
sudo exportfs -v
Egy próbamount (még itt, a szerveren, a saját kiajánlott könyvtárunkat mountoljuk vissza):
sudo mount -t nfs4 -o sec=krb5 ubuserver.itthon.cucc:/home/ /mnt
Nem megy. Ilyet találunk a syslog-ban:
ubuserver kernel: [  198.204101] RPC: AUTH_GSS upcall timed out.
ubuserver kernel: [  198.204104] Please check user daemon is running.
Próbáljunk segíteni rajta:
sudo service gssd start
gssd stop/post-stop, process 3061
Mint a dőlt betűs részből látszik, nem ment a dolog. Szerkesztjük az /etc/default/nfs-common fájlt:
NEED_GSSD=yes
Akkor talán most:
sudo service gssd start
gssd start/running, process 3078
Most már megy a GSSD. Újra próbálkozunk:
sudo mount -t nfs4 -o sec=krb5 ubuserver.itthon.cucc:/home/ /mnt
mount.nfs4: access denied by server while mounting ubuserver.itthon.cucc:/home/
A dőlt betűs rész ismét rosszat sejtet:) Lássuk kedvenc syslog-unkat:
ubuserver rpc.gssd[3591]: ERROR: Key table file '/etc/krb5.keytab' not found while beginning keytab scan for keytab 'FILE:/etc/krb5.keytab'
 rpc.gssd[3591]: last message repeated 2 times
ubuserver rpc.gssd[3591]: ERROR: gssd_refresh_krb5_machine_credential: no usable keytab entry found in keytab /etc/krb5.keytab for connection with host ubuserver.itthon.cucc
ubuserver rpc.gssd[3591]: ERROR: No credentials found for connection to server ubuserver.itthon.cucc
Na, akkor tegyünk róla. Létrehozunk egy kerberos-principalt, ami a man rpc.gssd szerint lehetne más is, mi mégis az nfs/szerver-fqdn (Fully Qualified Domain Name) nevet adjuk neki, mert ugye hová is lennénk hagyományok nélkül (és mert minden internetes forrás ezt írja). Vastaggal az általunk kiadott parancsok:
sudo kadmin.local 
Authenticating as principal root/admin@ITTHON.CUCC with password.
kadmin.local:  addprinc -randkey nfs/ubuserver.itthon.cucc
WARNING: no policy specified for nfs/ubuserver.itthon.cucc@ITTHON.CUCC; defaulting to no policy
Principal "nfs/ubuserver.itthon.cucc@ITTHON.CUCC" created.
kadmin.local:  ktadd nfs/ubuserver.itthon.cucc
Entry for principal nfs/ubuserver.itthon.cucc with kvno 2, encryption type aes256-cts-hmac-sha1-96 added to keytab FILE:/etc/krb5.keytab.
Entry for principal nfs/ubuserver.itthon.cucc with kvno 2, encryption type arcfour-hmac added to keytab FILE:/etc/krb5.keytab.
Entry for principal nfs/ubuserver.itthon.cucc with kvno 2, encryption type des3-cbc-sha1 added to keytab FILE:/etc/krb5.keytab.
Entry for principal nfs/ubuserver.itthon.cucc with kvno 2, encryption type des-cbc-crc added to keytab FILE:/etc/krb5.keytab.
kadmin.local:  quit
A fenti mount-parancsot megismételve a hibaüzenet ugyanaz, de legalább most nincs semmi a syslog-ban. Ja...:
sudo service nfs-kernel-server restart
És most jó! Adjuk ki, hogy:
sudo ls -l /mnt
Nézzük meg, hogy a fájlok tulajdonosai, csoportjai jól látszanak-e. Ha kicsit is értem, amit csinálok, akkor a szerveren muszáj nekik, de biztos ami fix...

Gyalogoljunk át a kliensre.
sudo apt-get install nfs-common
Szerkesszük az /etc/default/nfs-common fájlt, mint fenn, majd
sudo service gssd start
És:
sudo mount -t nfs4 -o sec=krb5 ubuserver.itthon.cucc:/home/ /mnt
Szokásos hibaüzenet, szokásos syslog-bejegyzések. Gyártani kell a kliensnek is kerberos-principalt, és a kulcs megy a keytab-ba. Ha beállítottunk magunknak Kerberos admin-felhasználót, akkor követhetjük a lentieket, ha nem, akkor a szerveren kell dolgoznunk a kadmin.local használatával, és az elkészült principal kulcsát külön fájlba exportáljuk, amit majd valahogy áthozunk a kliensre. Szerencsére nekem van Kerberos admin-felhasználóm (kerbadmin/admin a neve), úgyhogy ezt megúszom, maradok a kliensen.
kadmin -p kerbadmin/admin helyett a
sudo kadmin -p kerbadmin/admin
parancsot kell kiadnunk, különben nem fogjuk tudni írni a gép keytab-fájlját. Vastaggal szedve a mi beírásunk, figyelj, itt a kliens FQDN-je kell:
Authenticating as principal kerbadmin/admin with password.
Password for kerbadmin/admin@ITTHON.CUCC: 
kadmin:  addprinc -randkey nfs/ubuclient.itthon.cucc
WARNING: no policy specified for nfs/ubuclient.itthon.cucc@ITTHON.CUCC; defaulting to no policy
Principal "nfs/ubuclient.itthon.cucc@ITTHON.CUCC" created.
kadmin:  ktadd nfs/ubuclient.itthon.cucc
Entry for principal nfs/ubuclient.itthon.cucc with kvno 3, encryption type aes256-cts-hmac-sha1-96 added to keytab FILE:/etc/krb5.keytab.
Entry for principal nfs/ubuclient.itthon.cucc with kvno 3, encryption type arcfour-hmac added to keytab FILE:/etc/krb5.keytab.
Entry for principal nfs/ubuclient.itthon.cucc with kvno 3, encryption type des3-cbc-sha1 added to keytab FILE:/etc/krb5.keytab.
Entry for principal nfs/ubuclient.itthon.cucc with kvno 3, encryption type des-cbc-crc added to keytab FILE:/etc/krb5.keytab.
kadmin: quit
A fenti parancsot kiadva megy a mount-olás. Azonban a
sudo ls -l /mnt
parancsot kiadva esetleg az látható, hogy minden fájl tulajdonosa a nobody nogroup. Grrr. A syslog-ban ilyesmi sorok látszanak:
ubuclient rpc.idmapd[2325]: nss_getpwnam: name 'root@itthon.cucc' does not map into domain 'localdomain'
Szerkesszük az /etc/idmapd.conf fájlt:
Domain = itthon.cucc
Akkor most egy
sudo service idmapd restart
Ekkor a szerveren lévő, de nem-kerberos felhasználóknál továbbra is nobody, nogroup és a syslog-ban ez van:
rpc.idmapd[2394]: nss_getpwnam: name 'localuser1' not found in domain 'itthon.cucc'
de a többi jó. Mármint újramountolás után.

Akkor kész.

Legközelebb megoldjuk, hogy a felhasználók home-könyvtára belépéskor automatikusan felcsatolódjon. Hiszen részben ezért szenvedtünk a Kerberos-szal egész eddig:)

Irodalom:
http://wiki.debian.org/NFS/Kerberos
http://www.opinsys.fi/en/setting-up-nfsv4kerberos-on-ubuntu-10-04-alpha-2-lucid-part-6 http://www.danbishop.org/2011/10/29/ubuntu-11-10-sbs-small-business-server-setup-part-1-%E2%80%93-dhcp-and-dns/5/#part-5-nfs

Nincsenek megjegyzések: