Network File System

NFS (Network File System) to protokół sieciowy, który umożliwia współdzielenie plików pomiędzy maszynami Linux i Unix przez sieć. To usługa oparta na architekturze klient/serwer, dzięki której klient ma dostęp do plików, katalogów i całego systemu plików na zdalnej maszynie tak jakby były zamontowane na lokalnie. Proces udostępniania zasobów na serwerze NFS klientowi nazywany jest eksportowaniem.

Komendy związane z usługą NFS przedstawia tabela poniżej.

Komenda Opis
exportfs Eksportuje zasoby wylistowane w pliku /etc/exports i katalogu /etc/exports.d. Wyświetla także wyeksportowane zasoby wylistowane w plikach /var/lib/nfs/etab i /proc/fs/nfs/exports.
nfsiostat Statystyki  I/O z pliku /proc/self/mountstats zamontowanych zasobów NFS.
nfsstat Statystyki NFS i RPC z plików: /proc/net/rpc/nfsd (serwer) i /proc/net/rpc/nfs (klient).
mountstats Komenda klienta wyświetlającą statystyki z pliku /proc/self/mountstats.
showmount Wraz z opcją -e server_nfs wyświetla zasoby NFS wyeksportowane przez serwer.
mount Montowanie zdalnych zasobów NFS i nie tylko.

 

NFS czyta dane konfiguracyjne z wielu plików, pliki te opisane są w tabeli poniżej.

Plik Opis
/etc/sysconfig/nfs Startowy plik konfiguracyjny NFS.
/etc/exports Definicje zasobów do wyeksportowania.
/var/lib/nfs/etab Wpisy dla eksportowanych zasobów.
/etc/nfsmount.conf Plik klienta, który zawiera opcje używane podczas montowania zasobów.
/etc/fstab Plik klienta, który zawiera zasoby dyskowe do podmontowania manualnie lub automatycznie po restarcie systemu.
/etc/mtab Plik klienta, który zawiera listę podmontowanych zasobów dyskowych.

Więcej informacji o NFS można znaleźć w dokumentacji systemowej, jest tego naprawdę dużo:

 

SELinux a NFS.

Jakikolwiek katalog lub system plików, który ma być udostępniony przez NFS musi mieć ustawiony kontekst public_content_ro (odczyt) lub public_content_rw (zapis). Wymagane jest to tylko wtedy gdy dany zasób udostępniony jest nie tylko przez NFS ale również przez inną usługę, np. FTP czy CIFS (Samba). Polityka SELinux zawiera także wiele zmiennych boolean związanych z NFS:

Zmienna boolean Przeznaczenie
nfs_export_all_ro Eksportowanie zasobu tylko w trybie do odczytu.
nfs_export_all_rw Eksportowanie zasobu w trybie do zapisu.
nfsd_anon_write Zezwala/zabrania na anonimowy zapis do zasobu NFS.
use_nfs_home_dirs Zezwala/zabrania klientom NFS na montowanie katalogów domowych użytkowników.

 

 

Ćwiczenie 1. Udostępnianie zasobów NFS i podmontowanie na kliencie.

Strona serwera.

1. Instalacja pakietu nfs.

2. Utworzenie katalogów /common i /nfsrhcsa:

3. Aktywacja zmiennych SELinux booleans aby zezwolić na export zasobów NFS w trybie tylko do odczytu i do zapisu.

4. Odblokowanie usługi NFS na firewallu:

5. Autostart, start i status usług rpcbind i NFS:

6. Edycj pliku /etc/exports:

Najlepiej aby była co najmniej jedna opcja przy każdym wpisie.

7. Wyeksportowanie zasobów:

8. Wyświetlenie zawartości pliku /var/lib/nfs/etab:

Oba powyższe zasoby są teraz wyeksportowane. Istnieje jednak możliwość cofnięcia eksportu opcją -u:

Potwierdzamy cofnięcie exportu:

Ponowny eksport zasobu można wykonać w sposób następujący:

 

Strona klienta.

1. Instalacja nfs-utils:

2. Utworzenie punktu montowania /nfsrhcemnt:

3. Start, autostart i status rpcbind:

4. Edycja pliku /etc/fstab:

5. Podmontowanie zasobu NFS:

lub

6. Weryfikacja:

7. Utworzenie pliku nfsrhcetest w katalogu /nfsrhcemnt na kliencie i weryfikacja po stronie serwera:

 

Ćwiczenie 2. Udostępnienie zasobu NFS do pracy grupowej.

Strona serwera NFS.

1. Utworzenie grupy z GID 7777:

2. Dodanie użytkowników do tej grupy:

3. Utworzenie katalogu /nfssdata:

4. Ustawienie własności dla katalogu:

5. Ustawienie bitu setgid dla /nfssdata:

6. Weryfikacja nowych uprawnień do katalogu /nfssdata:

7. Instalacja pakietu nfs.

8. Aktywacja zmiennych SELinux booleans aby zezwolić na export zasobów NFS w trybie tylko do odczytu i do zapisu.

9. Odblokowanie usługi NFS na firewallu:

10. Autostart, start i status usług rpcbind i NFS:

11. Edycja pliku /etc/exports:

Opcja no_root_squash zabezpiecza udostępniany na serwerze NFS zasób przed uzyskaniem na komputerze klienta uprawnień superużytkownika do zasobu. Root na kliencie mapowany jest na konto nfsnobody z UID 65534.

12. Wyeksportowanie zasobów:

13. Wyświetlenie zawartości pliku /var/lib/nfs/etab:

 

Strona klienta NFS.

14. Utworzenie grupy nfssdatagrp z GID 7777:

15. Utworzenie kont user3 i user4, należy zwrócić uwagę na to aby UID był ten sam jak na serwerze NFS:

16. Dodanie użytkowników user3 and user4 do grupy nfssdatagrp:

17. Dodanie zasobu do pliku /etc/fstab:

18. Utworzenie punktu montowania /nfssdatamnt:

19. Podmontowanie zasobów NFS:

20. Weryfikacja:

21. Weryfikacja uprawnień katalogu /nfssdatamnt:

22. Weryfikacja możliwości zapisu:

 

Ćwiczenie 5. Bezpieczne udostępnianie zasobów NFS przy wykorzystaniu Kerberos. Wymaga skonfigurowanego serwera kerberos KDC wg opisu:

http://miroslaw.borodziuk.eu/index.php/2017/07/15/kerberos/

 

Strona serwera NFS – server.example.com.

Użytkownik user01 musi mieć takie samo uid na maszynach kdc, server i client.

Zawartość pliku /etc/hosts:

SElinux:

Odblokowanie odpowiednich portów na firewallu:

Edycia pliku /etc/exports

 

Opcja sec akceptuje cztery różne wartości:

  • sec=sys (bez używania Kerberosa), wymaga uruchomienia:  # setsebool -P nfsd_anon_write 1
  • sec=krb5 (Kerberos user authentication only),
  • sec=krb5i (Kerberos user authentication and integrity checking),
  • sec=krb5p (Kerberos user authentication, integrity checking and NFS traffic encryption).

Im wyższy poziom tym większe zużycie mocy obliczeniowej serwera NFS.

Eksport zasobów NFS:

Aktywacja nfs-secure

Aktywacja nfs-secure-server (tylko na RHEL 7.0):

Usługa nfs-secure-server wymagana jest tylko w RHEL7.0 i CentOS7.0. W RHEL7.2 i CentOS7.2 wystarczy tylko nfs-secure. Dlatego w RHEL 7.2 usługa nfs-secure-server w statusie zgłasza że nie działa, ale wszystko jest w porządku.

Edycja pliku /etc/krb5.conf:

Powyższy plik można też skopiować z serwera KDC kerberos bo jego zawartość jest identyczna:

Edycja pliku /etc/ssh/ssh_config i dodanie/odkomentowanie linii:

Przeładowanie demona ssh:

Konfiguracja komponentu PAM z linii komend:

 

Jeżeli mamy skąd pobrać plik /etc/krb5.keytabto go pobieramy.  Zdarza się jednak, że pobranie pliku nie pomaga i należy i tak go wygenerować.

Jeżeli nie mamy skąd pobrać /etc/krb5.keytab to musimy go wygenerować. W tym celu logujemy się do Kerberosa:

Dodanie principal o ile jej jeszcze nie ma w bazie kerberosa:

Utworzenie lokalnej kopii bazy w pliku /etc/krb5.keytab:

Wyświetlenie zawartości /etc/krb5.keytab:

lub

 

Strona klienta NFS – client.example.com

Użytkownik user01 musi mieć takie samo uid na maszynach kdc, server i client.

Zawartość pliku /etc/hosts:

Wyświetlenie zasobów serwera o skróconej nazwie (wg /etc/hosts) server dostępnych do montowania:

Teraz:

Zapis do udostępnionego zasobu na razie nie jest możliwy:

Skopiowanie pliku /etc/krb5.conf z serwera NFS (server.example.com):

Aktywacja klienta NFS:

Edycja pliku /etc/ssh/ssh_config file i dodanie/odkomentowanie linii:

Przeładowanie demona ssh:

Konfiguracja komponentu PAM z linii komend:

 

Jeżeli mamy skąd pobrać plik /etc/krb5.keytabto go pobieramy.  Zdarza się jednak, że pobranie pliku nie pomaga i należy i tak go wygenerować ponieważ przy próbie podmontowania zasobu nfs w trybie krb5 (krb5p) będzie pojawiał się komunikat:

Jeżeli nie mamy skąd pobrać /etc/krb5.keytab to musimy go wygenerować. W tym celu logujemy się do Kerberosa:

Dodanie principal dla hosta o ile jeszcze nie dodane:

Wylistowanie wszystkich principal:

Dodanie klienta nfs do bazy kerberosa:

Wyświetlenie zawartości /etc/krb5.keytab:

lub

Teraz zapis do katalogu /nfskrb będzie możliwy:

 

 

 

2 Replies to “Network File System”

Leave a Reply

Your email address will not be published. Required fields are marked *