在windows中经常使用网上邻居的功能来实现在局域网中共享文件,方便了使用。那么在linux中是否有同样的功能呢?结果是肯定的。
在linux系统上我们可以使用nfs服务来实现局域网中的共享。nfs服务工作方法如下:
首先服务器启动服务,service nfs start。
nfs服务(监听2049端口)的主进程是nfsd同时要启动四个进程portmap,rpc.mountd,lockd,rpc.quotad,rpc.statd这几个进程。
nfs服务启动的进程都是同时监听tcp/udp协议。其几个进程的作用分别如下:
1. portmap监听端口111,提供的服务是给予其他三个进程提供随机端口。rpc.mountd确定客户端是否能够挂载分区。
2. rpc.mountd,提供让服务器挂载的接口
3. locked提供文件锁,在有多个用户挂载同个文件时,保证数据的同步性。其方法为:对问价进行加锁,不允许多个用户同时修改一个文件。
4. rpc.quotad是在挂载时检查是否有磁盘配额,同时并启用之。
5. rpc.statd和locked联合使用,共同保证数据的完整性和一致性
其工作过程如下:
client à服务器的portmapà得到mountd端口à连接服务器的mountd端口à mountd查找exports文件同时根据rpc.quotad的限制给予client权限(句柄)à访问server的nfsd进程,挂载分区
在实现共享时分以下几步:
1. 首先在服务器上配置所要共享的文件夹
2. 启动服务,如果服务已经启动使用命令export -arv重新读取一下共享的文件夹。
3. 在客户端中创建目录,并挂载服务器中共享的文件夹
以下为配置使用的命令:
是用命令 rpcinfo -p 可以查看nfs对应进程启动的端口号
编辑配置文件/etc/exports:格式如下:
用户列表可以是单个用户,也可以是一个网段的用户,或者是所有用户。
常见的选项如:rw,async,root_squash,no_root_squash,all_squash含义如下
rw,允许挂载的文件及可读可写,但最终的权限是与文件本身权限的交集。
async,允许异步写入
root_squash,当以root用户的登录时将其切换至nobody用户的权限。
no_root_squash,直接以root用户登录对方主机。
all_squash,任何用户登录上之后都切换到nobody用户。
当配置好上述文件后重启nfs服务,或者执行命令exortfs -arv让服务器重新读取共享的目录。
查看共享的文件夹:showmount -e SERVER-IP
如果看到服务器共享的文件夹,使用命令 mount -t nfs SERVER:/share/dir /local/dir将其挂载。然后切换至目录查看,是否挂载成功。
当你切换至挂载的目录时并创建目录时,文件的属主,属组又是谁呢?这就是nfs服务的一个缺陷:nfs服务是以UID号来区分用户的身份的,只要客户机上当前用户与服务器上的的一个用户UID相同时,就以服务区上的那个用户的身份运行。这样就存在一种情况:本地的root用户拥有了服务上root用户的权限,所以在/etc/exports中最好加上root_squash,以保证其文件的安全性。
nfs的缺点:
1. 产生的端口是随即的
2. 基于IP地址的验证
3. 完全的相信客户端
结局端口的问题可以通过更改配置文件的方法:
修改/etc/sysconfig/nfs
通过修改以上的几行内容来规定端口,在选取端口时尽量使用不常用的端口避免冲突。
解决对身份的验证,可以通过NIS或KERBOROS这将在后面的文章中介绍