标签:认证 文件存储 安全性 应用 用户管理 hid 服务启动 nfs挂载 联系
欢迎大家访问我的博客:blog.54newpower.topNFS=Network File System=网络文件系统。
主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录。
NFS客户端(一般为应用服务器,例如web)可以通过挂载(mount)的方式将NFS服务器端共享的数据目录挂载到NFS客户端本地系统中(就是某一个挂载点下)。从客户端本地看,NFS服务器端共享的目录就好像是客户端自己的磁盘分区或者目录一样,而实际上却是远端的NFS服务器的目录。
NFS属于本地文件存储服务。
NFS主要用于存储web服务器上用户上传的数据信息(图片 附件 头像 视频 音频)。
在nfs服务端创建共享目录
通过mount 网络挂载,将NFS服务端共享目录挂载到NFS客户端本地目录上。
由于NFS服务启动产生的进程服务端口号都是随机的,因此NFS的各项功能都需要向RPC服务(rpcbind服务)注册,所以只有RPC服务才能获取到NFS服务的各项功能对应的端口号(port number)、PID、NFS在主机所监听的IP等信息,而NFS客户端也只能通过向RPC服务询问才能找到正确的端。也就是说,NFS需要有RPC服务的协助才能成功对外提供服务。说白了,PRC相当与一个中介,NFS相当与是房东,当有新的租房信息发布时,房东会告诉中介,房客一般是联系中介来租房的。
服务端:
rpcinfo -p 172.16.1.31
[root@web01 /mnt]#rpcinfo -p 172.16.1.31
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 43152 status
100024 1 tcp 60675 status
100005 1 udp 20048 mountd
100005 1 tcp 20048 mountd
100005 2 udp 20048 mountd
100005 2 tcp 20048 mountd
100005 3 udp 20048 mountd
100005 3 tcp 20048 mountd
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 3 tcp 2049 nfs_acl
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 3 udp 2049 nfs_acl
100021 1 udp 40594 nlockmgr
100021 3 udp 40594 nlockmgr
100021 4 udp 40594 nlockmgr
100021 1 tcp 41770 nlockmgr
100021 3 tcp 41770 nlockmgr
100021 4 tcp 41770 nlockmgr
客户端:
rpm -qa|grep -E "nfs|rpc"
yum install -y nfs-utils rpcbind
rpm -qa nfs-utils
rpm -qa rpcbind
注意:nfs和rpc的软件名
vim /etc/exports
#输入以下内容
/data 172.16.1.0/24(rw,sync)
#/data 共享目录
#允许存储数据网段信息
#rw 读写
#rsync同步存储数据
mkdir /data
chown nfsnobody.nfsnobody /data
ls -ld /data
先启动rpc服务
systemctl start rpcbind.service
systemctl enable rpcbind.service
systemctl status rpcbind.service
systemctl is-enabled rpcbind.service
[root@nfs01 ~]#systemctl start rpcbind
[root@nfs01 ~]#systemctl enable rpcbind
[root@nfs01 ~]#systemctl status rpcbind
● rpcbind.service - RPC bind service
Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2020-05-03 23:28:06 CST; 7h left
Main PID: 964 (rpcbind)
CGroup: /system.slice/rpcbind.service
└─964 /sbin/rpcbind -w
May 03 23:28:05 nfs01 systemd[1]: Starting RPC bind service...
May 03 23:28:06 nfs01 systemd[1]: Started RPC bind service.
[root@nfs01 ~]#systemctl is-enabled rpcbind
enabled
再启动nfs服务
systemctl start nfs
systemctl enable nfs
systemctl status nps
systemctl is-enabled nfs
[root@nfs01 ~]#systemctl start nfs
[root@nfs01 ~]#systemctl enable nfs
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[root@nfs01 ~]#systemctl status nfs
● nfs-server.service - NFS server and services
Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor preset: disabled)
Drop-In: /run/systemd/generator/nfs-server.service.d
└─order-with-mounts.conf
Active: active (exited) since Sun 2020-05-03 15:45:02 CST; 19s ago
Main PID: 1779 (code=exited, status=0/SUCCESS)
CGroup: /system.slice/nfs-server.service
May 03 15:45:02 nfs01 systemd[1]: Starting NFS server and services...
May 03 15:45:02 nfs01 systemd[1]: Started NFS server and services.
[root@nfs01 ~]#systemctl is-enabled nfs
enabled
安装nfs-utils,使客户端可以识别nfs挂载方式
yum install -y nfs-utils
rpm -qa|grep "nfs-utils"
实现远程挂载共享目录
mount -t nfs 172.16.1.31:/data /mnt
第一种方法:
/data 172.16.1.0/24(rw,sync) 10.0.0.0/24(rw,sync)
第二种方法:
/data 172.16.1.0/24(rw,sync)
/data 10.0.0.0/24(rw,sync)
(1)服务端配置文件参数 exports文件里ro/rw参数
(2)服务端本身目录权限
(3)服务端共享目录权限存在继承关系 例如:/data,/data/r
PS:建议设置共享目录时,不要存在父级与子级关系
(4)客户端挂载参数是否为 ro
NFS配置参数权限
rw -- 存储目录是否有读写权限
ro -- 存储目录是否时只读权限
sync -- 同步方式存储数据 直接将数据保存到磁盘(数据存储安全)
async -- 异步方式存储数据 直接将数据保存到内存(提高数据存储效率)
no_root_squash -- 不要将root用户身份进行转换
root_squash -- 将root用户身份进行转换
all_squash -- 将所有用户身份都进行转换
no_all_squash -- 不要将普通用户身份进行转换
no_all_squash 需要进行配置 共享目录权限为www(确保客户端用户 服务端用户 uid数值一致)
root_squash 需要进行配置 root---nfsnobody data目录---www
以上默认配置(很多服务默认配置都是从安全角度出发)
cat /var/lib/nfs/etab --- 记录nfs服务的默认配置记录信息
[root@nfs01 ~]#cat /var/lib/nfs/etab
/data 172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,no_all_squash)
anonuid=65534,anongid=65534 --- 可以指定映射的用户信息
#修改映射用户:www=1002
/data 172.16.1.0/24(rw,sync,anonuid=1002,anongid=1002)
/data 172.16.1.0/24(rw,sync)
/data 10.0.0.0/24(ro,sync)
/data 10.0.0.0/24(ro,sync,anonuid=xxx,anongid=xxx)
#注:服务端普通用户的uid要与客户端普通用户的uid相同
nfs服务器重启,挂载后创建数据比较慢
服务器重启方式不正确
服务重启:
restart 重启服务 强制断开所有连接 用户感受不好
reload 重启服务(平滑重启) 强制断开没有数据传输的连接 提升用户感受
挂载命令:
mount -t nfs 172.16.1.31:/data /mnt
如何实现自动挂载:
echo "mount -t nfs 172.16.1.31:/data /mnt" >>/etc/rc.local
#文件要有执行权限
vim /etc/fstab
172.16.1.31:/data /mnt nfs defaults 0 0
#实现fstab文件挂载自动加载nfs存储目录 必须让remote-fs.target服务开机自启
#centos7 必须启动 remote-fs.target
#centos6 必须启动 netfs
客户端如何卸载
umount -lf /mnt
#-l 不退出挂载点目录进行卸载
#-f 强制进行卸载操作
#PS:需求问题:如何找到一台服务器开机运行了哪些服务
ll /etc/systemd/system/multi-user.target.wants/
rw --- 实现挂载后挂载点目录可读可写 (默认)
ro --- 实现挂载后挂载点目录可读可写
suid --- 在共享目录中可以让setuid权限位生效 (默认)
nosuid --- 在共享目录中可以让setuid权限位失效 提供共享目录的安全性
exec --- 共享目录中的执行文件可以直接执行
noexec --- 共享目录中的执行文件可以无法直接执行 提供共享目录的安全性
auto --- 可以实现自动挂载 mount -a 实现加载fstab文件自动挂载
noauto --- 不可以实现自动挂载
nouser --- 禁止普通用户可以卸载挂载点设定此文件系统是否允许让普通用户使用 mount 执行实现挂载,默认是不允许(nouser),仅有 root 可以
user --- 允许普通用户可以卸载挂载点
ls: cannot open directory .: Stale file handle (文件句柄错误)
出现原因: 当父级和子级目录同时进行挂载时,一旦父级目录取消共享,但是客户端还是处于挂载状态
问题解决: 将和父级目录有关的所有挂载点全部卸载,重新挂载
Cannot register service: RPC: Unable to receive;
出现原因: 服务启动顺序不正确
问题解决: 关闭所有服务,按顺序进行启动
出现挂载卡死情况
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)
出现原因: 服务端开启防火墙,阻止客户端访问
问题解决: 关闭防火墙
标签:认证 文件存储 安全性 应用 用户管理 hid 服务启动 nfs挂载 联系
原文地址:https://blog.51cto.com/14799619/2501537