linux与linux之间使用NFS(Network File System)共享数据.
与NFS相关的几个文件, 命令
/etc/exports
对NFS卷的访问是由exports来批准, 它枚举了若干有权访问NFS服务器上文件系统的主机名.
2, /sbin/exportfs
维护NFS的资源共享. 可以通过它重新设定 /etc/exports 的共享目录, 卸载NFS Server共享的目录或者重新共享等.
3, /usr/sbin/showmount
用在 NFS Server 端,而 showmount 则主要用在 Client 端. showmount 可以用來查看 NFS 共享的目录资源.
4, /var/lib/nfs/xtab
NFS的记录文档: 通过它可以查看有哪些Client 连接到NFS主机的记录.
下面这几个并不直接负责NFS, 实际上它们负责所有的RPC
5, /etc/default/portmap
实际上, portmap负责映射所有的RPC服务端口, 它的内容非常非常之简单(后面详述)
6, /etc/hosts.deny
设定拒绝portmap服务的主机
7, /etc/hosts.allow
设定允许portmap服务的主机
安装NFS
Debian/Ubuntu上默认是没有安装NFS服务器的,首先要安装NFS服务程序:
$ sudo apt-get install nfs-kernel-server
(安装nfs-kernel-server时,apt会自动安装nfs-common和portmap)
这样,宿主机就相当于NFS Server。
同样地,目标系统作为NFS的客户端,需要安装NFS客户端程序。如果是Debian/Ubuntu系统,则需要安装nfs-common。
$ sudo apt-get install nfs-common
配置NFS
由于NFS是一个RPC server程序. 而portmap是用来挂你RPC的端口号映射的. 所以先要配置portmap.
配置portmap
方法1: 编辑/etc/default/portmap, 将 -i 127.0.0.1 去掉.
方法2: $ sudo dpkg-reconfigure portmap , 对Should portmap be bound to the loopback address? 选N.
配置/etc/hosts.deny
(禁止任何host(主机)能和你的NFS服务器进行NFS连接),加入:
### NFS DAEMONS
portmap:ALL
lockd:ALL
mountd:ALL
rquotad:ALL
statd:ALL
配 置/etc/hosts.allow
允许那些你想要的主机和你的NFS服务器建立连接。下列步骤将允许任何IP地址以192.168.2开头的主机(连 接到NFS服务器上),也可以指定特定的IP地址。参看man页 hosts_access(5), hosts_options(5)。加入:
### NFS DAEMONS
portmap: 192.168.2.
lockd: 192.168.2.
rquotad: 192.168.2.
mountd: 192.168.2.
statd: 192.168.2.
/etc/hosts.deny 和 /etc/hosts.allow 设置对portmap的访问. 采用这两个配置文件有点类似"mask"的意思. 现在/etc/hosts.deny中禁止所有用户对portmap的访问. 再在/etc/hosts.allow 中允许某些用户对portmap的访问. 运行 $ sudo /etc/init.d/portmap restart |
配置/etc/exports
NFS挂载目录及权限由/etc/exports文件定义
比如我要将将我的home目录中的/home/zp/share目录让192.168.2.*的IP共享, 则在该文件末尾添加下列语句:
/home/zp/share 192.168.2.*(rw,sync,no_root_squash)
或者: /home/zp/share 192.168.2.0/24(rw,sync,no_root_squash)
192.168.2.* 网段内的NFS客户端能够共享NFS服务器/home/zp/share目录内容.且有读,写权限, 并且该用户进入/home/zp/share目录后的身份为root
最好加上sync, 否则 $ sudo exportfs -r 时会给出警告, sync是NFS的默认选项.
运行 $ showmount -e 查看NFS server的export list. 若更改了/etc/exports, 运行 $ sudo exportfs -r 更新 运行 $ sudo /etc/init.d/nfs-kernel-server restart |
/etc/exports实际上就是nfs服务器的核心配置文件
测试NFS
可以尝试一下挂载本地磁盘(假设本地主机IP地址为:192.128.2.1,将/home/zp/share挂载到/mnt)
$ sudo mount 192.168.2.1:/home/zp/share /mnt
NFS Server端的配置文件
a)./etc/exports
分享的目录 主机名称1或IP1(参数1,参数2) 主机名称2或IP2(参数3,参数4)
b).参数
rw: 可擦写的权限
ro: 只读的权限
no_root_squash: 登入 NFS 主机使用分享目录的使用者,如果是 root 的话,那么对于这个分享的目录来说,他就具有 root 的权限!这个项目『极不安全』,不建议使用!
root_squash: 在登入 NFS 主机使用分享之目录的使用者如果是 root 时,那么这个使用者的权限将被压缩成为匿名使用者,通常他的 UID 与 GID 都会变成 nobody 那个身份;
all_squash: 不论登入 NFS 的使用者身份为何,他的身份都会被压缩成为匿名使用者,通常也就是 nobody 啦!
anonuid: 前面关于 *_squash 提到的匿名使用者的 UID 设定值,通常为 nobody,但是你可以自行设定这个 UID 的值!当然,这个 UID 必需要存在于你的 /etc/passwd 当中!
anongid: 同 anonuid ,但是变成 group ID 就是了
sync: 资料同步写入到内存与硬盘当中
async: 资料会先暂存于内存当中,而非直接写入硬盘
NFS 配置实例
a). /tmp *(rw,no_root_squash) //*号表示所有的IP都可以访问
b). /tmp *(rw)
/home/public 192.168.0.*(rw) *(ro) //下面两行作用一样
/home/public 192.168.0.0/24(rw) *(ro)
c). /home/test 192.168.0.100(rw) //只对某部机器设置权限
d). /home/linux *.linux.org(rw,all_squash,anonuid=40,anongid=40) //当*.linux.org登陆此NFS主机,并且在/home/linux下面写入档案时,该档案的所有人与所有组,就会变成/etc/passwd 里面对应的UID为40的那个身份的使用者了.