NFS

NFS

一. 概述

  • NFS(Network File System): 可以让客户端把服务器的共享目录挂载到本机使用, 就像使用本机分区一样, 非常方便
  • NFS是被RPC服务管理的, NFS需要到RPC服务去注册自己主进程端口号以及子进程端口号, 所以必须安装RPC的主程序rpcbind
  • NFS端口: 2049
  • RPC端口: 111
  • NFS daemon端口, 随机

二. 权限说明

linux系统目录权限会生效
NFS服务共享权限也会生效

NFS没有用户登录认证机制, 所以客户端登录到服务器之后, 会把客户端的身份映射到服务器端, 就会出现以下四种情况:

  • client和server上刚好有相同的账户和用户组, 用户名和UID都要相同, 则client上用户可以在server上按照用户权限使用文件
  • 当client和server上拥有相同的UID, 但是用户名不同, 假设client有用户aa(UID:500), server上有用户bb(UID:500), 在client上使用server共享目录时, 身份识别为bb, 但是以client看, 是aa在操作, 因为Linux权限绑定在UID上, 此种情况尽量避免, 容易出现逻辑混乱
  • server上没有client的UID, 则client用户访问server时, 会将此用户自动转变为nfsnobody(UID:65534)用户
  • client上是root使用共享, 默认吧root也转变为nfsnobody, 服务器端可以修改配置文件, 允许root访问nfs服务器

三. NFS服务端设置

  • 服务端: web01(192.168.5.131)
  • 客户端: web02(192.168.5.132)

NFS主程序: nfs-utils
RPC主程序: rpcbind(旧版本是portmap)

配置文件: /etc/exports

  • 将nfs和rpcbind设置开机自启动
[root@web01 ~]# chkconfig --level 2345 nfs on
[root@web01 ~]# chkconfig --list | grep nfs
nfs             0:关闭    1:关闭    2:启用    3:启用    4:启用    5:启用    6:关闭
nfslock         0:关闭    1:关闭    2:关闭    3:启用    4:启用    5:启用    6:关闭
[root@web01 ~]# chkconfig --level 2345 rpcbind on
[root@web01 ~]# chkconfig --list | grep rpcbind
rpcbind         0:关闭    1:关闭    2:启用    3:启用    4:启用    5:启用    6:关闭
  • 启动rpcbind和nfs, 需要先启动rpcbind
[root@web01 ~]# service rpcbind start
正在启动 rpcbind:                                         [确定]
[root@web01 ~]# service nfs start
启动 NFS 服务:                                            [确定]
启动 NFS mountd:                                          [确定]
启动 NFS 守护进程:                                        [确定]
正在启动 RPC idmapd:                                      [确定]
  • 查看进程
    • rpc.rquotad: nfs配额
    • rpc.mountd: 处理客户端挂载
    • nfsd: nfs守护进程
    • rpcbind: rpcc守护进程
  • RPC服务注册情况
    rpcinfo -p IP或主机名

四. NFS配置文件

/etc/exports
共享目录 客户端 (权限)

  • 共享目录

  • 客户端:

    • 指定IP: 192.168.5.132
    • 指定网段: 192.168.44.0/24(表示整个网段可以访问)
    • 指定主机名:
    • 所有主机: *
  • 常用权限

    • rw: 读写
    • ro: 只读
    • all_squash: 不论登陆是谁, 都压缩为匿名用户nfsnobody
    • no_all_squash: bu压缩
    • root_squash: 如果登陆的是root, 压缩为nfsnobody
    • no_root_squash: 允许root身份登陆(不推荐)
    • anonuid: 把所有登陆用户, 不再压缩为匿名用户, 而是压缩为指定uid用户
    • sync: 同步写入
    • async: 异步写入, 现将数据先保存在内存缓冲区中, 必要时才写入磁盘

示例如下
修改配置文件vi /etc/exports

/home/share 192.168.5.132(rw,no_root_squash) *(ro)

常用命令

  • exportfs 选项
    选项:

    • -a: 按照配置文件挂载/卸载所有目录
    • -r: 重新挂载
    • -u: 卸载
    • -v: 显示详细信息
      exportfs -arv 重新挂载所有目录, 不重启NFS服务
      exportfs -auv 全部卸载所有目录
  • showmount命令

    • 查看共享目录
    • showmount -e IP或主机名 查看某个主机的共享目录
  • 新增/home/share目录, 将所有者改为nfsnobody

[root@web01 home]# mkdir /home/share
[root@web01 home]# chown nfsnobody share
[root@web01 home]# ll -d share/
drwxr-xr-x 2 nfsnobody root 4096 1月  23 06:07 share/

五. 客户端使用

  • 首先需要开启rpcbind服务
  • 使用showmount -e 192.168.5.131查看服务器共享的目录
Export list for 192.168.5.131:
/home/share  (everyone)
[root@web02 ~]# 
  • 把服务器共享目录挂载到客户端
    • mkdir /home/uar/share
    • 建立挂载点 mount -t nfs web01:/home/share /home/uar/share
    • 查看挂载 mount
web01:/home/share on /home/uar/share type nfs (rw,vers=4,addr=192.168.5.131,clientaddr=192.168.5.132)
  • web02中进入到share, 创建文件phpinfo.php, 文件所有者和所有组都市nfsnobody
-rw-r--r-- 1 nfsnobody nfsnobody 18 1月  23 06:07 phpinfo.php

你可能感兴趣的:(NFS)