In this tutorial, we will show you how to install NFS Server on Ubuntu 20.04 LTS. For those of you who didn’t know, Network File System (NFS) is a distributed file system protocol that allows users to access files and directories located on remote computers as if they were on their local machine. NFS is widely used in networked environments to facilitate file sharing and collaboration among multiple users and systems.
This article assumes you have at least basic knowledge of Linux, know how to use the shell, and most importantly, you host your site on your own VPS. The installation is quite simple and assumes you are running in the root account, if not you may need to add ‘sudo
‘ to the commands to get root privileges. I will show you the step-by-step installation of the NFS Server on Ubuntu 20.04 (Focal Fossa). You can follow the same instructions for Ubuntu 18.04, 16.04, and any other Debian-based distribution like Linux Mint.
We use two machines, one running Ubuntu 20.04, which will act as an NFS server, and another one running any other Linux distribution on which we will mount the share. The machines in this example have the following IPs:
NFS Server IP: 192.168.77.20 NFS Clients IPs: From the 192.168.77.0/24 range
Install NFS Server on Ubuntu 20.04 LTS Focal Fossa
Step 1. To begin, it is essential to update your Ubuntu 20.04 system to ensure that you have the latest security patches and software updates. Open a terminal and run the following commands:
sudo apt update sudo apt upgrade
Step 2. Installing NFS Server on Ubuntu 20.04.
To set up an NFS server on Ubuntu 20.04, you need to install the nfs-kernel-server
package. This package contains the necessary components to create an NFS server and manage file sharing. Run the following command to install the package:
sudo apt install nfs-kernel-server
You can verify if the nfs-server
service is running as shown:
sudo systemctl status nfs-server
Step 3. Creating the Shared Directories on the Host.
Creating a directory that will be shared among client systems:
sudo mkdir /var/nfs/general -p
Since we want the client systems to have full access to this shared directory, we need to remove all directory permissions that are restricting access:
sudo chown nobody:nogroup /var/nfs/general
Step 4. Configure NFS on the Host.
We’ll dive into the NFS configuration file to set up the sharing of these resources:
sudo nano /etc/exports
Add the following lines:
/var/nfs/general client_ip(rw,sync,no_subtree_check) /home client_ip(rw,sync,no_root_squash,no_subtree_check)
For basic options of exports:
Option | Description |
rw | Allow both read and write requests on an NFS volume. |
ro | Allow only read requests on an NFS volume. |
sync | Reply to requests only after the changes have been committed to stable storage. (Default) |
async | This option allows the NFS server to violate the NFS protocol and reply to requests before any changes made by that request have been committed to stable storage. |
secure | This option requires that requests originate on an Internet port less than IPPORT_RESERVED (1024). (Default) |
insecure | This option accepts all ports. |
wdelay | Delay committing a written request to a disc slightly if it suspects that another related write request may be in progress or may arrive soon. (Default) |
no_wdelay | This option has no effect if async is also set. The NFS server will normally delay committing a written request to a disc slightly if it suspects that another related write request may be in progress or may arrive soon. This allows multiple write requests to be committed to disc with the one operation which can improve performance. If an NFS server received mainly small unrelated requests, this behavior could actually reduce performance, so no_wdelay is available to turn it off. |
subtree_check | This option enables subtree checking. (Default) |
no_subtree_check | This option disables subtree checking, which has mild security implications but can improve reliability in some circumstances. |
root_squash | Map requests from uid/gid 0 to the anonymous uid/gid. Note that this does not apply to any other uids or gids that might be equally sensitive, such as user bin or group staff. |
no_root_squash | Turn off root squashing. This option is mainly useful for disk-less clients. |
all_squash | Map all uids and gids to the anonymous user. Useful for NFS exported public FTP directories, news spool directories, etc. |
no_all_squash | Turn off all squashing. (Default) |
anonuid=UID | These options explicitly set the uid and gid of the anonymous account. This option is primarily useful for PC/NFS clients, where you might want all requests to appear to be from one user. As an example, consider the export entry for /home/joe in the example section below, which maps all requests to uid 150. |
anongid=GID | Read above (anonuid=UID) |
Finally, restart the NFS server to apply the changes:
sudo systemctl restart nfs-kernel-server
Step 5. Configuration Firewall.
You need to allow access through the firewall otherwise, accessing and mounting the shared directory will be impossible. To achieve this run the command below:
sudo ufw allow from 192.168.77.0/24 to any port nfs sudo ufw enable sudo ufw status
Step 6. Set Up the NFS Clients.
On the client machines, we need to install only the tools required to mount a remote NFS file system.
- Install NFS client on Debian and Ubuntu
Run the following command to install it:
sudo apt install nfs-common
- Create Mount Points on the Client.
Now we create two directories for mounts on the client:
sudo mkdir -p /nfs/general sudo mkdir -p /nfs/home
Next, mount the shares using the Host’s IP address:
sudo mount host_ip:/var/nfs/general /nfs/general sudo mount host_ip:/home /nfs/home
Verify that the remote file systems are mounted successfully using either the mount or df
command:
df -h
To make the mounts permanent on reboot, open the /etc/fstab
file and add the following lines:
sudo nano /etc/fstab
Add the following line:
192.168.77.10:/var/nfs/general /nfs/general nfs defaults,timeo=900,retrans=5,_netdev 0 0 192.168.77.10:/home /nfs/home nfs defaults,timeo=900,retrans=5,_netdev 0 0
Step 7. Test NFS Sharing.
Now we create a test file to the /var/nfs/general
share:
sudo touch /nfs/general/general.test
Check its ownership:
$ ls -l /nfs/home/home.test -rw-r--r-- 1 root root 0 Aug 1 13:32 /nfs/home/home.test
Step 8. Unmounting NFS File System.
If the remote NFS share is no longer needed, you can unmount it as any other mounted file system using the umount
command:
sudo umount /general
Congratulations! You have successfully installed NFS Server. Thanks for using this tutorial for installing the NFS Server on Ubuntu 20.04 LTS Focal Fossa system. For additional help or useful information, we recommend you check the official NFS website.