网络文件系统(NFS)

读储成友(民工哥)所著《Linux系统运维指南》NFS服务部分所做的笔记

一、网络文件系统(NFS)

通过网络不同主机之间共享文件或目录,使访问者如同访问本地计算机上的文件一样访问网络上的文件。

NFS有服务端和客户端

  • 服务端是共享目录端
  • 客户端通过挂载方式将服务端共享的文件挂载到客户端本地系统指定目录下。

NFS通过RPC服务来实现文件或目录的共享

  • NFS服务启动时会随机启动数个端口,且主动向RPC服务来注册端口信息。
  • RPC服务记录NFS每个功能对应的端口号,并将信息传递给请求数据的NFS客户端,以此实现完整的数据传输过程。
  • RPC服务使用固定端口111来监听NFS客户端发出的请求动作,将正确的NFS端口传递给NFS客户端,以此实现客户端与服务端之间的通信与数据创传输。

二、NFS的安装和部署

1. 服务端安装与部署

yum install nfs-utils rpcbind -y

注意:服务端启动顺序为先启动RPC服务,后启动NFS服务。

# 启动服务
systemctl start rpcbind.service
systemctl start nfs.service

# 设置开机自启动
systemctl enable rpcbind.service
systemctl enable nfs.service

创建挂载目录及文件

# 创建一个目录/nfs/test,并在此目录下创建一个文件/nfs/test/test.txt
mkdir /nfs/test/ -p
touch /nfs/test/test.txt

配置NFS的exports文件 vim /etc/exports

#config start
/nfs/test/ 192.168.x.0/24(rw,sync)
#end
参数 说明
ro 目录可读
rw 目录可读写
sync 将数据同步写入内存缓冲区与磁盘中
async 将数据先写入内存缓冲区,,有必要时才写入磁盘
all_squash 将远程访问用户及组全映射成默认用户或用户组nfsnobody
no_all_squash 与all_suash配置相反
root_squash 将root用户及所属组映射成默认用户或用户组
no_root_squash 与root_squash配置相反
anonuid=xxx 将远程访问用户映射成指定用户ID的用户
anongid=xxx 将远程访问用户组映射成指定用户组ID的用户组

重新加载NFS服务配置文件

exportfs -rv

exportfs参数说明

参数 说明
-r 重新加载并刷新共享配置
-v 显示确认共享配置
-a 将配置文件/etc/exportfs中的所有共享配置发布
-u 不发布配置的共享

查看NFS服务器挂载情况

[root@NFS-SERVER ~]# showmount -e localhost
Export list for localhost:
/nfs/Charramma 192.168.1.0/24
[root@NFS-SERVER ~]# 

2. NFS客户端的部署

挂载前要注意服务端的防火墙

# 安装NFS与RPC
yum install nfs-utils rpcbind -y

# 启动服务
systemctl start rpcbind.service

# 查看挂载情况 注意NFS服务端的防火墙
showmount -e [NFS服务端ip地址]

# 挂载共享目录
mkdir /nfsclient
mount -t nfs 192.168.1.254:/nfs/test /nfsclient/
# 其他用户对挂载目录具有可读与可执行权限

# 查看是否挂载成功
df -mh

挂载共享目录时报错

mount.nfs: access denied by server while mounting 192.168.1.202:/nfs/test

管理主机上查看日志cat /var/log/messages | grep mount,主要报错信息如下

Dec  8 15:43:35 localhost rpc.mountd[1774]: refused mount request from 192.168.1.203 for /nfs/test (/nfs/test): unmatched host
Dec  8 15:44:00 localhost rpc.mountd[1774]: refused mount request from 192.168.1.204 for /nfs/test (/nfs/test): unmatched host

三、客户端安全配置

客户端无写入权限

[root@NFS-CLIENT nfsclient]# touch file
touch: cannot touch ‘file’: Permission denied

服务端使用nfsnobody用户访问共享目录

[root@NFS-SERVER ~]# cat /var/lib/nfs/etab 
/nfs/data	192.168.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)
[root@NFS-SERVER ~]# cat /etc/passwd | grep 65534
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin

使用默认的nfsnobody用户访问共享目录并不安全

nfs安全配置

服务端配置

# 添加自定义且指定用户uid并禁止登陆
[root@NFS-SERVER ~]# useradd -s /sbin/nologin -M -u 9090 nfsuser

# 修改nfs配置
[root@NFS-SERVER ~]# cat /etc/exports
# config start
/nfs/test/ 192.168.x.0/24(rw,sync,all_squash,anonuid=9090,anongid=9090)
# end

# 重新加载NFS服务配置文件
[root@NFS-SERVER ~]# exportfs -rv

# 修改共享目录权限
[root@NFS-SERVER ~]# chown -R nfsuser.nfsuser /nfs/test/
[root@NFS-SERVER ~]# ls -ld /nfs/test/
drwxr-xr-x. 2 nfsuser nfsuser 23 Jan  4 20:53 /nfs/test/
[root@NFS-SERVER ~]# ls -l /nfs/test/
total 4
-rw-r--r--. 1 nfsuser nfsuser 6 Jan  4 20:53 hello.txt

客户端配置

# 添加与服务端相同的用户
[root@NFS-CLIENT ~]# useradd -s /sbin/nologin -M -u 9090 nfsuser

写入测试,可以成功写入

[root@NFS-CLIENT nfsclient]# ls
hello.txt

[root@NFS-CLIENT nfsclient]# touch file

[root@NFS-CLIENT nfsclient]# ls
file hello.txt

四、nfs挂载优化

无优化情况下文件写入速度

[root@NFS-CLIENT ~]# time dd if=/dev/zero of=/nfsclient/test-file bs=100k count=1000
1000+0 records in
1000+0 records out
102400000 bytes (102 MB) copied, 3.81355 s, 26.9 MB/s

real	0m3.835s
user	0m0.000s
sys	0m2.569s

dd 数据备份

if 源

of 目的

bs 块大小

count 块数量

优化后的文件写入速度

# 卸载原来的挂载
[root@NFS-CLIENT ~]# umount -t nfs -t 192.168.1.254:/nfs/test /nfsclient/

# 重新挂载
[root@NFS-CLIENT ~]# mount -t nfs -o noexec,nosuid,nodev,rw,rsize=65536,wsize=65536 192.168.1.121:/nfs/data/ /nfs/data/

# 写入
[root@NFS-CLIENT ~]# time dd if=/dev/zero of=/nfsclient/test-file bs=100k count=1000
1000+0 records in
1000+0 records out
102400000 bytes (102 MB) copied, 0.474688 s, 216 MB/s

real	0m0.477s
user	0m0.000s
sys	0m0.042s

挂载参数

  • rsizewsize

    写和读缓存,不同版本最大值不同

    版本
    NFSv2 rsize=8192 wsize=8192
    NFSv3 rsize=32768 wsize=32768
    NFSv4 rsize=65536 wsize=65536
  • noauto 不自动挂载文件系统

  • noexec 不允许安装可执行的二进制文件

  • nosuid 不允许配置用户标识或组标识

  • nodev 不解释字符或文件块等特殊设备

  • noatime 不更新文件的时间戳

  • nodiratime 不更新目录的时间戳

posted @ 2021-01-05 17:38  Charramma  阅读(327)  评论(0编辑  收藏  举报