Ubuntu 16 NFS设置
NFS服务器
服务器端安装NFS服务:
sudo apt install nfs-kernel-server配置
/etc/exports文件
这里案例是共享docker存储卷,方便远程访问虚拟机的home目录,挂载磁盘进行远程开发
/var/lib/docker/volumes/share-data/_data *(rw,sync,no_root_squash,no_subtree_check)启动服务
sudo systemctl start nfs-kernel-server.service防火墙设置
在ubuntu上如果启动了ufw防火墙使用ufw配置NAT masquerade,还需要做如下设置:
编辑
/etc/default/nfs-kernel-server修改如下行:
RPCMOUNTDOPTS=--manage-gids修改成:
RPCMOUNTDOPTS="--manage-gids -p 2000"重启nfs服务
sudo /etc/init.d/nfs-kernel-server restart但是,发现重启了nfs服务哦之后,依然没有监听2000端口。使用命令rpcinfo -p <server_ip>显示mountd服务并没有监听在2000端口上,还是分散在不同的端口
仔细看了systemctl输出,原来mountd是独立的服务nfs-mountd.service,显示如下:
但是,直接重启nfs-mountd.service依然无法使得mountd监听端口修正到2000上。最后参考How to restart mountd without rebooting the machine? 按照指定顺序重启服务才生效:
原因是需要首先重启
nfs-config.service
systemd提供了重新配置nlockmgr而无需重启的方法。配置/etc/sysctl.d/30-nfs-ports.conf内容如下:
以上设置nlockmgr监听端口2001(TCP)和2002(UDP)
执行以下命令重新加载配置
现在配置UFW接受进入服务端口
在 使用ufw配置NAT masquerade 设置了NAT masquerade网络,所以在网关防火墙上执行
(可选)如果NFS服务在另外一台服务器上,则作为网关的防火墙还需要设置IP转发和端口映射 - 这里对外网卡接口是无线网卡
wlp3s0,内部网络是192.168.0.0/24。详细见使用ufw配置NAT masquerade
服务器用户目录uid和客户端不一致的处理方法
Linux上用户目录的uid/gid是505(admin),而本地Mac上的用户uid/gid是501,使用NFS认证的时候采用的是uid对应授权。强制去修改用户uid和gid会带来其他应用风险。
由于NFS服务器可以管理,所以修改服务器NFS输出,将服务器上账号admin的uid和gid映射成anonuid和anongid,
实际操作如下:
修改服务器上的
/etc/exports
注意:这是将服务器上用户目录的
uid和gid映射成匿名id,会带来安全风险,所以务必做好安全控制。
参考
Last updated
Was this helpful?