====== 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: [[freebsd:kerberos|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