在Ubuntu系统中搭建NFS(Network File System)服务器可以让多台客户端计算机通过网络共享文件,这对于团队协作、数据集中管理以及跨设备访问文件非常实用,以下是详细的搭建步骤,包括环境准备、服务安装、配置文件修改、权限设置、服务启动与测试,以及常见问题的解决方案。

环境准备
在开始之前,需要确保Ubuntu服务器已经正确安装并更新了系统软件包,假设服务器IP地址为192.168.1.100,客户端IP地址为192.168.1.x段(可根据实际网络环境调整),通过以下命令更新系统:
sudo apt update sudo apt upgrade -y
为了确保服务器和客户端之间的网络通信正常,建议在服务器上安装nfs-common工具包(包含NFS客户端工具),以便后续测试:
sudo apt install nfs-common -y
安装NFS服务器软件
Ubuntu默认的软件源中包含NFS服务器软件包nfs-kernel-server,该包提供了内核级的NFS支持,性能较好,使用以下命令安装:
sudo apt install nfs-kernel-server -y
安装完成后,系统会自动启动NFS服务,但为了确保配置生效,后续需要手动重启服务。

创建共享目录
选择一个目录作为NFS共享目录,例如/home/nfs_share,首先创建该目录,并设置合适的权限:
sudo mkdir -p /home/nfs_share sudo chown -R nobody:nogroup /home/nfs_share sudo chmod -R 777 /home/nfs_share
这里将目录所有者设置为nobody和组nogroup,是为了避免客户端访问时因权限问题导致错误;777权限允许所有用户读写执行,实际生产环境中可根据需求调整(如设置为755或770)。
配置NFS共享目录
NFS服务器的核心配置文件是/etc/exports,该文件定义了哪些目录可以被哪些客户端访问,以及访问权限,编辑该文件:
sudo nano /etc/exports
在文件末尾添加以下内容(根据实际需求修改):

/home/nfs_share 192.168.1.0/24(rw,sync,no_subtree_check)
参数说明:
168.1.0/24:允许访问的客户端IP段,/24表示子网掩码255.255.255.0,即该网段所有设备;若指定单个IP,如168.1.101;若允许所有客户端,可使用(不推荐,存在安全风险)。rw:允许客户端读写共享目录;若只读,则使用ro。sync:数据同步写入磁盘,确保数据安全性;若追求性能,可使用async(但可能丢失数据)。no_subtree_check:不检查子目录,避免某些场景下的挂载错误。
保存文件后,执行以下命令使配置生效:
sudo exportfs -a
启动并设置NFS服务开机自启
确保NFS相关服务正在运行,并设置开机自启:
sudo systemctl restart nfs-kernel-server sudo systemctl enable nfs-kernel-server
检查服务状态:
sudo systemctl status nfs-kernel-server
若显示active (running),则服务运行正常。
防火墙配置
若服务器启用了UFW防火墙,需要开放NFS相关端口(默认2049端口)以及rpcbind端口(111端口):
sudo ufw allow 111/tcp sudo ufw allow 2049/tcp sudo ufw reload
若使用iptables,需手动添加规则:
sudo iptables -A INPUT -p tcp --dport 111 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 2049 -j ACCEPT sudo iptables-save > /etc/iptables/rules.v4
客户端挂载测试
在客户端(可以是另一台Ubuntu或其他Linux系统),首先安装nfs-common:
sudo apt install nfs-common -y
创建本地挂载目录,例如/mnt/nfs_client:
sudo mkdir -p /mnt/nfs_client
挂载NFS共享目录:
sudo mount 192.168.1.100:/home/nfs_share /mnt/nfs_client
挂载成功后,可通过df -h查看挂载信息,或在/mnt/nfs_client中创建文件测试读写权限,若希望开机自动挂载,可编辑/etc/fstab文件:
168.1.100:/home/nfs_share /mnt/nfs_client nfs defaults 0 0
常见问题排查
- 权限问题:客户端挂载后提示“Permission denied”,可能是共享目录权限或NFS配置问题,检查
/home/nfs_share的权限是否为777,以及/etc/exports中是否正确设置了rw选项。 - 端口未开放:客户端挂载超时,可能是防火墙或NFS服务端口未开放,检查服务器防火墙规则,确保
111和2049端口已开放,并使用rpcinfo -p确认NFS服务端口状态。
相关问答FAQs
问题1:如何查看NFS服务已开放的共享目录?
解答:可以使用showmount命令查看服务器端开放的共享目录,在客户端执行以下命令:
showmount -e 192.168.1.100
若显示/home/nfs_share 192.168.1.0/24,则表示共享目录配置正确。
问题2:NFS挂载后,客户端无法删除文件,提示“Operation not permitted”,如何解决?
解答:这通常是由于NFS服务器的root_squash选项默认将客户端root用户映射为匿名用户(nobody)导致的,若需要客户端root用户拥有完全权限,可在/etc/exports中添加no_root_squash选项,
/home/nfs_share 192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash)
修改后执行sudo exportfs -a重新加载配置,并重启NFS服务,注意:此选项会降低安全性,仅在可信网络环境中使用。
