CentOS下NFS服务器配置实例

    技术2022-05-20  57

    LINUX下NFS的配置与安全设置

    Redhat Linux NFS配置     NFS简介:     NFS是网络文件系统的简写(network file system),主要用在linux或unix环境中,是有sun公司开发,并于1984年推出的一个RPC服务系统。     NFS功能介绍:     他可以将多个目录或者单个目录进行发布,例如我们在网刻系统的时候可以用NFS来共享光盘镜像,NFS是以发布目录的方式将文件进行发布,而客户端是以挂载的方式进行访问。客户端可以节省本地空间,将数据存放在nfs服务器上。NFS也可以针对但个用户以及多用户设置不同的访问权限。     详细配置步骤:     安装NFS必须要开启的服务有:nfs、portmap、     NFS的配置相对于其他服务是比较简单的,我们依然还是要注意防火墙以及SElinux,     首先我们检查软件是否已安装,这里我已经都安装了。     在安装redhat linux 时这些包默认就已被安装,如果你检查发现没有安装,可以使用一下命令进行安装;     #rpm –ivh nfs*     #rpm –ivh portmap     配置NFS,配置文件在/etc/exports     首先我们使用vim打开/etc/exports 我们会发现这是一个空文件,里面没有任何内容。如果没有此文件,我们可以新创建一个,     这里我们举个例子来完成对NFS的配置,     例如:公司有多台计算机,而其中只有一台服务器有光驱,而我们其他的计算机也想安装光盘上的软件,现在我们就可以用NFS来实现。例如我们的服务器光驱挂载在/media上,接下来我们来编辑配置文件来实现以上的功能。     依然使用vi打开配置文件编辑以下内容:       然后保存退出,这个文件里我们只需编辑俩个字段:前面的为共享目录,后面的为哪些人可以访问以及访问权限,*代表所有人(ro)为只读权限。     启动服务 然后我们可以使用exportfs命令查询输出的目录     客户端挂载     需要启动服务 portmap     使用mount命令挂载,例如我/下有nfs目录,我将挂载到nfs目录上         然后我们就可以访问光盘目录了,     反挂载使用umount /nfs     我们还可以使用shoumount --export 192.168.0.7   查看NFS所发布的目录     如果您想共享其他的目录也是安装同样的方法,注意权限问题,目录权限和共享权限。     一些相关共享权限:     ro 客户端为只读权限     rw 客户端为读写权限     root_sqush 客户端使用root访问时映射为nobady (默认选项)     no_root_squash 客户端映射为root访问     启动服务的其它方式:/etc/rc.d/init.d/portmap start   /etc/rc.d/init.d/nfs start     部分配置文件细节     exports文件内容格式:     <输出目录> [客户端1 选项(访问权限,用户映射,其他)] [客户端2 选项(访问权限,用户映射,其他)]     1.输出目录:     输出目录是指NFS系统中需要共享给客户机使用的目录;     2.客户端:     客户端是指网络中可以访问这个NFS输出目录的计算机     客户端常用的指定方式     指定ip地址的主机 192.168.0.200     指定子网中的所有主机 192.168.0.0/24     指定域名的主机 a.liusuping.com     指定域中的所有主机 *.liusuping.com     所有主机 *     3.选项:     选项用来设置输出目录的访问权限、用户映射等。NFS主要有3类选项:     访问权限选项     设置输出目录只读 ro     设置输出目录读写 rw     用户映射选项 all_squash 将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody);     no_all_squash 与all_squash取反(默认设置);     root_squash 将root用户及所属组都映射为匿名用户或用户组(默认设置);     no_root_squash 与rootsquash取反;     anonuid=xxx 将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx);     anongid=xxx 将远程访问的所有用户组都映射为匿名用 户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx);     其它选项     secure 限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置);     insecure 允许客户端从大于1024的tcp/ip端口连接服务器;     sync 将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;     async 将数据先保存在内存缓冲区中,必要时才写入磁盘;     wdelay 检查是否有相关的写操作,如果有则将这些写操作 一起执行,这样可以提高效率(默认设置);     no_wdelay 若有写操作则立即执行,应与sync配合使用;     subtree 若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置);     no_subtree 即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;     /home/work 192.168.0.*(rw,sync,no_root_squash)     内容表示:允许ip 地址范围在192.168.0.*的计算机以读写的权限来访问/home/work 目录。     /home/work 也称为服务器输出共享目录。     括号内的参数意义描述如下:     rw:读/写权限,只读权限的参数为ro;     sync:数据同步写入内存和硬盘,也可以使用async,此时数据会先暂存于内存中,而不立即写入硬盘。     no_root_squash:NFS 服务器共享目录用户的属性,如果用户是 root,那么对于这个共享目录来说就具有 root 的权限。     接着执行如下命令,启动端口映射:     # /etc/rc.d/init.d/portmap start     最后执行如下命令启动NFS 服务,此时NFS 会激活守护进程,然后就开始监听 Client 端的请求:     # /etc/rc.d/init.d/nfs start     用户也可以重新启动Linux 服务器,自动启动Linux NFS 服务。     在NFS 服务器启动后,还需要检查Linux 服务器的防火墙等设置(一般需要关闭防火墙服务),确保没有屏蔽掉NFS 使用的端口和允许通信的主机,主要是检查Linux 服务器iptables,ipchains 等选项的设置,以及/etc/hosts.deny,/etc/hosts.allow 文件。     我们首先在Linux 服务器上进行NFS 服务器的回环测试,验证共享目录是否能够被访问。在Linux 服务器上运行如下命令:     # mount –t nfs 192.168.0.20:/home/work /mnt     # ls /mnt     命令将Linux 服务器的NFS 输出共享目录挂载到/mnt 目录下,因此,如果NFS 正常工作,应该能够在/mnt 目录看到/home/work 共享目录中的内容。     客户端 mount命令   mount –t nfs 192.168.0.20:/home/work /mnt/nfs –o nolock     简单脚本执行     host启动nfs:     snfs     #!/bin/bash     ifconfig eth0 192.168.0.20     /etc/rc.d/init.d/portmap start     /etc/rc.d/init.d/nfs start     嵌入式目标机挂载nfs:     mnfs:     #!/bin/sh     mount -t nfs 192.168.0.20:/home/work/nfs /mnt/nfs -o nolock     echo "nfs ok!"     在客户端查看NFS各种状态     showmount -e 可看有分享哪些目录     # showmount -a 可看出所有的 mount     # showmount -e 172.16.75.1     在服务端 显示当前主机NFS服务器中已经被NFS客户机挂载使用的共享目录    # showmount -d     检查NFS的运行级别:     # chkconfig --list portmap     # chkconfig --list nfs     根据需要设置在相应的运行级别自动启动NFS:     # chkconfig --level 235 portmap on     # chkconfig --level 235 nfs on     客户端开机自动挂载     通过修改/etc/fstab文件可以实现开机自动挂载nfs目录     [root@linux-b nfs1]# vim /etc/fstab     /dev/VolGroup00/LogVol00 /                       ext3    defaults        1 1     LABEL=/boot             /boot                   ext3    defaults        1 2     devpts                  /dev/pts                devpts  gid=5,mode=620  0 0     tmpfs                   /dev/shm                tmpfs   defaults        0 0     proc                    /proc                   proc    defaults        0 0     sysfs                   /sys                    sysfs   defaults        0 0     /dev/VolGroup00/LogVol01 swap                    swap    defaults        0 0     192.168.0.231:/nfs/frank        /mnt/nfs1       nfs     defaults        0 0     1、在配置NFS服务器之前用ping命令确保两个linux系统正常连接,如果无法连接关闭图形界面中的防火墙#service iptables stop     2、更改完“exports”文件后要输入exportfs –rv ,使得“exports”文件生效。     3、检查nfs服务是否开启,默认是关闭的。

    ###############################################################################################################

    一,应用环境介绍:

    用途

    操作系统

    IP地址

    服务器端

    CentOS 5.2 X86_64

    192.168.0.121

    客户端

    CentOS 5.2 X86_64

    192.168.0.122

     

     

    二,NFS相关软件的安装:

    [root@youxia122 ~]# yum -y install portmap nfs*

     

     

    三,服务器端配置:

    1,创建共享的目录:

    [root@youxia121 data]# mkidr /usr/local/data/

     

    2,修改NFS配置文件:

    [root@youxia121 data]# vi /etc/exports

    /usr/local/data/ 192.168.0.122(rw,no_root_squash,no_all_squash,sync)

     

    注:配置文件说明:

    /usr/local/data/ 为共享的目录,使用绝对路径。

    192.168.0.122(rw,no_root_squash,no_all_squash,sync) 为客户端的地址及权限,地址可以是一个网段,一个IP地址或者是一个域名,域名支持通配符,如:*.youxia.com,地址与权限中间没有空格,权限说明:

    rw:read-write,可读写;

    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服务器配置:         创建一个目录用于共享,然后再用vi /etc/exports编辑文件,在里面 添加内容,格式如下:  [共享的目录] [主机名或ip(参数1,参数2)] [主机名或ip(参数1,参数2)] ... NFS常用到的参数有:  ro  只读  rw  读写  sync  所有数据在请求时写入共享  async  nfs在写入数据前可以相应的请求  secure  nfs通过1024以下端口发送  insecure nfs通过1024以上端口发送  wdenlay  有多个用户写入nfs目录,则归组写入  no_wdelay 有多个用户写入nfs目录,则立即写入  hide  不共享子目录  no_hide  共享子目录  subtree_check 如果共享/usr/bin之类的子目录,强制nfs检查父目录的权限  no_subtree_check不检查父目录权限  all_squash 共享文件的uid和gid映射匿名用户anonymous,适用公用目录  no_all_squash 保留共享文件的uid和gid  root_squash root用户的所有请求映射成和anonymous用户一样的权限  no_root_squash root用户具有根目录的完全管理访问权限  anonuid=xxx 指定nfs服务器/etc/passwd文件匿名用户的uid  anongid=xxx 指定nfs服务器/etc/passwd文件匿名用户的gid 配置完成后要重启nfs服务例如:/etc/init.d/nfs restart

    在linux客户机上要查看nfs资源可以用showmount -e 服务端ip地址,测试是否通讯成功

    如果要用windows系统不能直接访问NFS服务器,如果要共享可以用samba服务器。

     

    四,启动NFS服务器并进行测试:

    1,启动NFS服务器:

    [root@youxia121 data]# service portmap start

    启动 portmap:[确定]

    [root@youxia121 data]# service nfs start

    启动 NFS 服务: [确定]

    关掉 NFS 配额:[确定]

    启动 NFS 守护进程:[确定]

    启动 NFS mountd:[确定]

     

    2,在客户端进行测试:

    创建需要挂载的目录:

    [root@youxia122 local]# mkdir /usr/local/data/

     

    执行挂载命令:

    [root@youxia122 local]# mount -t nfs 192.168.0.121:/usr/local/data /usr/local/data  -o proto=tcp -o nolock

     

    在客户端创建一个测试文件并进行检查:

    [root@youxia122 ~]# cd /usr/local/data/

    [root@youxia122 data]# echo "this is a test" >> /usr/local/data/hehehe

    [root@youxia122 data]# ll -h

    总计 8.0K

    -rw-r--r-- 1 root root 15 02-23 16:47 hehehe

     

    在服务器端检查:

    [root@youxia121 usr]# ll -h /usr/local/data/

    总计 8.0K

    -rw-r--r-- 1 root root 15 02-23 16:47 heheh

     

     

    五,我在配置中遇到的问题:

    1,在启动NFS服务器的时候遇到的一个问题如下,原因在于NFS配置文件中地址与权限中间多了一个空格,去掉空格重新启动即可:

    [root@youxia121 local]# service nfs restart

    关闭 NFS mountd:[确定]

    关闭 NFS 守护进程:[确定]

    关闭 NFS 服务: [确定]

    启动 NFS 服务: exportfs: No options for /usr/local/data/ 192.168.0.122: suggest 192.168.0.122(sync) to avoid warning

    exportfs: No host name given with /usr/local/data (rw,no_root_squash,no_all_squash,sync), suggest *(rw,no_root_squash,no_all_squash,sync) to avoid warning

    [确定]

    关掉 NFS 配额:[确定]

    启动 NFS 守护进程:[确定]

    启动 NFS mountd:[确定]

     

     

    2,客户端在挂载的时候遇到的一个问题如下,可能是网络不太稳定,NFS默认是用UDP协议,换成TCP协议即可:

    [root@youxia122 local]# mount -t nfs 192.168.0.121:/usr/local/data /usr/local/data

    mount.nfs: Input/output error

     

    解决方法:mount -t nfs 192.168.0.121:/usr/local/data /usr/local/data  -o proto=tcp -o nolock

     

    本篇文章没有结论,只有思路。有兴趣的自己做做吧。

    所有的事情都有个缘由的,这个事情我就比较烦。用来NFS,以前觉得简单,所以没有特别在意。这次想用NFS,并且打开iptables的情况下,就发现了问题。 问题描述:已经在Server端iptables上,打开portmap的端口111,后来得知NFS 4用的端口是2049,当时使用图形界面配置,所以也打开了。但是客户端就是错误。showmount -e serverIP的时候报mount clntudp_create: RPC: Port mapper failure - RPC: Unable to receive,关闭iptalbes就OK。再查,知道了。NFS和RPC的关系得知了一些NFS在2、3版本的时候的一些相关进程。(这些具体进程,可以看我的参考文档),总之,当使用3的版本时,要将相关联的端口打开。而那几个端口是随机的,如果想指定为固定端口,需要在/etc/sysconfig/nfs里面定义。而NFS 4的版本是不需要portmap的。但是需要配合krb5来做。很麻烦,都是思路。除非真的用。我是不想弄了。 写写思路就得了。 几个命令用得着: man -k nfs   exportfs -r nfsstat 引用 参考文档: 1: RHEL5 Deployment_Guide.eng.pdf 2: http://slackwiki.org/NFS_and_Firewall 3: http://www.guyong.cn/blog/article.asp?id=168 4: http://wiki.linux-nfs.org/wiki/index.php/Main_Page 忍不住,还是处理了。具体操作如下: 修改/etc/sysconfig/nfs [root@kook ~]# grep -v ^# /etc/sysconfig/nfs LOCKD_TCPPORT=4001 LOCKD_UDPPORT=4001 MOUNTD_PORT=4002 STATD_PORT=4003 [root@kook ~]# cat /etc/sysconfig/iptables ................. -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 111 -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 2049 -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 4001 -j ACCEPT -A RH-Firewall-1-INPUT -p udp -m state --state NEW -m udp --dport 4001 -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 4002 -j ACCEPT -A RH-Firewall-1-INPUT -p udp -m state --state NEW -m udp --dport 4002 -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 4003 -j ACCEPT -A RH-Firewall-1-INPUT -p udp -m state --state NEW -m udp --dport 4003 -j ACCEPT .................


    最新回复(0)