Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

8.6. 配置 NFS 服务器

在 NFS 服务器中配置导出的方法有两种:
  • 手动编辑 NFS 配置文件,即 /etc/exports,以及
  • 通过命令行,即使用 exportfs命令

8.6.1. /etc/exports 配置文件

/etc/exports 文件控制将哪些文件系统导出到远程主机并指定选项。它遵循以下语法规则:
  • 空白行将被忽略。
  • 要添加注释,以井号(#)开始一行。
  • 您可以使用反斜杠(\)换行长行
  • 每个导出的文件系统都应该独立。
  • 所有在导出的文件系统后放置的授权主机列表都必须用空格分开。
  • 每个主机的选项必须在主机标识符后直接放在括号中,没有空格分离主机和第一个括号。
导出的文件系统的每个条目都有以下结构:
export host(options)
上述结构使用以下变量:
export
导出的目录
host
导出要共享的主机或网络
选项
用于 主机的选项
可以指定多个主机,以及每个主机的特定选项。要做到这一点,将它们列在与空格分隔列表相同的行中,每个主机名后跟其对应选项(在括号中),如下所示:
export host1(options1) host2(options2) host3(options3)
有关指定主机名的不同方法的详情请参考 第 8.6.5 节 “主机名格式”
在最简单的形式中,/etc/exports 文件只指定导出的目录和允许访问它的主机,如下例所示:

例 8.6. /etc/exports 文件

/exported/directory bob.example.com
在这里,bob.example.com 可以从 NFS 服务器挂载 /exported/directory/。因为在这个示例中没有指定选项,所以 NFS 使用 默认设置
默认设置为:
ro
导出的文件系统是只读的。远程主机无法更改文件系统中共享的数据。要允许主机更改文件系统(即读取和写入),请指定 rw 选项。
sync
在将之前的请求所做的更改写入磁盘前,NFS 服务器不会回复请求。要启用异步写入,请指定 async 选项。
wdelay
如果 NFS 服务器预期另外一个写入请求即将发生,则 NFS 服务器会延迟写入磁盘。这可以提高性能,因为它可减少单独的写入命令访问磁盘的次数,从而减少写入开销。要禁用此功能,请指定 no_wdelay。只有指定了默认 同步 选项时,no _wdelay 才可用。
root_squash
这会阻止 远程 连接的 root 用户(而不是本地用户)具有 root 权限;而 NFS 服务器会为他们分配用户 ID nfsnobody。这会有效地将远程 root 用户的功能"检查"到最低的本地用户,从而防止在远程服务器上可能的未授权写入。要禁用 root squashing,请指定 no_root_squash
要对所有远程用户(包括 root 用户)进行压缩,请使用 all_squash :要指定 NFS 服务器应该分配给特定主机的远程用户的用户和组 ID,请分别使用 anonuid 和 a ongid 选项,如下方所示:
export host(anonuid=uid,anongid=gid)
在这里,uidgid 分别是用户 ID 编号和组 ID 号。a onuid 和 a ongid 选项允许您为远程 NFS 用户创建特殊的用户和组帐户。
默认情况下,Red Hat Enterprise Linux 下 NFS 支持 访问控制列表 (ACL)。要禁用此功能,请在导出文件系统时指定 no_acl 选项。
每个导出的文件系统的默认值都必须被显式覆盖。例如,如果没有指定 rw 选项,则导出的文件系统将共享为只读。以下是 /etc/exports 中覆盖两个默认选项的示例行:
/another/exported/directory 192.168.0.3(rw,async)
在此示例中,192 .168.0.3 可以挂载 /another/exported/directory/ 读取和写入,并且所有写入磁盘都是异步的。有关导出选项的更多信息,请参阅 man exportfs
其他选项在未指定默认值的情况下可用。这包括禁用子树检查、允许来自不安全端口的访问以及允许不安全的文件锁定(对于某些早期 NFS 客户端实施是必需的)。有关这些使用较少的选项的更多信息,请参阅 man export
重要
/etc/exports 文件的格式非常精确,特别是空格字符的使用方面。需要将导出的文件系统与主机、不同主机间使用空格分隔。但是,除了注释行外,文件中不应该包括其他空格。
例如,下面两行并不具有相同的意义:
/home bob.example.com(rw)
/home bob.example.com (rw)
第一行只允许来自 bob.example.com 的用户对 /home 目录进行读写访问。第二行允许来自 bob.example.com 的用户以只读方式挂载目录(默认),而其他世界中的用户可以将其挂载为读/写。