首页 运维 linux运维 linux下NFS安装配置的方法是什么

linux下NFS安装配置的方法是什么

May 19, 2023 pm 07:46 PM
linux nfs

1,服务器端软件:安装nfs-utils和portmap(rpcbind)
nfs-utils: 提供rpc.nfsd 及 rpc.mountd这两个nfs daemons的套件
portmap: nfs其实可以被看作是一个rpc server program,而要启动一个rpc server program,都要做好port的对应工作,而且这样的任务就是由portmap来完成的。通俗的说portmap就是用来做port的mapping的。
nfs需要启动的daemons

  • pc.nfsd:主要复杂登陆权限检测等 必须

  • portmap:处理rpc程序客户端和服务器端的端口对应 必须

  • rpc.mountd:负责nfs的档案系统,当client端通过rpc.nfsd登陆server后,对clinet存取server的文件进行一系列的管理 必须

  • lockd:处理通过rpc包的锁定请求

  • statd:为nfs锁定服务提供crash恢复功能

  • rquotad:处理当用户通过nfsmount到远程服务器时的配额

  • 守护进程启动顺序:rpc.portmap, rpc.mountd, rpc.nfsd, rpc.statd, rpc.lockd (新版本会自动跟着nfsd启动起来), rpc.rquotad

nf服务器端命令:

•yum install nfs-utils portmap
•chkconfig rpcbind on #chkconfig:更新和查询各运行级别的系统服务
•chkconfig nfs on
•service rpcbind start
•service nfs start

2,服务器端配置文件/etc/exports:指定要共享的目录及权限 man exports

复制代码 代码如下:


#:允许ip地址范围在192.168.0.*的计算机以读写的权限来访问/home/work 目录。
/home/work 192.168.0.*(rw,sync,root_squash)
/home  192.168.1.105 (rw,sync)
/public  * (rw,sync)

配置文件每行分为两段:第一段为共享的目录,使用绝对路径,第二段为客户端地址及权限。
地址可以使用完整ip或网段,例如10.0.0.8或10.0.0.0/24,10.0.0.0/255.255.255.0当然也可以地址可以使用主机名,dns解析的和本地/etc/hosts解析的都行,支持通配符,例如:*.chengyongxu.com

权限有:
rw:read-write,可读写;    注意,仅仅这里设置成读写客户端还是不能正常写入,还要正确地设置共享目录的权限,参考问题7
ro:read-only,只读;
sync:文件同时写入硬盘和内存;
async:文件暂存于内存,而不是直接写入内存;
no_root_squash:nfs客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,也拥有root权限。显然开启这项是不安全的。
root_squash:nfs客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,拥有匿名用户权限,通常他将使用nobody或nfsnobody身份;
all_squash:不论nfs客户端连接服务端时使用什么用户,对服务端分享的目录来说都是拥有匿名用户权限;
anonuid:匿名用户的uid值,通常是nobody或nfsnobody,可以在此处自行设定;
anongid:匿名用户的gid值。

nfs客户端用户映射:客户端登陆用户为root或者其他用户,然后根据服务器端nfs server配置,相应客户端连接映射到nfs服务器端的用户为root或者指定用户(通过anonuid或者anongid来设定)、nfsnobody等。最后这个映射用户和共享目录的权限共同影响该客户端连接是否有读写权限。
手动设定客户端、服务器端用户映射,参数:map_static=/etc/nfs.map
/etc/nfs.map文件映射内容如下:
# remote local
gid 500 1000
uid 500 2003

参考:关于nfs客户连接用户身份的描述,没有验证过下述的描述:

•客户端连接时候,对普通用户的检查,no.1如果明确设定了普通用户被压缩的身份,那么此时客户端用户的身份转换为指定用户,no.2如果nfs server上面有同名用户,那么此时客户端登录账户的身份转换为nfs server上面的同名用户,no.3如果没有明确指定,也没有同名用户,那么此时 用户身份被压缩成nfsnobody
•客户端连接的时候,对root的检查,no.1如果设置no_root_squash,那么此时root用户的身份被压缩为nfs server上面的root,no.2如果设置了all_squash、anonuid、anongid,此时root 身份被压缩为指定用户,no.3如果没有明确指定,此时root用户被压缩为nfsnobody,no.4如果同时指定no_root_squash与all_squash 用户将被压缩为 nfsnobody,如果设置了anonuid、anongid将被压缩到所指定的用户与组

3,防火墙设置修改

默认情况下,centos6服务器版安装完成后,防火墙iptables配置中只放开了22端口。
在nfs配置文件/etc/sysconfig/nfs中指定nfs服务相关端口,并修改防火墙放开相应端口

复制代码 代码如下:


#port rpc.mountd should listen on. 
#mountd_port=892 
 
#port rpc.statd should listen on. 
#statd_port=662 
 
#/usr/sbin/rpc.rquotad port rquotad should listen on. 
#rquotad_port=875 
 
#tcp port rpc.lockd should listen on. 
#lockd_tcpport=32803 
 
#udp port rpc.lockd should listen on. 
#lockd_udpport=32769  

修改iptables配置文件/etc/sysconfig/iptables,放开111(portmap服务端口),2049(nfs服务端口)

4,/etc/hosts.allow配置修改
/etc/hosts.allow,/etc/hosts.deny 描述哪些主机允许使用本地的inet服务。
默认这里好像可以不需要修改,不过最好设置成只允许需要的客户端机器连接,然后其他机器的连接都deny
#服务进程名:主机列表:当规则匹配时可选的命令操作
server_name:hosts-list[:command]
在/etc/hosts.allow中添加允许客户端访问的规则
all:127.0.0.1         #允许本机访问本机所有服务进程
all:192.168.0.135     #允许192.168.0.135客户端机器访问本机所有服务进程
smbd:192.168.0.0/255.255.255.0    #允许网段的ip访问smbd服务
sshd:192.168.100.0/255.255.255.0        #允许192.168.100.网段的ip访问服务器上的sshd进程
sshd:60.28.160.244                                  #允许外网的60.28.160.244访问这个服务器上的sshd进程
在/etc/hosts.deny中 被禁制登陆的尝试连接信息也可以设置成记录下来并发到用户邮箱
sshd:all    #禁止所有

5,修改共享出去的目录权限为760,并修改目录所有组为nfsnobody
参考:问题7

6,客户端挂载:执行下面的指令就可以把nfs服务器(ip地址为192.168.1.45)共享出来的/home挂装到本地的/mnt/nfs/home目录下。
showmount -e nfs-serverip: 查看nfs服务器共享出来的资源
mount -t nfs 192.168.1.45:/home /mnt/nfs/home

7,nfs性能测试:

•根据命令time dd if=/dev/zero of=/mnt/home bs=16k count=16384 来设置合理的wsize,rsize值
•根据nfs客户端数,在/etc/sysconfig/nfs配置文件中设置合适的nfs服务器端进程数rpcnfsdcount,默认为8

exportfs命令:如果我们在启动了nfs之后又修改了/etc/exports,是不是还要重新启动nfs呢?这个时候我们就可以用exportfs命令来使改动立刻生效,该命令格式如下:
exportfs [-aruv] -a :全部mount或者unmount /etc/exports中的内容 -r :重新mount /etc/exports中分享出来的目录 -u :umount 目录 -v :在 export 的時候,将详细的信息输出到屏幕上。
showmount命令:显示nfs服务器的挂载信息。
showmount -e [nfs-server]:显示指定的nfs server上export出来的目录,不指定后面ip时查看的是本机作为nfs server时,对外共享的目录。。
rpcinfo -p命令:显示rpc信息  -p参数:用rpc协议来探测主机host上使用的rpcbind,并显示所有已注册的rpc程序。
nfsstat命令:查看nfs的运行状态,对于调整nfs的运行有很大帮助

过程中出现的问题解决:

1, 通过yum或者rpm安装完portmap后,发现执行命令service portmap start时报如下错误:portmap: unrecognized service。
centos6(linux kernel 2.6.32)中,portmap已经被rpcbind代替了,仔细查看安装信息就会发现,执行命令yum install portmap时安装的就是rpcbind。安装完成后也可以通过命令:yum whatprovides portmap来查看详细信息。

2, 客户端挂载时,报错误mount clntudp_create: rpc: port mapper failure - rpc: unable to receive。

•1,通过命令rpcinfo -p来查看portmap服务时候正常启动以及相应的端口(默认111)
•2,检查/etc/sysconfig/iptables防火墙设置,允许tcp,udp的111端口访问,然后service iptables restart
•3,检查/etc/hosts.deny,/etc/hosts.allow看客户端连接是否被阻止了

3, 客户端执行命令showmount -e nfs-server时,报错误:mount clntudp_create: rpc: program not registered。
nfs、rpcbind服务没有启动,使用chkconfig把nfs、rpcbind加到系统服务中并用service来启动
或者在/etc/hosts.allow中添加允许客户端访问的规则 all:192.168.0.135

4, 客户端执行命令showmount -e nfs-server时,报错误:rpc mount export: rpc: unable to receive; errno = no route to host
配置文件:/etc/sysconfig/nfs
找到nfs服务相关端口设置的地方,并移除注释后,在iptables防火墙设置中指定允许相应端口的udp,tcp流通过。
#mountd_port=892
#statd_port=662
#lockd_tcpport=32803
#lockd_udpport=32769
iptables -a input -p tcp --dport 662 -m state --state new -j accept
iptables -a input -p udp --dport 661 -m state --state new -j accept

5, showmount -e nfs-server成功,正式挂载时报错:mount: mount to nfs server '192.168.1.5' failed: system error: no route to host.这是由于nfs服务的默认端口2049被防火墙阻塞了,和上面类似修改iptables允许2049端口通过

6, showmount -e nfs-server成功,正式挂载时报错:mount: mount to nfs server '192.168.1.5' failed: timed out (retrying).
编辑/etc/sysconfig/iptables时,相关端口的tcp端口允许通过,而udp不允许。其他可能的原因参考:mount command fails with nfs server failed error.
disable name lookup requests from nfs server to a dns server. 
or  nfs version used by the nfs client is other than version 3.

7,exports配置文件中目录权限属性设置为rw(默认为root_squash),但是在客户端mount目录执行touch命令时报错误:touch: cannot touch `a': permission denied。解决:

•服务器端共享目录权限查看ll -d /home
•修改服务器端共享目录权限chown 760 /home(文件所有者root有全权限、文件所有组用户有读写权限、其他用户无权限,然后把目录的组设置为nfsnobody)
•修改服务器端共享目录权限组拥有者为nfsnobody(cat /etc/passwd | grep nob)
•chgrp nfsnobody /home
•成功在客户端创建新的文件!

以上是linux下NFS安装配置的方法是什么的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

互联网在Linux上运行吗? 互联网在Linux上运行吗? Apr 14, 2025 am 12:03 AM

互联网运行不依赖单一操作系统,但Linux在其中扮演重要角色。Linux广泛应用于服务器和网络设备,因其稳定性、安全性和可扩展性受欢迎。

linux怎么启动nginx linux怎么启动nginx Apr 14, 2025 pm 12:51 PM

在 Linux 中启动 Nginx 的步骤:检查 Nginx 是否已安装。使用 systemctl start nginx 启动 Nginx 服务。使用 systemctl enable nginx 启用在系统启动时自动启动 Nginx。使用 systemctl status nginx 验证启动是否成功。在 Web 浏览器中访问 http://localhost 查看默认欢迎页面。

怎么查看nginx是否启动 怎么查看nginx是否启动 Apr 14, 2025 pm 01:03 PM

确认 Nginx 是否启动的方法:1. 使用命令行:systemctl status nginx(Linux/Unix)、netstat -ano | findstr 80(Windows);2. 检查端口 80 是否开放;3. 查看系统日志中 Nginx 启动消息;4. 使用第三方工具,如 Nagios、Zabbix、Icinga。

怎么启动nginx服务器 怎么启动nginx服务器 Apr 14, 2025 pm 12:27 PM

启动 Nginx 服务器需要按照不同操作系统采取不同的步骤:Linux/Unix 系统:安装 Nginx 软件包(例如使用 apt-get 或 yum)。使用 systemctl 启动 Nginx 服务(例如 sudo systemctl start nginx)。Windows 系统:下载并安装 Windows 二进制文件。使用 nginx.exe 可执行文件启动 Nginx(例如 nginx.exe -c conf\nginx.conf)。无论使用哪种操作系统,您都可以通过访问服务器 IP

nginx403怎么解决 nginx403怎么解决 Apr 14, 2025 am 10:33 AM

如何解决 Nginx 403 Forbidden 错误?检查文件或目录权限;2. 检查 .htaccess 文件;3. 检查 Nginx 配置文件;4. 重启 Nginx。其他可能原因还包括防火墙规则、SELinux 设置或应用程序问题。

nginx403错误怎么解决 nginx403错误怎么解决 Apr 14, 2025 pm 12:54 PM

服务器无权访问所请求的资源,导致 nginx 403 错误。解决方法包括:检查文件权限。检查 .htaccess 配置。检查 nginx 配置。配置 SELinux 权限。检查防火墙规则。排除其他原因,如浏览器问题、服务器故障或其他可能的错误。

linux怎么查看nginx是否启动 linux怎么查看nginx是否启动 Apr 14, 2025 pm 12:48 PM

在 Linux 中,使用以下命令检查 Nginx 是否已启动:systemctl status nginx根据命令输出进行判断:如果显示 "Active: active (running)",则 Nginx 已启动。如果显示 "Active: inactive (dead)",则 Nginx 已停止。

nginx error日志怎么清理 nginx error日志怎么清理 Apr 14, 2025 pm 12:21 PM

错误日志位于 /var/log/nginx(Linux)或 /usr/local/var/log/nginx(macOS),使用命令行清理步骤:1. 备份原日志;2. 创建空文件作为新日志;3. 重启 Nginx 服务。也可使用第三方工具(如 logrotate)或配置自动清理。

See all articles