ubuntu 设置NFS的方法

介绍

​ NFS(网络文件系统)使您可以与该网络上的其他计算机/设备“共享”位于一台联网计算机上的目录。 目录所在的计算机称为服务器,连接到该服务器的计算机或设备称为客户端。 客户端通常“挂载”共享目录以使其成为其自身目录结构的一部分。

​ NFS非常适合在Linux/Unix环境中创建NAS(网络附加存储)。 与使用Microsoft开发的SMB协议的Samba相比,它是原生Linux/Unix协议。 Apple OS对NFS有很好的支持。 Windows 7对NFS有一些支持。

​ 对于更“永久”的网络挂载目录(例如/home目录)或定期访问的共享资源,NFS可能是最佳选择。 如果希望访客用户可以轻松连接的网络共享,则Samba更适合。 这是因为在旧的专有操作系统中更容易存在工具来临时挂载和断开Samba共享。

​ Ubuntu在部署NFS之前,应该熟悉:

  • Linux文件和目录权限
  • 挂载和分离(卸载)文件系统

​ 此方法可在Ubuntu服务器成功部署NFSv4。

NFS快速入门

为了使您了解自己在做什么,请在Ubuntu上使用此简短的练习设置NFSv4服务器(无身份验证安全性)。 然后在Ubuntu客户端挂载共享。 它已经在Ubuntu 14.04上进行了测试。

NFS服务器

要检查是否已安装NFS服务器,可以执行以下操作:

# dpkg -l | grep nfs-kernel-server

安装所需的软件包…

# apt-get -y install nfs-kernel-server

为了简化维护,我们将所有NFS导出隔离在一个目录中,在此目录中,将使用–bind选项挂载实际目录。

​ 假设我们要在/home/users中导出用户的主目录。 首先,我们创建导出文件系统:

# mkdir -p /export/users

/export和/export/users具有777权限很重要,因为我们将在没有LDAP/NIS身份验证的情况下从客户端访问NFS共享。 如果使用身份验证,则将不适用(请参阅下文)。 现在使用以下命令挂载真实用户目录:

# mount --bind /home/users /export/users

​ 为了避免我们在每次重新启动后重新键入此代码,我们将以下行添加到/etc/fstab中:

/home/users    /export/users   none    bind  0  0

与NFS服务器相关的配置文件共有三个:/etc/default/nfs-kernel-server,/etc/default/nfs-common和/etc/exports。

  • 目前,/etc/default/nfs-kernel-server中唯一重要的选项是NEED_SVCGSSD。 默认情况下将其设置为“ no”,这很好,因为这次我们不激活NFSv4安全性。

为了自动映射ID名称,客户端和服务器都要求/etc/idmapd.conf文件具有相同的内容和正确的域名。 此外,此文件在“Mapping”部分中应包含以下几行:

[Mapping] 
Nobody-User = nobody 
Nobody-Group = nogroup

但是,客户端对Nobody-User和Nobody-Group可能有不同的要求。 例如,在RedHat变体上,两者都是nfsnobody。 cat /etc/passwd和cat /etc/group应该显示“ nobody”帐户。

这样,服务器和客户端不需要用户共享相同的UID / GID。

对于使用基于LDAP的身份验证的用户,将以下行添加到客户端的idmapd.conf中:

[Translation] 
Method = nsswitch

这将使idmapd知道查看nsswitch.conf以确定应该在哪里寻找证书信息(并且,如果您已经在使用LDAP身份验证,则nsswitch不需要进一步的说明)。

假如现在将目录导出到本地网络192.168.1.0/24,则需要将以下两行添加到/etc/exports

/export       192.168.1.0/24(rw,fsid=0,insecure,no_subtree_check,async) 
/export/users 192.168.1.0/24(rw,nohide,insecure,no_subtree_check,async)
Portmap Lockdown

可选

将以下行添加到/etc/hosts.deny:

rpcbind mountd nfsd statd lockd rquotad : ALL

通过首先阻止所有客户端,将仅允许下面/etc/hosts.allow中的客户端访问服务器。

现在将以下行添加到/etc/hosts.allow中:

rpcbind mountd nfsd statd lockd rquotad : IP地址列表

此处的“ IP地址列表”是字符串,需要制作一个包含服务器和所有客户端的IP地址列表。 由于端口映射的限制,这些地址必须是IP地址(它不喜欢主机名)。 请注意,如果您已设置NIS,只需将它们添加到同一行。

注意:由于最新版本的Ubuntu中的启动脚本使用rpcinfo命令来发现NFSv3支持,因此请确保授权IP地址列表中包括本地主机地址(127.0.0.1),如果本地主机无法连接,则将禁用此功能。

现在重启服务

# service nfs-kernel-server restart

NFSv4客户端

安装所需的软件包:

# apt-get -y install nfs-common 

在客户端上,可以使用一个命令挂载完整的导出树:

# mount -t nfs -o proto=tcp,port=2049 <nfs-server-IP>:/ /mnt

也可以指定NFS服务器主机名而不是其IP,但是在这种情况下,需要确保主机名可以在客户端解析为IP(可以使用/etc/hosts文件)。

请注意,在NFSv4中:/export是不必要的,在NFSv3中也是如此。 根导出:/默认使用fsid = 0导出。

还可以使用以下命令挂载导出的子树:

# mount -t nfs -o proto=tcp,port=2049 :/users /home/users

为了避免我们在每次重新启动后重新键入此代码,可将以下行添加到/etc/fstab中:

<nfs-server-IP>:/   /mnt   nfs    auto  0  0

​ 如果在挂载之后,/proc/mounts中的条目显示为😕/(带有两个斜杠),那么您可能需要在/etc/fstab中指定两个斜杠,否则umount可能会抱怨找不到挂载。

auto选项在启动时挂载。 但是,如果客户端使用在用户级别(登录后)管理的wifi连接,则此方法将不起作用,因为在启动时网络将不可用。 在Ubuntu 12.04 LTS和更高版本中,默认情况下,WiFi连接在系统级别进行管理,因此在启动时自动挂载NFS共享应该可以正常工作。

Ubuntu Server不附带任何init.d / netfs或其他脚本来为您执行此操作。

Portmap Lockdown

可选

将以下行添加到/etc/hosts.deny:

rpcbind : ALL

通过首先阻止所有客户端,将仅允许下面/etc/hosts.allow中的客户端访问服务器。

现在将以下行添加到/etc/hosts.allow中:

rpcbind : NFS服务器IP地址

其中“ NFS服务器IP地址”是服务器的IP地址。 这必须是数字! 这就是portmap的工作方式。

NFS服务器

预安装设置

以下任何预安装步骤均非严格必要。

用户权限

NFS用户权限基于用户ID(UID)。 客户端上任何用户的UID必须与服务器上的UID匹配,以便用户可以访问。 这样做的典型方法是:

  • 手动进行密码文件同步
  • 使用 LDAP
  • 使用 NIS

同样重要的是要注意,在主用户具有root访问权限的系统上必须小心-该用户可以更改系统上的UID以允许自己访问任何人的文件。此页假定管理团队是唯一具有root访问权限的组,并且他们都是受信任的。任何其他内容都代表更高级的配置,在此不再赘述。

组权限

使用NFS,用户对文件的访问权限是由在客户端(而不是服务器)上的组成员身份确定的。 但是,有一个重要的限制:最多16个组从客户端传递到服务器,并且,如果用户是客户端上16个以上组的成员,则某些文件或目录可能出乎意料地不可访问。

主机名

如果使用DNS,则为可选。

将任何客户端名称和IP地址添加到/etc/hosts。服务器的真实IP地址(不是127.0.0.1)应该已经在这里。这可确保即使DNS出现故障,NFS仍可正常工作。如果愿意的话,则可以依赖DNS。

NIS

可选-仅在使用NIS时执行步骤

注意:在使用NIS时有效。 否则,将无法使用网络组,而应在/etc/exports中指定单个IP或主机名。 阅读man netgroup中的BUGS部分。

编辑/etc/netgroup并添加一行以对客户端进行分类。(此步骤不是必需的,但为方便起见)。

myclients (client1,,) (client2,,)

显然,可以添加更多的客户端。 myclients可以是任何您喜欢的东西; 这是一个网络组名称。

运行以下命令以重建YP数据库:

make -C /var/yp
Portmap Lockdown

可选

将以下行添加到/etc/hosts.deny:

rpcbind mountd nfsd statd lockd rquotad : ALL

通过首先阻止所有客户端,将仅允许下面/etc/hosts.allow中的客户端访问服务器。

现在将以下行添加到/etc/hosts.allow中:

rpcbind mountd nfsd statd lockd rquotad :IP地址列表

在“ IP地址列表”字符串所在的位置,需要创建一个包含服务器和所有客户端的IP地址列表。 由于端口映射的限制,这些地址必须是IP地址(它不喜欢主机名)。 请注意,如果您已设置NIS,只需将它们添加到同一行。

安装与配置

安装NFS服务器
apt-get -y install rpcbind nfs-kernel-server
共享

编辑/etc/exports并添加共享:

/home @myclients(rw,sync,no_subtree_check)  
/usr/local @myclients(rw,sync,no_subtree_check)

以上配置文件将/home和/usr/local共享到myclients网络组中的所有客户端。

/home 192.168.0.10(rw,sync,no_subtree_check) 192.168.0.11(rw,sync,no_subtree_check) /usr/local 192.168.0.10(rw,sync,no_subtree_check) 192.168.0.11(rw,sync,no_subtree_check)

以上配置文件将/home和/usr/local共享给两个具有固定IP地址的客户端。最好仅与具有静态IP地址的计算机配合使用。

/home 192.168.0.0/255.255.255.0(rw,sync,no_subtree_check)  
/usr/local 192.168.0.0/255.255.255.0(rw,sync,no_subtree_check)

以上配置文件将/home和/usr/local共享给属于指定IP地址范围内的专用网络中的所有客户端。

rw 使共享能够读/写,并且sync要求服务器仅在将任何更改刷新到磁盘后才答复请求。 这是最安全的选择(async速度更快,但很危险。强烈建议阅读man exports。

设置/etc/exports后,导出共享:

exportfs -arv

每当修改 /etc/exports时,都希望执行此命令。

重启服务

默认情况下,端口映射仅绑定到环回接口。 要允许从远程计算机访问端口映射,您需要更改/ etc / default / portmap以摆脱“ -l”或“ -i 127.0.0.1”。

如果更改了/ etc / default / portmap,则需要重新启动portmap:

service portmap restart

NFS内核服务器也将需要重启:

service nfs-kernel-server restart
安全须知

​ 除了上面讨论的UID问题外,还应注意,攻击者可能会伪装成一台允许映射共享的机器,从而使他们可以创建任意UID来访问您的文件。 一种可能的解决方案是 IPSec,另请参见下面的“ NFS和IPSec”部分。 可以将所有域成员设置为仅通过IPSec彼此通信,这将有效地验证您的客户端是谁。

​ IPSec的工作原理是使用服务器的密钥对到服务器的通信进行加密,然后服务器会发回用客户端的密钥加密的所有答复。 使用相应的密钥解密流量。 如果客户端没有客户端应该拥有的密钥,则它将无法发送或接收数据。

IPSec的替代方法是物理上独立的网络。 这需要单独的网络交换机和单独的以太网卡,以及该网络的物理安全性。

NFS客户端

安装

apt-get -y install rpcbind nfs-common
Portmap Lockdown

可选

将以下行添加到/etc/hosts.deny:

rpcbind : ALL

通过首先阻止所有服务器,将仅允许客户端访问下面/etc/hosts.allow中的服务器。

现在将以下行添加到/etc/hosts.allow中:

rpcbind : NFS server IP address

其中“ NFS服务器IP地址”是服务器的IP地址。 这必须是数字! 这就是portmap的工作方式。

主机名

如果使用DNS,则为可选

将服务器名称添加到/etc/hosts。 这样可以确保即使DNS出现故障,NFS挂载仍将正常工作。 可以根据需要依赖DNS,这取决于您。

Mounts
检查是否一切正常

应该立即尝试挂载它。 将使用的基本模板是:

mount ServerIP:/folder/already/setup/to/be/shared /home/username/folder/in/your/local/computer

因此,例如:

mount 192.168.1.42:/home/music /home/poningru/music
启动时挂载

NFS挂载既可以在使用autofs访问时自动挂载,也可以使用/etc/fstab中的条目通过静态挂载进行设置。 两者都在下面说明。

自动挂载器

安装autofs:

apt-get -y install autofs

以下配置示例将主目录设置为在登录NFS服务器时自动挂载。也可以将其他目录设置为在访问时自动挂载。

将以下行添加到/etc/auto.master的末尾:

  /home         /etc/auto.home

现在创建/etc/auto.home并插入以下内容:

*    solarisbox1.company.com.au,solarisbox2.company.com.au:/export/home/&

上面的行自动从solarisbox1.company.com.au:/export/home/[用户名]或solarisbox2.company.com.au:/export/home/[用户名]挂载在/home/[用户名]上访问的目录。

重启autofs以启用配置:

service autofs start
静态挂载

在设置挂载之前,请确保已经创建了将用作挂载点的目录。

在/etc/fstab中,为共享添加行,例如:

servername:dir /mntpoint nfs rw,hard,intr 0 0

rw 对其进行读/写挂载。 显然,如果服务器以只读方式共享它,则客户端将无法以其它方式挂载它。 hard挂载共享,以便在服务器不可用时,程序将等待直到可用。 替代方案是 soft。intr允许中断/杀死进程。 否则,它将忽略。 这些文件的文档可以在man mount的Mount options for nfs中找到。

现在可以使用mount/mountpoint或mount -a挂载文件系统,以挂载应在引导时挂载的所有内容。

注意事项
最低限度的NFS设置

上面的步骤非常全面。 此处列出了设置NFS所需的最少步骤数:

http://www.ubuntuforums.org/showthread.php?t=249889

IPSec注意事项

如果使用的是IPSec,则Breezy / Dapper中的默认关闭顺序会导致客户端在关闭时挂起,因为IPSec在NFS之前先关闭。 要解决此问题,请执行以下操作:

update-rc.d -f setkey remove update-rc.d setkey start 37 0 6 S .

已在此处提交错误: https://launchpad.net/distros/ubuntu/+source/ipsec-tools/+bug/37536

故障排除

在加密的主目录中挂载NFS共享在启动时无法正常工作

只有在成功登录并解密了主目录之后,才能在加密的主目录中挂载NFS共享。 这意味着使用/ etc / fstab在引导时挂载NFS共享将不起作用-因为挂载时您的主目录尚未被解密。 有一种使用符号链接的简单方法:

  • 创建一个备用目录以在以下位置挂载NFS共享:
$ sudo mkdir /nfs $ sudo mkdir /nfs/music
  • 编辑/etc/fstab将NFS共享挂载到该目录中:
nfsServer:music  /nfs/music  nfs  auto  0 0
  • 在您的主目录内创建一个符号链接,指向实际的挂载位置(在本例中,请首先删除该位置已存在的“ Music”目录):
$ rmdir /home/user/Music 
$ ln -s /nfs/music/ /home/user/Music

其它资源

动时无法正常工作

只有在成功登录并解密了主目录之后,才能在加密的主目录中挂载NFS共享。 这意味着使用/ etc / fstab在引导时挂载NFS共享将不起作用-因为挂载时您的主目录尚未被解密。 有一种使用符号链接的简单方法:

  • 创建一个备用目录以在以下位置挂载NFS共享:
$ sudo mkdir /nfs $ sudo mkdir /nfs/music
  • 编辑/etc/fstab将NFS共享挂载到该目录中:
nfsServer:music  /nfs/music  nfs  auto  0 0
  • 在您的主目录内创建一个符号链接,指向实际的挂载位置(在本例中,请首先删除该位置已存在的“ Music”目录):
$ rmdir /home/user/Music 
$ ln -s /nfs/music/ /home/user/Music

其它资源

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值