Advertisement

Linux NFS服务器的安装与配置

阅读量:

NFS(Network File System)是一种用于分散式文件系统的协定,由Sun公司开发于1984年。它允许不同机器上的客户端通过网络访问服务器上的数据,并通过远程过程调用(RPC)实现文件传输功能。NFS的核心原理是“客户端-服务器型”,其主要组件包括nfs-utils用于管理文件共享和portmap用于安全端口映射。
系统环境方面:
操作系统:CentOS release 5.6
NFS服务器IP地址:192.168.1.108
阻止防火墙:firewall is not running
SELINUX设置为disabled
NFS服务安装:
需要安装nfs-utils和portmap软件包
使用图片:确认已安装后启动服务
配置与守护进程:
主要守护进程包括nfsd(管理客户端登录)和mountd(管理文件系统)
portmap负责端口映射
实例操作:
将NFS服务器的/home/david目录共享给192.168.1.24/255.255.255.0网段
使用showmount -e 192.168.1.108查看共享状态
挂载成功后测试权限
注意事项:
修改/etc/exports需使用exportfs命令重新生效
系统环境需满足SELINUX=disabled,并确保防火墙关闭以避免外部连接

一、NFS服务简介

NFS是缩写的缩写形式,即为网络文件系统.它是一种由Sun公司开发的用于分散式文件系统的协议,自1984年对外公布.该协议的主要功能是通过网络实现不同计算机之间共享特定的数据块,使得客户端程序能够在网络上访问服务器磁盘上的独立数据集,从而在类Unix系统中实现磁盘文件共享的一种方法.

NFS的主要原则在于通过一组RPC实现不同客户端与服务端共享相同的文件系统。这一机制完全不受操作系统的影响,并支持多种硬件和操作系统之间的文件共享。

以下是经过同义改写的文本

二、系统环境

系统平台:CentOS release 5.6 (Final)

NFS Server IP:192.168.1.108

防火墙已关闭/iptables: Firewall is not running.

SELINUX=disabled

三、安装NFS服务

NFS的安装过程非常简便,在实际操作中只需关注两大关键组件即可完成配置。通常情况下,默认系统会自动完成必要的参数设置与文件管理功能。

  • nfs-utils-* :涵盖基础的NFS命令和监控工具。
  • portmap-* :能够提供安全的NFS-RPC 连接功能。

1、查看系统是否已安装NFS

系统默认已安装了nfs-utils portmap 两个软件包。

2、当现有系统未预先配置NFS所需软件包时,请手动完成安装流程。nfs-utilsportmap 两组相关软件包的安装文件均位于系统的官方软件库资源CD-ROM上。

复制代码

四、NFS系统守护进程

  • nfsd:它是基本的NFS守护进程,主要功能是管理客户端是否能够登录服务器;
  • mountd:它是RPC安装守护进程,主要功能是管理NFS的文件系统。当客户端顺利通过nfsd登录NFS服务器后,在使用NFS服务所提供的文件前,还必须通过文件使用权限的验证。它会读取NFS的配置文件/etc/exports来对比客户端权限。
  • portmap:主要功能是进行端口映射工作。当客户端尝试连接并使用RPC服务器提供的服务(如NFS服务)时,portmap会将所管理的与服务对应的端口提供给客户端,从而使客户可以通过该端口向服务器请求服务。

五、NFS服务器的配置

该NFS服务器的配置较为简单。具体操作中,在指定的配置文件路径中进行相关参数设置后,并运行NFS服务即可完成整个部署流程。

NFS的常用目录

/etc/exports NFS服务的主要配置文件

/usr/sbin/exportfs NFS服务的管理命令

/usr/sbin/showmount 客户端的查看命令

/var/lib/nfs/etab 记录NFS分享出来的目录的完整权限设定值

/var/lib/nfs/xtab 记录曾经登录过的客户端信息

该NFS服务的配置信息存储于位于$HOME/.config/nfs/exports中的特定目录中。其中包含了与该网络文件共享服务相关的各种参数设置需要注意的是,默认情况下该配置信息可能不存在于系统中因此建议采用vim文本编辑器来手动创建该(exports)目录下的nfs.conf文件并将其内容填充进去以完成必要的参数设置

/etc/exports文件内容格式:

复制代码

a. 输出目录:

输出目录是指NFS系统中需要共享给客户机使用的目录;

b. 客户端:

客户端是指网络中可以访问这个NFS输出目录的计算机

客户端常用的指定方式

  • 指定IP地址对应的主机为:192.168.0.200。
  • 指定子网内的所有主机包括:
    • IP地址范围为192.168.0.x(其中x代表任意四位数组合)
    • 以及IP地址范围为192.168.x.x(其中x代表任意三位数组合)
      的所有主机。
  • 对应指定域名david.bsmart.cn下的主机。
  • 覆盖该域内所有主机的IP地址范围是*.bsmart.cn。
  • 全网范围内所有的计算机或设备可以使用IP地址*。

c. 选项:

选项用来设置输出目录的访问权限、用户映射等。

NFS主要有3类选项:

访问权限选项

  • 设置输出目录只读:ro
  • 设置输出目录读写:rw

用户映射选项

所有远程访问的普通用户及其所属组都被配置为匿名账户(nfsnobody);
默认情况下启用此设置(即执行all_squash操作);
若需要反向操作,则启用no_all_squash设置;
对于root账户及其相关组别同样适用上述配置;
若希望默认情况下不执行此操作,则启用no_root_squash设置;
另外一种配置方式是将所有远程访问的用户映射为本地匿名账户(UID=xxx);
类似地,针对用户组也提供了独立的配置选项(指定GID=xxx);

其它选项

  • secure:限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置);
  • insecure:允许客户端从大于1024的tcp/ip端口连接服务器;
  • sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;
  • async:将数据先保存在内存缓冲区中,必要时才写入磁盘;
  • wdelay:检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置);
  • no_wdelay:若有写操作则立即执行,应与sync配合使用;
  • subtree:若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置);
  • no_subtree:即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;

六、NFS服务器的启动与停止

在对exports文件进行了正确的配置后,就可以启动NFS服务器了。

1、启动NFS服务器

为使NFS服务器正常运行,需配置和启用portmap及nfs两个服务,其中portmap应在前配置和启用.

复制代码

2、查询NFS服务器状态

复制代码

3、停止NFS服务器

在NFS运行时,若想使其停止,请先关闭nfs服务,并随后关闭portmap服务。当系统中有其他服务(例如NIS)需要使用时,请注意此时无需关闭portmap服务。

复制代码

4、设置NFS服务器的自动启动状态

在实际的应用环境中,一开机手动配置NFS服务器是不可行的;建议通过系统管理配置,在指定运行级别下实现对portmap和nfs服务的自动启动.

复制代码

设置portmap和nfs服务在系统运行级别3和5自动启动。

复制代码

七、实例

1、将NFS Server 的/home/david/ 共享给192.168.1.0/24网段,权限读写。

服务器端文件详细如下:

vi /etc/exports

复制代码

2、重启portmap 和nfs 服务

复制代码

3、服务器端使用showmount命令查询NFS的共享状态

showmount -e,默认显示本地已分享的服务。但必须确保DNS解析本地IP地址,否则可能会导致错误日志出现。

showmount -a //显示已经与客户端连接上的目录信息

4、客户端使用showmount命令查询NFS的共享状态

showmount -e NFS服务器IP

5、客户端挂载NFS服务器中的共享目录

命令格式

复制代码

mount 192.168.1.108:/home/david/ /tmp/david/

mount |grep nfs

挂载成功。

查看文件是否和服务器端一致。

6、NFS的共享权限和访问控制

现在我们在/tmp/david/ 里面建立一个文件,看看权限是什么

touch 20130103

在访问过程中出现Permission denied,在NFS服务器端共享的目录缺乏对其他用户的读写权限设置的情况下,在服务器端配置相应的权限设置是必要的

chmod 777 -R /home/david/

再次在客户端/tmp/david/ 里面建立一个文件

我用root 用户建立的文件,变成了nfsnobody 用户。

NFS预设了多种设置项,在var/lib/nfs/etab目录中可查看home/david目录下的完整权限信息。

cat /var/lib/nfs/etab

by default, sync, wdelay, and hide are already in place. no_root_squash is designed to retain root's access permissions. root_squash maps the root directory to nobody. no_all_squash prevents all users from retaining access rights. The consequence is that files created by root have their ownership set to nfsnobody.

下面我们使用普通用户挂载、写入文件测试。

su - david

$ cd /tmp/david/

$ touch 2013david

普通用户写入文件时就是自己的名字,这也就保证了服务器的安全性。

关于权限的分析

1. 客户端连接时候,对普通用户的检查

若在系统中明确了普通用户的身份被压缩设置,则客户端用户的相应身份将变为指定用户。

当客户端尝试登录账户时,在NFS服务器上存在相同名称的用户,则该账户的身份将转换为该用户的身份。

在未做具体设置且无同名账户时,默认将用户身份设置为 nfsnobody;在未做具体配置的情况下,并无相同名称的账户存在时,则将用户的身份设定为 nfsnobody;此时尚未进行相关设置且无相同名称的账户时,默认将用户的身份设为 nfs nobody;

2. 客户端连接的时候,对root的检查

如果配置no_root_squash,则此时root用户的身份作为NFS服务器上的root角色存在;

当配置了all_squash、anonuid、anongid时,此时root身份将被映射到预定义的用户。

c. 如果没有明确指定,此时root用户被压缩为nfsnobody;

d. 当同时配置no_root_squash和all_squash参数时, 用户将被压缩成nfsnobody; 若设置有anonuid和anongid参数, 则相应的用户会被分配至预先指定的群组.

7、卸载已挂载的NFS共享目录

umount /tmp/david/

八、启动自动挂载nfs文件系统

格式:

复制代码

vi /etc/fstab

保存退出,重启系统。

查看/home/david 有没有自动挂载。

自动挂载成功。

九、相关命令

1、exportfs

如果我们在启用了NFS之后又修改了/etc/exports, 是否还需要重新开始nfs呢?这个时候我们就可以利用 exportfs 命令来立即生效。该命令的格式如下:

exportfs [-aruv]

通过挂载或卸载 /etc/exports文件的内容来实现系统初始化。
通过重新读取/etc/exports文件中的信息来进行同步更新,并确保相关目录如/etc/exports和/var/lib/nfs/x tab保持一致性。
参数-u允许用户仅卸载指定的目录及其相关配置项(通常与参数-a配合使用)。
在执行export操作时会输出详细的日志信息至控制台界面。

具体例子:

exportfs -au 使用exportfs命令删除所有公共文件夹

exportfs -rv 通过exportfs命令重新配置所有文件夹,并生成详细日志

2、nfsstat

查看NFS的运行状态,对于调整NFS的运行有很大帮助。

3、rpcinfo

获取RPC执行相关信息并辅助诊断RPC运行状态的技术手段中包含哪些内容

4、showmount

-a 展示已连接至客户端的文件夹列表
-e 通过IP地址或主机名查看该IP分发的文件夹列表

5、netstat

通过查看配置参数表单中的设置信息, 我们可以发现, 在这些配置中使用了2049号端口进行NFS服务, 其中, portmap配置项设置为111号端口. 其他则采用了RPC协议.

尽管权限设置仅限于普通用户,在挂载时也只有root拥有完整的操作权限。然而,在进行操作时,普通用户可以通过执行sudo指令来实现相应的提升。

在启动NFS服务器之前必须确保以下两点:一是使NFS服务处于关闭状态;二是必须保证没有任何客户端处于连接状态。可以通过运行showmount -a命令来检查当前配置状态。若存在相关配置,则可通过执行kill -9killall以及pkill -u <username>等命令来终止该进程。特别提醒,在使用-force选项或指定信号号时务必谨慎操作以避免潜在问题。

全部评论 (0)

还没有任何评论哟~