标签:inf 保存文件 res pcb emctl 获取 alt 有用 信息
一、NFS工作原理1、首先用户访问网站程序,由程序在NFS客户端上发出NFS文件存取功能的询问请求,这时NFS客户端(即执行程序的服务器)RPC服务(portmap 或rpcbind服务)就会通过网络向NFS服务端的RPC服务(即portmap或rpcbind服务)的111端口发出NFS文件存取功能的询问请求。
2、NFS服务端的RPC服务(即portmap或rpcbind服务)找到对应的已注册的NFSdaemon端口后,通知NFS客户端的RPC服务(即portmap或rpcbind服务)。
3、此时NFS客户端就可获取到正确的端口,然后就直接与NFS daemon联机存取数据了。
4、NFS客户端把数据存取成功后,返回给前端程序,告诉用户存取结果,作为网站用户,我们就完成了一次存取操作。
最终权限取决于:
访问文件的权限:取决于:运行该进程的用户属主-属组-其他人
但是远程s又不可能获知本地用户的权限
情景1:
c:有用户centos(1001) S:用户fedora(1001)
centos在本地nfs共享目录中创建的文件,看到的是属主是centos
fedora看到的是自己创建的,因为系统根据用户id来进行名称解析
root_squash:压缩root用户权限,以root用户来访问的时候,降级身份为nfsnobody //来宾账号
all_squash:全部都压缩为nfsnobody
nfsv2,nfsv3,nfsv4
nfsd:监听在一个套接字端口:tcp/2049,基于RPC工作
nfs不能实现身份认证,
rpc.mountd进程:验证用户是否有权限来进行mount
rpc.lockd:[施加锁,并将锁状态信息通知给其他主机]加锁,写的时候独占锁,防止同一文件多个用户同时写入,读用的是共享锁,读的时候不允许别人修改,但是允许读
rpc.statd:保存文件的状态信息,应对突发情况
rpc监听的大多数端口都是半随机的,例如rpc.mountd在启动的时候,先向本地的rpc服务注册某一端口,由rpc_server端帮忙挑选一个空闲端口
client请求s的rpc服务端,获取rpc.mount端口信息,然后client再访问s的rpc.mount的端口
rpc服务端的端口是固定的
rpcbind监听端口111 ;lsof -i:111查看
[root@wolf ~]# rpcinfo -p localhost //查看rpcbind服务已经启用了对NFS服务的映射
二、安装
假如局域网内提供一个中心认证主机负责用户信息的认证,例如nis,kerberous等,这样就不会存在用户权限错乱的问题了
实现:
yum -y install nft-utils //nfs是内核级服务,不需要服务端
rpm -ql nfs-utils //有一大堆的unit文件
systemctl start rpcbind //先启动这个服务
systemctl start nfs.service
mkdir /data //建议独立提供一个分区,
vim /etc/exports
/data 192.168.4.109(rw)
强烈不建议重启,因为可能某一用户正在写入
exportfs -r //重新导出文件系统,让内核重读/etc/exports
client:
showmount -e 192.168.4.118
mkdir /web/thml -p //建立本地挂载点
mount -t nfs 192.168.4.118:/data /web/thml/
cd /web/html/
touch aa //不能创建文件,root用户会被rootsquash-->nfsnobody权限压缩
权限测试
useradd -u 1111 user1 //s端
useradd -u 1111 user2 /c端
setfacl -m u:user1:rwx /data //s修改目录权限
su user2 //c
touch aa //c ;将能顾创建目录
ls -l //在s上看到是user1为属主,在c上看到是user2属主
导出的fs的格式:
/path/to/somedir Ip(export opt1,opt2) Ip(opt1,opt2)
选项:/etc/exports
Machine Name Formats:
单个主机:ipv4,ipv6,FQDN
网络:address/netmask,address/prefix
通配符: 主机名通配,*.mt.com, “*”:任意长度任意字符,“?":任意单个字符
网络组:NIS域内的主机组,@组名
匿名:使用*通配所有客户端
General Options
rw:读写 //服务读写权限和fs读写权限都要满足才可以
sync:同步写入,立即写入才返回成功
async:异步写入,提高读写性能,但是可能会导致数据丢失
root_squash:压缩root权限,默认就启用了
no_root_squash:明确不压缩,很不安全
all_squash:压缩所有用户,所有用户都被映射成nfsnobody
anonuid:映射成指定的用户账号的uid
anongid:映射成指定的用户账号的gid
ro:read-only
/home/joe pc001(rw,all_squash,anonuid=150,anongid=100)
/mydata/data 192.168.4.0/26(rw) *(ro,allsquash) //4.0网段内的主机及是rw,其他的任何主机都是ro,而且压缩为nfsnobody
showmount:
-e IP //查看s共享的目录
[root@wolf ~]# ps -ef |egrep "rpc|nfs" root 3483 2 0 17:28 ? 00:00:00 [rpciod/0] rpc 3590 1 0 17:31 ? 00:00:00 rpcbind root 3635 1 0 17:31 ? 00:00:00 rpc.rquotad //磁盘配额进程 root 3640 1 0 17:31 ? 00:00:00 rpc.mountd //权限管理验证 root 3647 2 0 17:31 ? 00:00:00 [nfsd4] root 3648 2 0 17:31 ? 00:00:00 [nfsd4_callbacks] root 3649 2 0 17:31 ? 00:00:00 [nfsd] root 3650 2 0 17:31 ? 00:00:00 [nfsd] root 3651 2 0 17:31 ? 00:00:00 [nfsd] root 3652 2 0 17:31 ? 00:00:00 [nfsd] root 3653 2 0 17:31 ? 00:00:00 [nfsd] root 3654 2 0 17:31 ? 00:00:00 [nfsd] root 3655 2 0 17:31 ? 00:00:00 [nfsd] root 3656 2 0 17:31 ? 00:00:00 [nfsd] root 3687 1 0 17:31 ? 00:00:00 rpc.idmapd //名称映射 root 3799 2717 0 17:48 pts/0 00:00:00 egrep rpc|nfs
man exports 最后有示例
注:由于是nfs,因此在挂载的时候可以指定其缓冲区的大小
mount.nfs
标签:inf 保存文件 res pcb emctl 获取 alt 有用 信息
原文地址:http://blog.51cto.com/hmtk520/2065232