Spis treści
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