当前位置: > 华清远见教育科技集团 > 嵌入式学习 > 讲师博文 > Linux系统的NFS服务配置
Linux系统的NFS服务配置
时间:2016-12-13作者:华清远见

本文以ubuntu系统为例,描述nfs服务的配置方法。

一、服务器配置

1. 安装NFS服务器程序软件包
        linux@farsight:~$ sudo apt-get install nfs-kernel-server

2.配置nfs服务的共享目录
        linux@farsight:~$sudo vi /etc/exports

配置NFS服务器的关键也就是配置该文件。配置文件中一行即为一条配置项,用于指明网络中的"哪些客户端"共享"哪些目录资源"。导出资源配置项格式如下所示。

共享目录 主机名 (权限)
        共享目录表示服务器中导出的共享资源路径,必须使用绝对路径名;
        主机名的写法有很多种:
        网段:192.168.1.0/24
        完整IP:192.168.1.23
        主机名称:但此主机名称需要存在于/etc/hosts中或使用DNS可以找到,找到IP即可
        支持通配符,如*?
        所有主机:*

权限表示赋予每个客户端主机的访问权限。括号内是设置权限参数的位置,权限不止一个时,使用,隔开,主机名和括号连在一起。

权限参数说明如下:
        Rw:read-write可读写的权限
        Ro:read-only只读权限
        no_root_squash:登入NFS主机使用共享目录的用户,如果是用户root,对于此共享目录具有root权限,不建议使用。
        root_squash:登入NFS主机使用共享目录的用户,如果是用户root,此用户权限将被压缩为匿名用户,其UID和GID都会被压缩为nobody(nfsnobody)系统账号的身份。
        all_squash:不论登入NFS的用户身份为何,其身份都被转换成为匿名用户,即nobody。
        anonuid=xxx :指定NFS服务器/etc/passwd文件中匿名用户的UID,但此UID必须存在于/etc/passwd中。
        anongid=xxx:指定NFS服务器/etc/passwd文件中匿名用户的GID ,但此GID必须存在于/etc/group中。
        Anongid:同anonuid,变成group ID即可。
        Sync:数据同步写入到内存与硬盘中
        Async:数据先暂存于内存中,而非直接写入硬盘
        Secure: NFS通过1024以下的安全TCP/IP端口发送
        insecure: NFS通过1024以上的端口发送
        hide : 在NFS共享目录中不共享其子目录
        no_hide: 共享NFS目录的子目录
        subtree_check: 如果共享/source/rootfs之类的子目录时,强制NFS检查父目录的权限(默认)
        Zno_subtree_check : 和上面相对,不检查父目录权限

备注:这里所说的匿名用户,指的是/etc/passwd中的nodody用户。

nobody用户对应的组如下:

权限说明:

1.NFS server和NFS client具有相同的UID和账号
        如果NFSserver和NFSclient具有相同共享文件账号和相同UID,客户端登入NFSserver时,就会拥有/etc/exports设置的权限

2.NFS server和NFS client具有不同的账号
        如果NFSclient不拥有NFSserver共享文件账号,或NFSclient的账号在NFSserver不存在,是否可以读写共享目录,需要查看NFSserver的权限而定,其身份会变为匿名用户nobody

3.NFS client的身份为root
        默认情况下,客户端的root身份会被压缩成匿名用户nobody

配置举例:

/source/rootfs 192.168.1.29(rw)
        设置共享目录/source/rootfs ,仅192.168.1.29主机允许访问此共享目录,具有读写权限

/source/rootfs 192.168. 1.29 (rw) *(ro)
        设置共享目录/source/rootfs,192.1681.29可以读写该共享目录,其他主机只可以读取该共享目录

/source/rootfs 192.168. 1.29(no_root_squash)
        设置共享目录/source/rootfs,仅192.168.1.29可以访问和读写,root登录时拥有root权限

/source/rootfs 192.168.1.0/24(rw)
        设置共享目录/source/rootfs,仅有192.168.1.0/24网段的主机才可访问和读写此目录文件

/source/rootfs *(rw,all_squash,anonuid=500,anongid=500)
        设置共享目录/source/rootfs,所有主机都允许访问此共享目录,具有读写权限,但他们访问该共享目录时,已将其UID、GID设置成500。NFSserver主机中UID、GID=500的权限已经设置好

3.启动nfs服务

通常,NFS服务的守护进程是以持续监听端口的独占方式运行。用户通过使用NFS的初始化脚本,可以手动启停NFS服务。系统管理员在调整共享资源之后,一定要重新启动NFS服务,以便使修改的配置生效。

启动NFS服务:
        linux@farsight:~$ sudo /etc/init.d/nfs-kernel-server start

停止NFS服务
        linux@farsight:~$ sudo /etc/init.d/nfs-kernel-server stop

重新启动NFS服务
        linux@farsight:~$ sudo /etc/init.d/nfs-kernel-server restart

查看NFS服务当前状态
        NFS服务开启时显示nfsd running,关闭是显示 nfs not running。
        linux@farsight:~$ sudo /etc/init.d/nfs-kernel-server status

二、客户端配置

1. 查看NFS服务器的共享资源
            $showmount -e 192.168.1.29

2. 挂载NFS服务器中的共享目录到本地目录/mnt/nfs下
            $sudo mount -t nfs 192.168.1.29:/source/rootfs /mnt/nfs

3. 卸载系统中已挂载的NFS共享目录
            $ sudo umount /mnt/nfs

4. 修改fstab文件让系统启动时自动挂载NFS文件
            #vi /etc/fstab
            192.168.1.29: /source/rootfs /mnt/nfs nfs defaults 0 0

linux /etc/fstab的内容主要包括六项

例如下面两行:
        LABEL=/ / ext3 defaults 1 1
        /dev/sda2 /mnt/D/ vfat defaults 0 0

第一列:设备名或者设备卷标名 (/dev/sda10 或者 LABEL=/)
        第二列: 设备挂载目录 (例如上面的 "/" 或者 "/mnt/D/")
        第三列: 设备文件系统 (例如上面的 "ext3" 或者 "vfat")
        第四列:挂载参数 (看帮助 man 8 mount)
        对于已经挂载好的设备,例如上面的/dev/sda2,现在要改变挂载参数,这时可以不用卸载该设备,而可以使用下面的命令(没有挂载的设备,remount 这个参数无效)
        $ mount /mnt/D/ -o remount,ro (改defaults为ro)
&nnbsp;       为了安全起见,可以指明其他挂载参数,例如:
        noexec (不允许可执行文件可执行,但千万不要把根分区挂为noexec,那就无法使用系统了
        nodev (不允许挂载设备文件)
        nosuid,nosgid(不允许有 suid 和 sgid 属性)
        nouser(不允许普通用户挂载)
        第五列:指明是否要备份 (0 为不备份,1 为要备份, 一般根分区要备份)
        第六列:指明自检顺序 (0 为不自检,1 或者 2 为要自检, 如果是根分区要设为1,其他分区只能是2)

# This file is edited by fstab-sync - see 'man fstab-sync' for details
        /dev/hda1 /boot ext3 defaults 1 2
        /dev/hda2 /data ext3 defaults 1 2
        /dev/hda3 / ext3 defaults 1 1
        /dev/hda5 /oracle ext3 defaults 1 2
        /dev/hda6 /home ext3 defaults 1 2
        /dev/hda7 swap swap defaults 0 0
        none /dev/pts devpts gid=5,mode=620 0 0
        none /dev/shm tmpfs defaults 0 0
        none /proc proc defaults 0 0

发表评论
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)