搭建 NFS 服务器

NFS   2025-01-12 15:19   319   0  

一、配置阿里源

cd /etc/yum.repos.d/
cp -f CentOS-Base.repo CentOS-Base.repo.bak
rm -rf CentOS-Base.repo
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all
yum makecache

二、服务端

1、安装nfs的相关软件

yum install rpcbind nfs-utils -y

image.png

2、启动nfs-server服务

service nfs-server stop
service nfs-server start
service nfs-server restart
# 开机启动
systemctl enable nfs-server
systemctl enable rpcbind

image.png

3、查看nfs进程

ps aux|grep nfs

image.png

4、NFS配置固定端口并设置防火墙规则

NFS启动时会随机启动多个端口并向RPC注册。
为了设置安全组以及防火墙规则,此时就需要设置NFS固定端口。
NFS服务需要开启 mountd,nfs,nlockmgr,portmapper,rquotad这5个服务.
其中nfs、portmapper的端口是固定的.
另外三个服务的端口是随机分配的.
所以需要给mountd,nlockmgr,rquotad设置固定的端口。

①、给mountd、rquotad设置端口

cat >> /etc/sysconfig/nfs << EOF
RQUOTAD_PORT=30001
LOCKD_TCPPORT=30002
LOCKD_UDPPORT=30002
MOUNTD_PORT=30003
STATD_PORT=30004
EOF

image.png

②、重启rpc、nfs的配置与服务

systemctl restart rpcbind.service
systemctl restart nfs.service

③、在/etc/modprobe.d/lockd.conf中添加以下设置

cat >> /etc/modprobe.d/lockd.conf << EOF
options lockd nlm_tcpport=30002
options lockd nlm_udpport=30002
EOF

image.png

④、重新加载NFS配置和服务

systemctl restart nfs-config
systemctl restart nfs-idmap
systemctl restart nfs-lock
systemctl restart nfs-server

⑤、查看修改后的NFS端口使用情况

rpcinfo -p

image.png

⑥、配置防火墙规则,开放NFS端口访问

--permanent 表示永久生效,不加该参数重启后失效

firewall-cmd --zone=public --add-port=111/tcp --permanent
firewall-cmd --zone=public --add-port=111/udp --permanent
firewall-cmd --zone=public --add-port=2049/tcp --permanent
firewall-cmd --zone=public --add-port=2049/udp --permanent
firewall-cmd --zone=public --add-port=30002/tcp --permanent
firewall-cmd --zone=public --add-port=30002/udp --permanent
firewall-cmd --zone=public --add-port=30003/tcp --permanent
firewall-cmd --zone=public --add-port=30003/udp --permanent
firewall-cmd --zone=public --add-port=30004/tcp --permanent
firewall-cmd --zone=public --add-port=30004/udp --permanent
firewall-cmd --reload
firewall-cmd --permanent --list-all

image.png

5、编辑/etc/exports文件,写具体共享的目录和权限

mkdir /data
mkdir /data/nfs
vim /etc/exports
cat /etc/exports
service nfs-server restart

image.png

/data/nfs 192.168.102.0/24(rw,no_root_squash,async)

#/data/nfs 是共享文件夹的路径,使用绝对路径,需要新建
#192.168.102.0/24 表示允许过来访问的客户机的ip地址网段,*表示不限制ip
#(ro,all_squash,async)表示权限的限制
#ro 表示只读
#rw 表示可读可写
#all_squash:访客时一律被映射为匿名用户(nfsnobody)
#no_all_squash:访客被映射为服务器上相同uid的用户,因此在客户端应建立与服务端uid一致的用户,否则也映射为nfsnobody。root除外,因为root_suqash为默认选项,除非指定了no_root_squash
#root_squash:访客以root用户访问NFS服务端时,被映射为nfsnobody用户
#no_root_squash:访客以root用户访问NFS服务端时,被映射为root用户。以其他用户访问时同样映射为对应uid的用户,因为no_all_squash是默认选项
#sync 同步,同时将数据写入到内存与硬盘中,保证数据不丢失
#async 异步,优先将数据保存到内存,然后再写入磁盘,效率高,但可能丢失数据
cat >> /etc/hosts << EOF
192.168.102.129 nfs.server
EOF

modprobe br_netfilter

image.png

# 必须指定组id和用户id,而且服务端和客户端要一致,否则访客会变成nfsnobody
groupadd -g 6666 nfs
useradd -u 6666 -g nfs nfs
id nfs
vim /etc/idmapd.conf

image.png
指定组和用户,注释Domain,改为刚才添加到hosts文件的域名
image.png
image.png

systemctl restart nfs-config
systemctl restart nfs-idmap
systemctl restart nfs-lock
systemctl restart nfs-server
systemctl restart rpcbind.service
systemctl restart nfs.service
service rpcidmapd restart
cd /data/nfs
vim index.html
cat index.html
#刷新输出文件的列表
exportfs -rv

image.png
这里有个问题,那就是/data/nfs文件夹只有服务端的root用户有读写权限,这里我们给文件夹授权,这里配置了norootsquash:访客以root用户访问NFS服务端时,被映射为root用户。以其他用户访问时同样映射为对应uid的用户。
image.png

chown -R nfs:nfs /data/nfs
ls -l

image.png

三、客户端

1、安装nfs的相关软件

yum install rpcbind nfs-utils -y

2、在客户机上挂载nfs服务器上共享的/data/nfs目录

# 查看nfs服务器上共享输出了哪些文件夹
showmount -e 192.168.102.129

image.png

3、挂载nfs服务器上的目录到本机上

mkdir /data
mkdir /data/nfs
cd /data/nfs/
pwd

image.png

mount -o rw -t nfs 192.168.102.129:/data/nfs  /data/nfs
df -Th
#取消挂载
umount -l /data/nfs

image.png

4、在客户端创建文件夹

cat >> /etc/hosts << EOF
192.168.102.129 nfs.server
EOF

modprobe br_netfilter

image.png

# 必须指定组id和用户id,而且服务端和客户端要一致,否则会变成nfsnobody
groupadd -g 6666 nfs
useradd -u 6666 -g nfs nfs
id nfs
vim /etc/idmapd.conf

image.png
指定组和用户,注释Domain,改为刚才添加到hosts文件的域名
image.png
image.png

systemctl restart nfs-config
systemctl restart nfs-idmap
systemctl restart nfs-lock
systemctl restart nfs-server
systemctl restart rpcbind.service
systemctl restart nfs.service
service rpcidmapd restart

重新挂载文件

umount -l /data/nfs
mount -o rw -t nfs 192.168.102.129:/data/nfs  /data/nfs
df -Th

image.png
以root用户创建文件和文件夹

echo "test">>11.txt
mkdir node02
ls -l

image.png
可以看到11.txt文件和node02文件夹的所属用户和组都是root
以 nfs 用户创建文件和文件夹

su nfs
echo "test">>22.txt
mkdir node03
ls -l

image.png
可以看到22.txt文件和node03文件夹的所属用户和组都是nfs


博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。