NFS
NFS(Network File System)是Linux文件共享的一种基于RPC协议实现
当客户端想要访问本地挂载NFS时他先要房屋nfs文件系统,然后由nfs调用nfsd进程
NFS只认证主机,不认证用户。只要客户端与服务端具有相同用户ID的用户才能有权限访问(此用户对挂载的文件目录具有权限),默认root用户的权限映射为nfsnobady
NFS启动过程
[root@CentOS /]# service nfsstart
Starting NFS services: [ OK ]
Starting NFS quotas: [ OK ]
Starting NFS mountd: [ OK ] 主机认证
Stopping RPC idmapd: [ OK ] 对比并映射User ID
Starting RPC idmapd: [ OK ]
Starting NFS daemon: [ OK ]
NFS监听在tcp/udp:2049
RPC监听在tcp/udp:111
netstat –tuanlp | grep “rpc”查看相关进程的端口
[root@CentOS ~]# rpcinfo -p192.168.1.113 在客户端查看服务端的RPC端口信息,
[root@CentOS ~]# rpcinfo -p192.168.1.113 program vers proto port service 100000 4 tcp 111 portmapper 100000 3 tcp 111 portmapper 100000 2 tcp 111 portmapper 100000 4 udp 111 portmapper 100000 3 udp 111 portmapper 100000 2 udp 111 portmapper 100024 1 udp 52347 status 100024 1 tcp 45325 status 100011 1 udp 875 rquotad 100011 2 udp 875 rquotad 100011 1 tcp 875 rquotad 100011 2 tcp 875 rquotad 100005 1 udp 44829 mountd 100005 1 tcp 53454 mountd 100005 2 udp 44720 mountd 100005 2 tcp 46711 mountd 100005 3 udp 35786 mountd 100005 3 tcp 51132 mountd 100003 2 tcp 2049 nfs 100003 3 tcp 2049 nfs 100003 4 tcp 2049 nfs 100227 2 tcp 2049 nfs_acl 100227 3 tcp 2049 nfs_acl 100003 2 udp 2049 nfs 100003 3 udp 2049 nfs 100003 4 udp 2049 nfs 100227 2 udp 2049 nfs_acl 100227 3 udp 2049 nfs_acl 100021 1 udp 48701 nlockmgr 100021 3 udp 48701 nlockmgr 100021 4 udp 48701 nlockmgr 100021 1 tcp 41514 nlockmgr 100021 3 tcp 41514 nlockmgr 100021 4 tcp 41514 nlockmgr
[root@CentOS /]# rpcinfo 或者 rpcinfo -p 查看自己的RPC服务端口
[root@CentOS /]# rpcinfo program versionnetid address service owner 100000 4 tcp6 ::.0.111 portmapper superuser 100000 3 tcp6 ::.0.111 portmappersuperuser 100000 4 udp6 ::.0.111 portmapper superuser 100000 3 udp6 ::.0.111 portmapper superuser 100000 4 tcp 0.0.0.0.0.111 portmapper superuser 100000 3 tcp 0.0.0.0.0.111 portmapper superuser 100000 2 tcp 0.0.0.0.0.111 portmapper superuser 100000 4 udp 0.0.0.0.0.111 portmapper superuser 100000 3 udp 0.0.0.0.0.111 portmappersuperuser 100000 2 udp 0.0.0.0.0.111 portmapper superuser 100000 4 local /var/run/rpcbind.sock portmappersuperuser 100000 3 local /var/run/rpcbind.sock portmappersuperuser 100024 1 udp 0.0.0.0.204.123 status 29 100024 1 tcp 0.0.0.0.177.13 status 29 100024 1 udp6 ::.188.32 status 29 100024 1 tcp6 ::.193.29 status 29 100011 1 udp 0.0.0.0.3.107 rquotad superuser 100011 2 udp 0.0.0.0.3.107 rquotad superuser 100011 1 tcp 0.0.0.0.3.107 rquotad superuser 100011 2 tcp 0.0.0.0.3.107 rquotad superuser 100005 1 udp 0.0.0.0.175.29 mountd superuser 100005 1 tcp 0.0.0.0.208.206 mountd superuser 100005 1 udp6 ::.195.129 mountd superuser 100005 1 tcp6 ::.197.121 mountd superuser 100005 2 udp 0.0.0.0.174.176 mountd superuser 100005 2 tcp 0.0.0.0.182.119 mountd superuser 100005 2 udp6 ::.207.17 mountd superuser 100005 2 tcp6 ::.219.19 mountd superuser 100005 3 udp 0.0.0.0.139.202 mountd superuser 100005 3 tcp 0.0.0.0.199.188 mountd superuser 100005 3 udp6 ::.131.233 mountd superuser 100005 3 tcp6 ::.154.184 mountd superuser 100003 2 tcp 0.0.0.0.8.1 nfs superuser 100003 3 tcp 0.0.0.0.8.1 nfs superuser 100003 4 tcp 0.0.0.0.8.1 nfs superuser 100227 2 tcp 0.0.0.0.8.1 nfs_acl superuser 100227 3 tcp 0.0.0.0.8.1 nfs_acl superuser 100003 2 udp 0.0.0.0.8.1 nfs superuser 100003 3 udp 0.0.0.0.8.1 nfs superuser 100003 4 udp 0.0.0.0.8.1 nfs superuser 100227 2 udp 0.0.0.0.8.1 nfs_acl superuser 100227 3 udp 0.0.0.0.8.1 nfs_acl superuser 100003 2 tcp6 ::.8.1 nfs superuser 100003 3 tcp6 ::.8.1 nfs superuser 100003 4 tcp6 ::.8.1 nfs superuser 100227 2 tcp6 ::.8.1 nfs_acl superuser 100227 3 tcp6 ::.8.1 nfs_acl superuser 100003 2 udp6 ::.8.1 nfs superuser 100003 3 udp6 ::.8.1 nfs superuser 100003 4 udp6 ::.8.1 nfs superuser 100227 2 udp6 ::.8.1 nfs_acl superuser 100227 3 udp6 ::.8.1 nfs_acl superuser 100021 1 udp 0.0.0.0.190.61 nlockmgr superuser 100021 3 udp 0.0.0.0.190.61 nlockmgr superuser 100021 4 udp 0.0.0.0.190.61 nlockmgr superuser 100021 1 tcp 0.0.0.0.162.42 nlockmgr superuser 100021 3 tcp 0.0.0.0.162.42 nlockmgr superuser 100021 4 tcp 0.0.0.0.162.42 nlockmgr superuser 100021 1 udp6 ::.140.240 nlockmgr superuser 100021 3 udp6 ::.140.240 nlockmgr superuser 100021 4 udp6 ::.140.240 nlockmgr superuser 100021 1 tcp6 ::.220.177 nlockmgr superuser 100021 3 tcp6 ::.220.177 nlockmgr superuser 100021 4 tcp6 ::.220.177 nlockmgr superuser
从这些端口信息可以看出RPC某些相关进程是使用的随机端口,比如mountd进程启动他会向rpcbind进程申请没有没被其他进程使用的端口号。
查看nfs挂载详情
[root@CentOS ~]# showmount -e192.168.1.113 显示服务器上共享的NFS文件系统列表
Export list for192.168.1.113:
/web 192.168.1.0/24
showmount -d: 显示当前主机所共享的NFS文件系统中,有哪些已经被客户端挂载
showmount -a: 显示当前主机所共享的NFS文件系统中,每个挂载连接;
NFS 配置
1)vim /etc/exportfs
文件目录 主机(权限)
/web 192.168.1.0/24(rw) nfs共享选项:
rw: 读写
ro:
secure: 默认已经启用;限制客户端只能使用小于1024的端口访问请求;若不加限制,则使用insecure
async: 异步写入,性能好,数据可靠性差;
sync: 同步写入,性能差,数据可靠性高;
wdelay: 写入延迟;no_wdelay
nohide: 不隐藏要导出的目录中挂载的其它nfs;
no_acl: 关闭nfs的acl功能;
root_squash: 压缩root权限, nfsnobody
no_root_squash: 不压缩root权限
all_squash:所有用户都压缩
anonuid=nfsuser,anongid=nfsgroup:使用指定的用户帐号做匿名用户帐号;
2)挂载nfs文件系统
[root@CentOS ~]#mount -t nfs 192.168.1.113:/web /mnt
[root@CentOS ~]#mount
/dev/mapper/vg_centos-lv_rooton / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts typedevpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs(rw)
/dev/sda1 on /boot type ext4(rw)
none on /proc/sys/fs/binfmt_misctype binfmt_misc (rw)
sunrpc on/var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
192.168.1.113:/webon /mnt type nfs (rw,vers=4,addr=192.168.1.113,clientaddr=192.168.1.112)
3) 用户访问权限的设定
nfs只做主机 认证不做用户认证。
服务端的设置
[root@CentOS /]# setfacl -mmictiger:rwx /web
[root@CentOS /]# getfacl/web/
getfacl: Removing leading '/'from absolute path names
# file: web/
# owner: root
# group: root
user::rwx
user:mictiger:rwx
group::r-x
mask::rwx
other::r-x
[root@CentOS /]# id mictiger
uid=501(mictiger)gid=501(mictiger) groups=501(mictiger)
客户端设置:准备一个和服务端mictiger ID号一样的用户
[root@CentOS ~]# useradd -u501 tom
[root@CentOS ~]# id tom
uid=501(tom) gid=501(tom) 组=501(tom)
[root@CentOS ~]# echo"pwd@123" | passwd --stdin tom
更改用户 tom 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
4)用户访问
以root用户访问
[root@CentOS mnt]# ll
总用量 12
-rw-r--r-- 1 nobody nobody781 10月 21 15:34 fstab
-rw-r--r-- 1 root root 15 6月 14 14:16 index.html
-rw-r--r-- 1 root root 21 6月 12 03:35 index.php
[root@CentOS mnt]# cp/etc/inittab ./
cp: 无法创建普通文件"./inittab": 权限不够
没有操作权限,这是因为此时root用户的权限变成了nfsnobady用户的权限
[root@CentOS web]# grep"^nfs" /etc/passwd
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
以与服务端用户ID号相同的用户访问
[tom@CentOS mnt]$ cp/etc/fstab ./
[tom@CentOS mnt]$ ll
总用量 12
-rw-r--r-- 1 nobody nobody781 10月 21 2014 fstab
-rw-r--r-- 1 root root 15 6月 14 14:16 index.html
-rw-r--r-- 1 root root 21 6月 12 03:35 index.php
在服务端查看刚刚被复制的文件fstab
[root@CentOS web]# ll
total 12
-rw-r--r--. 1 mictiger mictiger 781 Oct 21 15:34 fstab
-rw-r--r--. 1 root root 15 Jun 14 14:16 index.html
-rw-r--r--. 1 root root 21 Jun 12 03:35 index.php
服务端idmapd进程将用户tom映射为mictiger。