在Debian系统上配置NFS共享,主要分为服务端设置和客户端挂载两大步骤。下面是一个清晰、详细的配置指南。
🚀 第一部分:配置NFS服务端(共享目录的机器)
1. 安装NFS内核服务器
首先,更新软件包列表并安装 nfs-kernel-server 包。如果计划使用NFSv2或NFSv3,rpcbind 也会作为依赖被安装。
sudo apt update
sudo apt install nfs-kernel-server
2. 创建并准备共享目录
创建一个你想通过网络共享的目录,并设置适当的权限。一个常见的做法是将其所有者和组设置为 nobody:nogroup,并赋予读写权限。
sudo mkdir -p /srv/nfs/share
sudo chown nobody:nogroup /srv/nfs/share
sudo chmod 755 /srv/nfs/share
3. 配置文件 /etc/exports
这是NFS服务端最核心的配置文件,用于定义哪些目录共享给谁以及有什么权限。使用文本编辑器打开它:
sudo nano /etc/exports
在该文件中,每一行代表一个共享配置,基本语法如下:
<共享目录> <客户端1>(选项1,选项2,...) <客户端2>(选项,...)
共享目录:你要分享的路径,例如 /srv/nfs/share。
客户端:可以是一个IP地址(如 192.168.1.100)、一个网段(如 192.168.1.0/24 或 192.168.1.0/255.255.255.0)或者一个域名(如 *.example.com)。
常用选项说明:
rw:允许客户端读写。
ro:只读。
sync:确认数据写入磁盘后才响应客户端,保证数据一致性(推荐)。
no_subtree_check:禁用子树检查,通常可以提高可靠性并减少警告。
root_squash:将客户端的root用户映射为匿名用户(nobody),这是重要的安全特性,防止客户端以root权限修改服务端文件。
no_root_squash:允许客户端root用户保留服务端的root权限,风险极高,请勿在非信任网络使用。
all_squash:将所有客户端用户都映射为匿名用户。
配置示例:
假设你想把 /srv/nfs/share 共享给 192.168.1.0/24 网段的所有机器,允许读写,并且安全地隔离root权限,可以添加如下行:
/srv/nfs/share 192.168.1.0/24(rw,sync,no_subtree_check,root_squash)
4. 应用配置并启动服务
配置文件修改后,需要导出共享并重启NFS服务使其生效。
# 导出所有在 /etc/exports 中配置的目录
sudo exportfs -a
# 重启NFS内核服务器
sudo systemctl restart nfs-kernel-server
# 设置NFS服务开机自启
sudo systemctl enable nfs-kernel-server
5. (可选)配置防火墙
如果你的系统启用了防火墙(如 ufw),需要允许NFS流量。NFSv4主要使用2049端口。
# 允许来自内网网段的NFS流量
sudo ufw allow from 192.168.1.0/24 to any port nfs
如果使用NFSv3,还需要开放 rpcbind(端口111)和其他动态端口,配置会更复杂一些。
💻 第二部分:配置NFS客户端(挂载共享的机器)
1. 安装NFS客户端工具
在客户端机器上,需要安装 nfs-common 软件包。
sudo apt update
sudo apt install nfs-common
2. 创建本地挂载点
创建一个本地目录,用于连接远程的共享目录。
sudo mkdir -p /mnt/nfs_share
3. 手动挂载NFS共享
使用 mount 命令将服务端的共享目录挂载到本地。
# 格式:sudo mount -t nfs <服务端IP>:<共享目录> <本地挂载点>
sudo mount -t nfs 192.168.1.100:/srv/nfs/share /mnt/nfs_share
可以指定NFS协议版本,例如强制使用NFSv4:
sudo mount -t nfs -o vers=4 192.168.1.100:/srv/nfs/share /mnt/nfs_share
挂载成功后,可以用 df -h 命令查看是否成功。
4. 测试读写
在挂载点创建或编辑文件,验证读写权限是否正常。
touch /mnt/nfs_share/test.txt
5. 设置开机自动挂载(可选)
编辑 /etc/fstab 文件,添加一条规则,使系统启动时自动挂载:
sudo nano /etc/fstab
添加如下行:
192.168.1.100:/srv/nfs/share /mnt/nfs_share nfs defaults,_netdev 0 0
_netdev 选项非常重要,它告诉系统这是一个网络设备,需要在网络就绪后再尝试挂载,避免开机时因网络未准备好而卡住。
配置好后,可以通过 sudo mount -a 测试 /etc/fstab 中的条目是否正确无误。
🔍 第三部分:验证与故障排查
验证服务端配置
在服务端运行 exportfs -v 可以查看当前有效的导出列表及其选项。
运行 rpcinfo -p 可以查看RPC服务是否正常注册。从客户端运行 rpcinfo -p 192.168.1.100 可以检查服务端的RPC端口是否可达。
检查客户端挂载
运行 mount | grep nfs 可以查看已挂载的NFS文件系统。
如果挂载失败,可以查看系统日志获取详细错误信息:journalctl -xe 或 dmesg | grep nfs。
权限问题
如果客户端挂载后只能读不能写,或者文件所有者显示为 nobody,请检查服务端的 /etc/exports 选项(是否忘了加 rw?)以及共享目录本身的文件系统权限(chmod 和 chown 设置是否正确)。