Narzędzia użytkownika

Narzędzia witryny


freebsd:nfsv4

NFSv4 + Kerberos V

Założenia:

  • Używamy NFSv4 i tylko tej wersji
  • Używamy Kerberosa z base
  • Server NFS-a: nfs01.area.lan
  • Klient NFS-a: client.area.lan
  • Eksportowana ścieżka to /Volumes/nfs

Wymagania:

  • Skonfigurowany Kerberos na serwerze i kliencie (jak to zrobić tutaj: Kerberos V)

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"
  • flagi dla gssd:
    • -h – powoduje włączenie obsługi montowania zasoby w oparciu o „host-based credentials” (uwierzytelnianie keytabem hosta)
    • -v – powoduje włączenie logowania do sysloga (opcjonalne, przydatne przy diagnozowaniu problemów)

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:

  • gssname=host – opcja ta powoduje uwierzytelnienie się keytab-em hosta (by móc podmontować zasób)
  • late – przy starcie montowanie filesystemu odbędzie się na późniejszym etapie, ma to znaczenie o tyle że przed montowaniem muszą wystartować serwisy niezbędne do działania NFS-a

Obserwacje

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

  • dostęp do zamontowanych zasobów opiera się na ważnym tickecie TGT użytkownika, czyli brak TGT == access denied
  • nawet root potrzebuje ticket, inaczej zostanie przegoniony
  • gssd dość specyficznie czyta keytab-a, wyjaśnienie poniżej

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:

  • eksportujemy keytaby wszystkich principali dla hosta do osobnych plików:
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
  • keytab z principalem nfs/hostname tworzymy jako główny i doklejamy do niego keytab z principalem host/hostname
# 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     
freebsd/nfsv4.txt · ostatnio zmienione: 2016/11/10 09:49 przez mky