20171016 网络文件共享(二) NFS服务

  • NFS服务介绍
  • NFS配置文件
  • NFS工具
  • 自动挂载
  • 实验:实现基于NFS共享的LAMP wordpress的应用

一、NFS服务介绍

(一)NFS简介

  • NFS(Network File System):网络文件系统,用户和程序可以像访问本地文件一样访问远端系统上的文件

  • NFS基于RPC(Remote Procedure Call)远程过程调用实现,RPC基于C/S架构实现

  • NFS优势:节省本地存储空间

  • NFS发展:目前为v4版本,实现了伪根,增强了安全特性(kerberos)

(二)NFS服务

  • 软件包:nfs-utils,默认系统安装

  • Kernel支持:nfs.ko

  • 服务开启、关闭

    • CentOS 7:systemctl start|stop nfs-server
    • CentOS 6: service nfs start|stop
  • 端口:2049(nfsd),其它端口由portmap/rpcbind(111)分配

    • 使用ss -ntlp命令查看端口,端口111的进程为rpcbind
    20171016 网络文件共享(二) NFS服务_第1张图片
    • 使用rpcinfo -p查看rpc注册程序,端口111的进程为portmapper
    20171016 网络文件共享(二) NFS服务_第2张图片
    • CentOS6开始portmap进程由rpcbind代替
  • 配置文件:/etc/exports, /etc/exports.d/*.exports

  • 相关软件包:rpcbind(必须),tcp_wrappers

  • NFS服务主要进程

    • rpc.nfsd:最主要的NFS进程,管理客户端是否可登录
    • rpc.mountd:挂载和卸载NFS文件系统,包括权限管理
    • rpc.lockd:非必要,管理文件锁,避免同时写出错
    • rpc.statd:非必要,检查文件一致性,可修复文件
  • 日志:/var/lib/nfs/

二、NFS配置文件

(一)配置文件格式

  • 格式:/dir 主机1(opt1,opt2) 主机2(opt1,opt2)...

  • /dir: 共享目录路径

  • 主机格式

    • 单个主机:ipv4, ipv6, FQDN
    • IP networks:两种掩码格式均支持
      172.18.0.0/255.255.0.0
      172.18.0.0/16
    • wildcards:主机名通配,例如*.magedu.com,不能应用于IP地址
    • anonymous:表示使用*通配所有客户端
  • 每个条目指定目录导出到的哪些主机,及相关的权限和选项

    • 默认选项:(ro,sync,root_squash,no_all_squash)
    • ro,rw:只读和读写
    • async:异步,数据变化后不立即写磁盘,性能高
    • sync:同步,数据在请求时立即写入共享,安全性高
    • no_all_squash:保留远程用户建立共享文件的UID和GID
    • all_squash:所有远程用户(包括root)都映射成nfsnobody
    • root_squash:远程root映射为nfsnobody,UID为65534
    • no_root_squash:远程root映射成root用户,优先级低于all_squash
    • anonuid和anongid:指明匿名用户映射为特定用户UID和组GID,而非nfsnobody,可配合all_squash使用

(二)实验1:建立NFS共享目录/app/nfsfile1, /app/nfsfile2

  • 实验要求
    /app/nfsfile1目录:192.168.136.0网段的主机可以登录,支持读写,所有用户都映射为testuser
    /app/nfsfile2 目录:只有192.168.136.129主机可以登录,支持读写,远程root映射为root用户

  • 实验步骤:

// 建立testuser用户
useradd testuser
id testuser
uid=1002(testuser) gid=1002(testuser) groups=1002(testuser)

// 编辑NFS服务配置文件
vim /etc/exports.d/nfsfile1.exports
/app/nfsfile1 192.168.136.0/24(rw,all_squash,anonuid=1002,anongid=1002)

vim /etc/exports.d/nfsfile2.exports
/app/nfsfile2 192.168.136.129(rw,no_root_squash)

// 建立相关共享文件目录
mkdir /app/nfsfile1
mkdir /app/nfsfile2
touch /app/nfsfile1/file1
touch /app/nfsfile2/file2
setfacl -R -m u:testuser:rwx /app/nfsfile1

// 重新载入配置
exportfs -r
exportfs -v
20171016 网络文件共享(二) NFS服务_第3张图片
  • 实验测试:

    • 挂载共享目录/app/nfsfile1,可以看到root和普通用户都映射为testuser用户(uid=1002, gid=1002)
    20171016 网络文件共享(二) NFS服务_第4张图片
    • 挂载共享目录/app/nfsfile2,可以看到非192.168.136.129的主机不能成功挂载;挂载成功后,root用户没有被映射为nobody,而普通用户由于之前在NFS服务器上未设置写权限,无权建立文件,说明NFS服务支持读写需要NFS服务和服务器文件系统两方面同时授权才可以
    20171016 网络文件共享(二) NFS服务_第5张图片
    20171016 网络文件共享(二) NFS服务_第6张图片

(三)实验2:实现NFS伪根

  • NFS客户端通常需要分别挂载NFS服务器上的共享目录

  • 在NFS服务器建立伪根目录,将需要共享的目录全部挂载到伪根目录上,即可实现NFS客户端一次性将不同目录挂载到一个挂载点上

  • 实验:通过NFS伪根一次性挂载共享目录/app/ftpsite和/var/log

// 建立伪根目录
mkdir /exports
mkdir /exports/ftpsite
mkdir /exports/log

// 将共享目录挂载到伪根目录的子目录
mount -B /app/ftpsite /exports/ftpsite/
mount -B /var/log /exports/log/
setfacl -m u:nfsnobody:rwx /app/ftpsite     // 给远程主机root用户开放写权限

// 编辑配置文件
vim /etc/exports
/exports *(fsid=0,rw,crossmnt)
/exports/ftpsite *(rw)
/exports/log    *(ro)

// 配置文件生效
exportfs -r

可以看到,/exports目录充当了伪根,实现多个目录一次挂载,并且每个目录的配置都生效了:ftpsite目录可以写入,log目录不可以写入文件

20171016 网络文件共享(二) NFS服务_第7张图片

三、NFS工具

  • rpcinfo

    • rpcinfo -p hostname:详细列明RPC注册程序
    • rpcinfo -s hostname:简略列明RPC注册程序
  • exportfs

    • -v:查看本机所有NFS共享
    • -r:重读配置文件并共享目录
    • -a:输出本机所有共享
    • -au:停止本机所有共享
  • showmount -e hostname:显示远程主机NFS共享目录

四、自动挂载

(一)autofs服务简介

  • autofs服务:按需要挂载,在空闲时自动卸载
  • 由autofs包提供
  • 自动挂载的配置文件:/etc/auto.master
  • 文件系统在失活的指定间隔5分钟后会自动卸载

(二)autofs配置

(1)相对路径描述
  • 格式:
    /etc/auto.master文件格式:挂载点的目录名 /etc/auto.direct
    /etc/auto.direct文件格式:挂载点的基名 被挂载目录或设备
    注释:/etc/auto.direct文件仅为示例,文件名称没有要求

  • 相对路径时支持含通配符的目录名:* server:/export/&

(2)绝对路径描述
  • 格式:
    /etc/auto.master文件格式:/- /etc/auto.direct
    /etc/auto.direct文件格式:挂载点路径 被挂载目录或设备
(3)实验:利用autofs实现远程家目录的自动挂载
  • 本实验由2台主机完成:
    主机1:NFS服务器
    主机2:NFS客户端,安装autofs服务,CentOS 7系统
    主机3:NFS客户端,安装autofs服务,CentOS 6系统

  • 步骤1:NFS服务器上设置共享家目录

mkdir -p /app/homedir/{wang,mage}
cp -r /etc/skel/.[^.]* /app/homedir/wang/
cp -r /etc/skel/.[^.]* /app/homedir/mage/
  • 步骤2:查询NFS客户端上用户wang和mage的uid和gid
// 主机2上的用户ID情况
id wang
uid=1001(wang) gid=1001(wang) groups=1001(wang)
id mage
uid=1002(mage) gid=1002(mage) groups=1002(mage)
// 主机3上的用户ID情况
id wang
uid=502(wang) gid=502(wang) groups=502(wang)
id mage
uid=503(mage) gid=503(mage) groups=503(mage)
  • 步骤3:NFS服务器上根据不同系统的用户ID情况,分别给共享家目录添加权限
useradd -u 1001 wang
useradd -u 1002 mage
useradd -u 502 wang6
useradd -u 503 mage6
setfacl -R -m u:wang:rwx /app/homedir/wang/
setfacl -R -m u:wang6:rwx /app/homedir/wang/
setfacl -R -m u:mage:rwx /app/homedir/mage/
setfacl -R -m u:mage6:rwx /app/homedir/mage/
  • 步骤4:NFS服务器上编辑NFS配置文件并更新读入配置
vim /etc/exports.d/wang.exports
/app/homedir/wang *(rw)
vim /etc/exports.d/mage.exports
/app/homedir/mage *(rw)

exportfs -r
  • 步骤5:NFS客户端上配置autofs服务
// 两台主机均执行以下操作
vim /etc/auto.master
/home   /etc/auto.direct             // 添加一行
vim /etc/auto.direct
* 192.168.136.230:/app/homedir/&     // 添加一行
// 按照系统执行
systemctl restart autofs             // CentOS 7
service autofs restart               // CentOS 6
  • 测试:

    • 在主机2(CentOS 7)上进入/home/wang目录,切换至wang账号,建立wangfile文件
    20171016 网络文件共享(二) NFS服务_第8张图片
    • 在主机3(CentOS 6)上进入/home/wang目录,可以看到wangfile文件,但由于本机没有uid=1001的账号,故UID直接显示数字
    20171016 网络文件共享(二) NFS服务_第9张图片
    • 在主机3(CentOS 6)上进入/home/mage目录,切换至mage账号,建立magefile文件
    20171016 网络文件共享(二) NFS服务_第10张图片
    • 在主机2(CentOS 7)上进入/home/mage目录,可以看到magefile文件,但由于本机没有uid=503的账号,故UID直接显示数字
    20171016 网络文件共享(二) NFS服务_第11张图片
    • 使用NFS建立远程家目录,如果可能,最好统一不同系统下相同用户的uid,便于后期管理

五、实验:实现基于NFS共享的LAMP wordpress的应用

(一)实验环境:本实验需要4台主机

  • 主机1:httpd服务器1,IP: 192.168.136.230
  • 主机2:httpd服务器2,兼做mysql数据库,IP: 192.168.136.130
  • 主机3:NFS服务器,存储httpd服务器网页数据,包含WordPress应用,IP: 192.168.136.229
  • 主机4:DNS服务器,IP: 192.168.136.129

(二)步骤1:在主机3上配置nfs服务

mkdir -p /app/www/html
setfacl -R -m u:apache:rwx /app/www/html
service nfs start
vim /etc/exports
/app/www/html 192.168.136.0/24(rw,all_squash,anonuid=48,anongid=48)
exportfs -r
exportfs -v

(三)步骤2:在主机1, 2上配置httpd服务,安装php-fpm

// 以下步骤在主机1, 2上操作相同
yum install httpd php-fpm
vim /etc/fstab

vim /etc/httpd/conf.d/fcgi.conf
DirectoryIndex index.php
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/$1向代理
systemctl start php-fpm.service 
systemctl start httpd

(三)步骤3:在主机2上安装mysql服务

yum install mariadb-server
systemctl start mariadb
mysql_secure_installation

(四)步骤4:在主机3的httpd共享目录上测试与php与mysql的连接

vim /var/www/html/index.php
close();
phpinfo();
?>

(五)步骤5:在主机3的httpd共享目录上安装WordPress

tar -xvf wordpress-4.8.1-zh_CN.tar.gz -C /var/www/html/

(六)步骤6:在主机4上实现DNS服务

你可能感兴趣的:(20171016 网络文件共享(二) NFS服务)