Spis treści

NFSv4 + Kerberos V

Założenia:

Wymagania:

Konfiguracja serwera

Przygotowanie serwera NFSv4

Do /etc/rc.conf dodajemy:

gssd_enable="YES"
gssd_flags="-h -v"
nfs_server_enable="YES"
nfsv4_server_enable="YES"
nfsuserd_enable="YES"
nfsuserd_flags="-verbose"
mountd_enable="YES"

Do /etc/exports dodajemy:

V4: /		-sec=krb5
/Volumes/nfs	-sec=krb5 -maproot=root

Każdorazowo po edycji w/w pliku musimy przełować mountd:

# service mountd reload

W /etc/sysctl.conf wymuszamy stosowanie wersji 4 NFS-a:

vfs.nfsd.server_max_nfsvers=4
vfs.nfsd.server_min_nfsvers=4

Przygotowanie Kerberos-a

Tworzymy plik z konfiguracją, /etc/krb5.conf:

[libdefaults]
    default_realm = AREA.LAN
[realms]
    AREA.LAN = {
	kdc = nasz_serwer.area.lan
	admin_server = nasz_serwer.area.lan
    }
[domain_realm]
    .area.lan = AREA.LAN

Musimy wygenerować keytaba z principalem nfs/hostname:

kadmin> add -r nfs/nfs01.area.lan
Max ticket life [1 day]:
Max renewable life [1 week]:
Principal expiration time [never]:
Password expiration time [never]:
Attributes []:
kadmin> ext_keytab nfs/nfs01.area.lan

Nasz keytab powinien wyglądać tak:

# ktutil list
FILE:/etc/krb5.keytab:

Vno  Type                     Principal                        Aliases
  1  aes256-cts-hmac-sha1-96  nfs/nfs01.area.lan@AREA.LAN
  1  des3-cbc-sha1            nfs/nfs01.area.lan@AREA.LAN
  1  arcfour-hmac-md5         nfs/nfs01.area.lan@AREA.LAN

Uruchamianie

Uruchamiamy kolejno serwisy:

# sysctl vfs.nfsd.server_max_nfsvers=4
# sysctl vfs.nfsd.server_min_nfsvers=4
# service gssd start
# service nfsd start

Konfiguracja klienta

Do /etc/rc.conf dodajemy:

gssd_enable="YES"
gssd_flags="-v"
hostid_enable="YES"
nfsuserd_enable="YES"
nfscbd_enable="YES"

Wpis do /etc/fstab

nfs01.area.lan:/Volumes/nfs 	/Volumes/nfs	nfs	rw,nfsv4,sec=krb5,gssname=host,late	0	0

Kilka słów wyjaśnienia opcji odnośnie montowania NFS-a:

Obserwacje

Poniżej kilka obserwacji odnośnie działania w/w skonfigurowanego systemu:

gssd - odczyt keytab-a i wiele principali

Daemon gssd wykorzystuje standardowy keytab /etc/krb5.keytab do odczytu principala nfs/hostname do uwierzytelaniania Kerberosem. Niestety robi to tak niefortunnie, że bierze pierwsze z brzegu principal, jeśli więc mamy zapisane w keytabie więcej principali, musimy zadbać, by pierwszym z nich był nfs/hostname. Poniższy keytab nie będzie działać z gssd:

# ktutil list
FILE:/etc/krb5.keytab:

Vno  Type                     Principal                        Aliases
  1  aes256-cts-hmac-sha1-96  host/nfs01.area.lan@AREA.LAN     
  1  des3-cbc-sha1            host/nfs01.area.lan@AREA.LAN     
  1  arcfour-hmac-md5         host/nfs01.area.lan@AREA.LAN     
  1  aes256-cts-hmac-sha1-96  nfs/nfs01.area.lan@AREA.LAN      
  1  des3-cbc-sha1            nfs/nfs01.area.lan@AREA.LAN      
  1  arcfour-hmac-md5         nfs/nfs01.area.lan@AREA.LAN      

Poniżej kroki jak utworzyć prawidłowego keytab-a:

kadmin> ext_keytab -k /tmp/nfs-nfs01.area.lan nfs/nfs01.area.lan
kadmin> ext_keytab -k /tmp/host-nfs01.area.lan host/nfs01.area.lan
# cp /tmp/fs-nfs01.area.lan /tmp/krb5.keytab
# ktutil copy /tmp/host-nfs01.area.lan /tmp/krb5.keytab
# mv /tmp/krb5.keytab /etc/

Efekt, jaki powinniśmy uzyskać:

# ktutil list
FILE:/etc/krb5.keytab:

Vno  Type                     Principal                        Aliases
  1  aes256-cts-hmac-sha1-96  nfs/nfs01.area.lan@AREA.LAN      
  1  des3-cbc-sha1            nfs/nfs01.area.lan@AREA.LAN      
  1  arcfour-hmac-md5         nfs/nfs01.area.lan@AREA.LAN      
  1  aes256-cts-hmac-sha1-96  host/nfs01.area.lan@AREA.LAN     
  1  des3-cbc-sha1            host/nfs01.area.lan@AREA.LAN     
  1  arcfour-hmac-md5         host/nfs01.area.lan@AREA.LAN