网络文件系统(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
挂载参数
-
rsize和wsize
写和读缓存,不同版本最大值不同
版本 写 读 NFSv2 rsize=8192 wsize=8192 NFSv3 rsize=32768 wsize=32768 NFSv4 rsize=65536 wsize=65536 -
noauto 不自动挂载文件系统
-
noexec 不允许安装可执行的二进制文件
-
nosuid 不允许配置用户标识或组标识
-
nodev 不解释字符或文件块等特殊设备
-
noatime 不更新文件的时间戳
-
nodiratime 不更新目录的时间戳