NFS:网络文件系统 一般都工作在内核空间
任何程序只要我们能自己执行命令的一定是工作在用户空间,因为内核空间的程序只有内核自我能够管理,,除非我
们使用接口与内核进行交互。(不准,自己就这么理解吧)
NFS:通过RPC来连接两个主机
PRC :一种编程技术,协议分为服务器端和客户端,他俩之间能够连接2个主机,从而使俩主机之间看上去就像一个主机一样,由此可完成两个主机间的进程通信(就好像本地两个进程间通信一样)
本地进程间通信或者进程和内核进行通信:通过IPC机制或系统调用,或函数调用。(IPC机制是指:信号量,共享内存,消息队列)
NFS:只能验证IP不能验证用户名 protmap 监控TCP/UDP的111端口
NFS:启动3个进程 NFSD(nfs的主服务),MOUNTED(接受nfs挂载请求的),quotad 限定客户端在本地可以使用对打磁盘空间的。
nfsd:2049/tcp 2049/udp
mounted与quotad的端口都是半随机的(之所以称为半随机是因为他不是自己打开的,是像rpc注册使用的,是rpc帮他选取的)
nfslock:锁 (每个用户向nfs写文件时都要像nfs申请加锁,每个文件的锁,是内核持有的锁)
nfs配置文件:/etc/exports 在配置文件最后添加客户端信息
/path/to/somedir/ ClIENT LIST
多个客户之间用空白字符分隔
每个客户端后面必须立即根一个小括号,里面定义了次客户的访问特性,如访问权限等
如:
172.16.0.0/16(ro,async,root_squash) 192.168.0.0/24(rw,sync)
root_squash:将root用户映射为来宾账号:默认启用此选项
no_root_sqush:不将root用户映射为来宾账号
all_squash:将所有账号映射为来宾账号
anonuid,anongid:指定映射的来宾账号的uid与gid
//--------------------------------------------------------------------------------
debian安装nfs
安装nfs服务器端
apt-get install nfs-kernel-server
rpcinfo -p localhost 查看rpc起了哪些服务与端口
vim /etc/exports
/shared 192.168.11.199(ro,async) #在最后添加你要共享的文件路径,与共享给那些主机
root@debian:/home/lyw# /etc/init.d/nfs-kernel-server restart 重启nfs服务
root@debian:/home/lyw# showmount -e 192.168.11.99 查看服务器上给那些主机共享了什么目录
安装nfs客户端
apt-get install nfs-common
showmount -e 192.168.11.99 查看服务器的共享目录
mdkir -p /mnt/nfs 创建挂载文件夹
mount -t nfs 192.168.11.99:/shared /mnt/nfs 将共享目录挂载到文件夹下
服务器端向共享目录里cp些文件 在客户端查看 看是否能看到
showmount -a 服务器端ip或主机名 查看都有哪些客户端挂载在服务器上及客户端对应列表
(根据nfs的版本不同 命令可能显示的结果不一样 如 nfs4系统就显示不出来 有哪些客户端挂载在服务器上)
开机自动挂载
vim /etc/fastab
192.168.11.99:/shared /mnt/nfs nfs defaults,rnetdev 0 0
rnetdev (指定的网络设备 开机时如果挂载不上 就自动忽略掉 ,不加的话 如果没挂上,则机器就起不来了)
//-------------------------------------------------------------------------------------------------------------------------------------------
服务器端:
把所有来访用户都映射为uid为510的账号
服务器端:
把所有来访用户都映射为uid为510的账号
root@debian:/shared# useradd -u 510 nfstest
root@debian:/shared# touch ./nfstest
root@debian:/shared# chown nfstest.nfstest ./nfstest
root@debian:/shared# vim /etc/exports
/shared 192.168.11.199(rw,async,all_squash,anonuid=510,anongid=510)
root@debian:/shared# exportfs -ra
exportfs命令:
-a: 根-r或-u选项同时使用,表示重新挂载所有文件系统或取消导出文件系统
-r:重新导出
-u:取消导出
-v:显示详细信息
客户端:
先卸载 root@zabbix:/home/lyw# umount /mnt/nfs
再挂载 root@zabbix:/home/lyw# mount -t nfs 192.168.11.99:/shared /mnt/nfs
root@zabbix:/mnt/nfs# ls -l
这样所有客户端的访问账号,都对应服务器端的uid为510的账号,服务器uid=510账号对共享目录里的文件有什么权限,客户端登陆的账号就对这些文件有什么权限