====== 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