Network File System (NFS) adalah protokol file sistem terdistribusi yang memungkinkan Anda untuk berbagi direktori melalui jaringan. Dengan NFS, Anda dapat memasang direktori jarak jauh di sistem Anda dan bekerja dengan file jarak jauh seolah-olah file tersebut adalah file lokal.

Protokol NFS tidak dienkripsi secara default, dan tidak seperti Samba, protokol ini tidak menyediakan otentikasi pengguna. Akses ke server dibatasi oleh alamat IP atau hostnames klien.

Dalam tutorial ini, Anda akan melalui langkah-langkah yang diperlukan untuk menyiapkan NFSv4 Server di CentOS 8. Kami juga akan menunjukkan kepada Anda cara mount NFS file system pada klien.

Prasyarat

Kami berasumsi bahwa Anda memiliki server yang menjalankan CentOS 8 di mana kami akan menyiapkan NFS server dan mesin lain yang akan bertindak sebagai NFS clients.

Server dan klien harus dapat berkomunikasi satu sama lain melalui private network. Jika penyedia hosting Anda tidak menawarkan atau memberikan alamat private IP, Anda dapat menggunakan alamat IP public dan mengkonfigurasi firewall server untuk mengizinkan lalu lintas di port 2049 hanya dari sumber tepercaya.

Mesin dalam contoh ini memiliki IP berikut:

NFS Server IP: 192.168.33.148
NFS Clients IP: Rentang IP 192.168.33.0/24

Set Up NFS Server di CentOS 8

Bagian ini menjelaskan cara install paket yang diperlukan, membuat dan mengekspor direktori NFS, dan mengkonfigurasi firewall.

Install NFS server

Paket “nfs-utils” menyediakan utilitas dan NFS daemon untuk NFS server. Untuk menginstalnya jalankan perintah berikut:

sudo dnf install nfs-utils

Setelah instalasi selesai, aktifkan dan mulai layanan NFS dengan mengetik:

sudo systemctl enable --now nfs-server

Secara default, pada CentOS 8 NFS versi 3 dan 4.x diaktifkan, versi 2 dinonaktifkan. NFSv2 sudah cukup usang sekarang, dan tidak ada alasan untuk mengaktifkannya. Untuk memverifikasinya jalankan perintah cat berikut:

sudo cat /proc/fs/nfsd/versions
-2 +3 +4 +4.1 +4.2

Opsi konfigurasi NFS server diatur dalam file /etc/nfsmount.conf dan /etc/nfs.conf. Pengaturan default sudah cukup baik untuk menjalankan NFS Server.

Membuat file sistem

Ketika mengkonfigurasi NFSv4 server, merupakan praktik terbaik menggunakan direktori root NFS global dan bind mount direktori sebenarnya ke mount point share. Dalam contoh ini, kita akan menggunakan direktory /srv/nfs4 sebagai root NFS.

Untuk lebih menjelaskan bagaimana NFS mounts dapat dikonfigurasi, kami akan membagikan dua direktori (/var/www dan /opt/backups) dengan pengaturan konfigurasi yang berbeda.

Untuk direktori /var/www/ dimiliki oleh user dengan group apache dan /opt/backups dimiliki oleh root.

Buat filesystem ekspor menggunakan perintah mkdir:

sudo mkdir -p /srv/nfs4/{backups,www}

Mount direktori yang sebenarnya:

sudo mount --bind /opt/backups /srv/nfs4/backups
sudo mount --bind /var/www /srv/nfs4/www

Untuk membuat bind mounts menjadi permanen, tambahkan entri berikut ke file /etc/fstab:

sudo nano /etc/fstab
/opt/backups /srv/nfs4/backups  none   bind   0   0
/var/www     /srv/nfs4/www      none   bind   0   0

Mengekspor file systems

Langkah selanjutnya adalah menentukan file systems yang akan diekspor oleh NFS server , opsi share dan klien yang diizinkan untuk mengakses file systems tersebut. Untuk melakukannya, buka file /etc/exports:

sudo nano /etc/exports

Ekspor direktori www dan backups dan izinkan akses hanya dari klien di jaringan 192.168.33.0/24:

/srv/nfs4         192.168.33.0/24(rw,sync,no_subtree_check,crossmnt,fsid=0)
/srv/nfs4/backups 192.168.33.0/24(ro,sync,no_subtree_check) 192.168.33.3(rw,sync,no_subtree_check)
/srv/nfs4/www     192.168.33.110(rw,sync,no_subtree_check)

Baris pertama berisi fsid=0 mendefinisikan direktori root NFS /srv/nfs. Akses pada volume NFS ini hanya diizinkan untuk klien dari subnet 192.168.33.0/24. Opsi crossmnt diperlukan untuk berbagi direktori yang merupakan sub-direktori dari direktori yang diekspor.

Baris kedua menunjukkan bagaimana menentukan beberapa aturan ekspor untuk satu sistem file. Ia mengekspor direktori /srv/nfs4/backups dan hanya mengizinkan akses read ke seluruh rentang IP 192.168.33.0/24, dan keduanya memiliki akses read and write ke 192.168.33.3.

Opsi sync memberitahu NFS untuk menulis perubahan ke disk sebelum menjawab. Baris terakhir harus jelas. Untuk informasi lebih lanjut tentang semua opsi yang tersedia, ketik man exports di terminal Anda.

Simpan file dan ekspor share:

sudo exportfs -ra

Anda perlu menjalankan perintah di atas setiap kali Anda memodifikasi file /etc/exports. Jika ada kesalahan atau peringatan, mereka akan ditampilkan di terminal.

Untuk melihat active exports saat ini dan kondisinya, gunakan:

sudo exportfs -v

Output akan mencakup semua shares dengan opsi mereka. Seperti yang Anda lihat, ada juga opsi yang belum kami definisikan di file /etc/exports. Itu adalah opsi default, dan jika Anda ingin mengubahnya, Anda harus mengatur opsi itu secara jelas.

/srv/nfs4/backups	192.168.33.3(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
/srv/nfs4/www 	192.168.33.110(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
/srv/nfs4     	192.168.33.0/24(sync,wdelay,hide,crossmnt,no_subtree_check,fsid=0,sec=sys,rw,secure,root_squash,no_all_squash)
/srv/nfs4/backups
		192.168.33.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,ro,secure,root_squash,no_all_squash)

root_squash adalah salah satu opsi paling penting tentang keamanan NFS. Ini mencegah pengguna root yang terhubung dari klien untuk memiliki hak akses root pada shares yang dipasang (remote server). Ini juga akan memetakan root UIDdan GID ke nobody/nogroup UID/GID

Agar pengguna di mesin klien memiliki akses, NFS mengharapkan pengguna dan ID grup klien agar cocok dengan yang ada di server. Pilihan lain adalah menggunakan fitur idmapping NFSv4 yang menerjemahkan user dan grup ID menjadi nama dan sebaliknya.

Pada poin ini, Anda telah menyiapkan NFS server di server CentOS. Anda sekarang dapat pindah ke langkah berikutnya dan mengkonfigurasi klien dan terhubung ke server NFS.

Konfigurasi firewall

FirewallD adalah solusi firewall default di Centos 8.

Layanan NFS mencakup aturan yang telah ditentukan untuk mengizinkan akses ke server NFS.

Perintah berikut secara permanen akan memungkinkan akses dari subnet 192.168.33.0/24:

sudo firewall-cmd --new-zone=nfs --permanent
sudo firewall-cmd --zone=nfs --add-service=nfs --permanent
sudo firewall-cmd --zone=nfs --add-source=192.168.33.0/24 --permanent
sudo firewall-cmd --reload

Setup NFS Client

Sekarang setelah NFS server diatur dan direktori share diekspor, langkah selanjutnya mengonfigurasi klien dan mount remote file systems.

Anda juga dapat mount NFS share di macOS dan Windows, tetapi kami akan fokus pada sistem Linux.

Menginstal NFS client

Pada mesin klien, instal tool yang diperlukan untuk memasang sistem file NFS jarak jauh.

  • Install NFS client on Debian and Ubuntu 
    Nama paket yang diperlukan untuk memasang NFS file systems pada distribusi berbasis Debian adalah nfs-common. Untuk menginstalnya jalankan:

    sudo apt update
    sudo apt install nfs-common
    
  • Install NFS client on CentOS and Fedora
    Pada Redhat dan turunannya, install paket nfs-utils:

    sudo yum install nfs-utils
    

Cara Mounting file systems

Kita akan bekerja pada mesin client dengan IP 192.168.33.110, yang memiliki akses read and write ke sistem file /srv/nfs4/www dan akses read-only ke sistem file /srv/nfs4/backups.

Buat dua direktori baru untuk mount point. Anda dapat membuat direktori ini di lokasi mana pun yang Anda inginkan.

sudo mkdir -p /backups
sudo mkdir -p /srv/www

Pasang sistem file yang diekspor dengan perintah mount :

sudo mount -t nfs -o vers=4 192.168.33.148:/backups /backups
sudo mount -t nfs -o vers=4 192.168.33.148:/www /srv/www

Di mana 192.168.33.148 adalah IP dari NFS server. Anda juga dapat menggunakan hostname alih-alih alamat IP, tetapi perlu resolvable oleh mesin klien. Ini biasanya dilakukan dengan memetakan hostname ke IP di file /etc/hosts.

Saat memasang sistem file NFSv4, Anda perlu menghilangkan direktori root NFS, jadi alih-alih /srv/nfs4/backups Anda harus menggunakan /backups.

Pastikan sistem file jarak jauh berhasil dipasang menggunakan perintah mount atau perintah df:

df -h

Perintah akan mencetak semua sistem file yang dipasang. Dua baris terakhir adalah share yang dipasang:

...
192.168.33.148:/backups           9.7G  1.2G  8.5G  13% /backups
192.168.33.148:/www               9.7G  1.2G  8.5G  13% /srv/www

Untuk membuat mounts permanen pada reboot, buka file /etc/fstab

sudo nano /etc/fstab

dan tambahkan baris berikut:

192.168.33.148:/backups /backups   nfs   defaults,timeo=900,retrans=5,_netdev	0 0
192.168.33.148:/www /srv/www       nfs   defaults,timeo=900,retrans=5,_netdev	0 0

Untuk menemukan informasi lebih lanjut tentang opsi yang tersedia saat memasang sistem file NFS, ketikkan man nfs di terminal Anda.

Opsi lain untuk memasang sistem file jarak jauh adalah menggunakan tool autofs atau untuk membuat unit systemd.

Menguji Akses NFS

Mari kita uji akses ke share dengan membuat file baru di masing-masing.

Pertama, cobalah untuk membuat file uji ke direktori /backup menggunakan perintah touch :

sudo touch /backups/test.txt

Sistem file /backup diekspor sebagai hanya-baca, dan seperti yang diharapkan Anda akan melihat pesan kesalahan Permission denied:

touch: cannot touch ‘/backups/test’: Permission denied

Selanjutnya, cobalah untuk membuat file uji ke direktori /srv/www sebagai root menggunakan perintah sudo :

sudo touch /srv/www/test.txt

Sekali lagi, Anda akan melihat pesan Izin ditolak (Permission denied).

touch: cannot touch ‘/srv/www’: Permission denied

Direktori /var/www dimiliki oleh user apache, dan share memiliki set opsi root_squash, yang memetakan pengguna root ke grup nobody  dan grup nogroup yang tidak memiliki izin write (menulis) ke share jarak jauh.

Dengan asumsi bahwa user apache ada pada mesin klien dengan UID dan GID yang sama seperti pada server jarak jauh, Anda dapat menguji untuk membuat file sebagai user apache dengan:

sudo -u apache touch /srv/www/test.txt

Perintah tidak akan menampilkan output, yang berarti file berhasil dibuat.

Untuk memverifikasi daftar file dalam direktori /srv/www:

ls -la /srv/www

Output akan menampilkan file yang baru dibuat:

drwxr-xr-x 3 apache apache 4096 Jun 23 22:18 .
drwxr-xr-x 3 root     root     4096 Jun 23 22:29 ..
-rw-r--r-- 1 apache apache    0 Jun 23 21:58 index.html
-rw-r--r-- 1 apache apache    0 Jun 23 22:18 test.txt

Cara Lepas (Unmounting) NFS File  System

Jika Anda tidak lagi membutuhkan emote NFS share, Anda dapat melepasnya sama seperti sebagai melepas file drive yang terpasang menggunakan perintah umount. Misalnya, untuk meng-unmount bagian /backup yang Anda jalankan:

sudo umount /backups

Jika titik mount didefinisikan dalam file /etc/fstab, pastikan Anda menghapus baris atau memberi comment dengan menambahkan # di awal baris.

Kesimpulan

Dalam tutorial ini, kami telah menunjukkan kepada Anda cara mengatur NFS server dan cara memasang remote file systems pada mesin klien. Jika Anda menerapkan NFS dalam produksi atau untuk berbagi data, merupakan ide bagus untuk mengaktifkan otentikasi kerberos.

Sebagai alternatif NFS, Anda dapat menggunakan SSHFS untuk mount direktori jarak jauh melalui koneksi SSH. SSHFS dienkripsi secara default dan jauh lebih mudah untuk dikonfigurasi dan digunakan.