Network File System是一个文件系统,而 RPC(Remote Procedure Call)是负责负责信息的传输。
## 服务说明 nfs v3
* nfsd 它是基本的NFS守护进程,主要功能是管理客户端是否能够登录服务器;
* mountd 它是RPC守护进程,主要功能是管理NFS的文件系统。当客户端顺利通过nfsd登录NFS服务器后,在使用NFS服务所提供的文件前,还必须通过文件使用权限的验证。它会读取NFS的配置文件/etc/exports来对比客户端权限。
* portmap 主要功能是进行端口映射工作。当客户端尝试连接并使用RPC服务器提供的服务(如NFS服务)时,portmap会将所管理的与服务对应的端口提供给客户端,从而使客户可以通过该端口向服务器请求服务。
Client 先和 RPC Server 链接,再和程序通信,程序在本地操作,调用内核。
NFS:由sun开发,版本NFSv1,NFSv2,NFSv3(rhel 5),NFSv4(rhel 6)
CentOS 7.4 以后,支持 NFS v4.2 不需要 rpcbind 了,但是如果客户端只支持 NFC v3 则需要 rpcbind 这个服务。
### 局限性
* 只能控制来源ip,只验证UID,不验证用户名,安全性较低;
* NFS只能工作于linux和unix
## 服务器端
```bash
# centos 5
yum -y install nfs-utils portmap
# centos 6/7 (在CentOS 6.3当中,portmap服务由rpcbind负责)
yum -y install nfs-utils
```
## NFS的常用目录
```
/etc/exports NFS服务的主要配置文件
/usr/sbin/exportfs NFS服务的管理命令
/usr/sbin/showmount 客户端的查看命令
/var/lib/nfs/etab 记录NFS分享出来的目录的完整权限设定值
/var/lib/nfs/xtab 记录曾经登录过的客户端信息
```
## @ centos 5 nfs启动3个进程
```
nfsd(nfs服务), mountd(挂载), quotad(配额)
nfsd: 2049/tcp, 2049/udp
mountd: 端口
quotad: 端口
端口半随机的,可通过配置固定端口
portmap监听端口:111/tcp,udp/111
nfs要启动先要确保portmap服务先启动
# service portmap start
```
### @ centos 7
```
# service nfs start
```
### 配置文件 /etc/exports
多个客户之间使用空白字符分隔
每个客户端后面必须跟一个小括号,里面定义了此客户访问特性,如访问权限等
```
dir 172.16.0.0/16(ro,async) 192.16.0.0/24(rw,sync)
```
nfsv4默认映射到nfsnobody用户,也可以修改
```
dir 172.16.0.0/16(ro,asyncfsid=root) 192.16.0.0/24(rw,sync,all_squash,anonuid= ,anongid=)
```
### 文件系统挂载/导出属性
```
ro: 只读。
rw: 读写
sync: 同步模式,内存中数据时时写入磁盘。
async: 不同步,把内存中数据定期写入磁盘中。
root_squash: 将root用户映射为来宾账号,限制权限,更加安全;
no_root_squash: 加上这个选项后, root 用户就会对共享的目录拥有至高的权限控制,就像是对本机的目录操作一样。不安全,不建议使用
all_squash: 所有转换为来宾帐号
anonuid, anongid: 指定映射的来宾账号的UID和GID;
```
## 查看 showmount
```
showmount -e|--exports NFS_SERVER: 查看NFS服务器“导出”的各文件系统
showmount -a|--all NFS_SERVER: 查看NFS服务器所被挂载的文件系统及其挂载的客户端对应关系列表
showmount -d|--directories NFS_SERVER: 显示NFS服务器所有导出的文件系统中被客户端挂载了文件系统列表
```
## 管理 exportfs
如果修改/etc/exports文件之后无需重启nfs,只需重新扫瞄一次文件/etc/exports,并且重新将设定加载即可;
```
-a:跟-r或-u选项同时使用,表示重新挂载所有文件系统或取消导出所有文件系统;
-r: 重新导出
-u: 取消导出
-v: 显示详细信息
```
* 重新挂载/etc/exports的设置:exportfs –avr
* 全部卸载/etc/exports的设置:exportfs –avu
## 客户端
```
yum install -y nfs-utils
客户端使用mount命令挂载
mount -t nfs NFS_SERVER:/PATH/TO/SOME_EXPORT /PATH/TO/SOMEWHRERE
若挂载后速度较慢,可使用下面的选项
mount -t nfs -o nolock,nfsvers=3 192.168.24.111:/tmp/ /opt/
默认nfsvers=4
```
让mountd和quotad等进程监听在固定端口,编辑配置文件/etc/sysconfig/nfs
## 客户端挂载参数
~~~bash
ro 以只读模式加载。
rw 以可读写模式加载。
sync 以同步方式执行文件系统的输入输出动作。
async 以非同步的方式执行文件系统的输入输出动作。
defaults 使用默认的选项。默认选项为rw、suid、dev、exec、anto nouser与async。
atime 每次存取都更新inode的存取时间,默认设置,取消选项为noatime。
noatime 每次存取时不更新inode的存取时间。
dev 可读文件系统上的字符或块设备,取消选项为nodev。
nodev 不读文件系统上的字符或块设备。
exec 可执行二进制文件,取消选项为noexec。
noexec 无法执行二进制文件。
auto 必须在/etc/fstab文件中指定此选项。执行-a参数时,会加载设置为auto的设备,取消选取为noauto。
noauto 无法使用-a参数来加载。
suid 启动set-user-identifier(设置用户ID)与set-group-identifer(设置组ID)设置位,取消选项为nosuid。
nosuid 关闭set-user-identifier(设置用户ID)与set-group-identifer(设置组ID)设置位。
user 普通用户可以执行加载操作。
nouser 普通用户无法执行加载操作,默认设置。
remount 重新加载设备。通常用于改变设备的设置状态。
rsize 读取数据缓冲大小,默认设置1048576(rhel6.6)。
wsize 写入数据缓冲大小,默认设置1048576(rhel6.6)。
fg 以前台形式执行挂载操作,默认设置。在挂载失败时会影响正常操作响应。
bg 以后台形式执行挂载操作。
hard 硬式挂载,默认设置。如果与服务器通讯失败,让试图访问它的操作被阻塞,直到服务器恢复为止。
soft 软式挂载。如果服务器通讯失败,让试图访问它的操作失败,返回一条出错消息。这项功能对于避免进程“挂”在无关紧要的安装操作上来说非常有用。
retrans=n 指定在以软方式安装的文件系统上,在返回一条出错消息之前重复发出请求的次数。
nointr 不允许用户中断,默认设置。
intr 允许用户中断被阻塞的操作(并且让它们返回一条出错消息)。
timeo=n 设置请求的超时时间(以十分之一秒为单位)。
~~~
## 固定端口
修改配置文件/etc/sysconfig/nfs
启用这几项,即可
```
LOCKD_TCPPORT=32803
LOCKD_UDPPORT=32769
RQUOTAD_PORT=875
MOUNTD_PORT=892
```
## 防火墙规则添加
```
proto port service
tcp 111 portmapper
udp 111 portmapper
udp 892 mountd
tcp 892 mountd
udp 6478 status
tcp 6478 status
udp 875 rquotad
tcp 875 rquotad
tcp 2049 nfs
udp 2049 nfs
udp 32769 nlockmgr
tcp 32769 nlockmgr
```
## 客户端开机自动挂载NFS
编辑/etc/fstab,增加
192.168.8.40:/var/shared /var/nfs nfs default,_rnetdev 0 0
_rnetdev,如果开机挂载不上此文件系统,则忽略,否则会开不了机
关于权限的分析
1. 客户端连接时候,对普通用户的检查
* a. 如果明确设定了普通用户被压缩的身份,那么此时客户端用户的身份转换为指定用户;
* b. 如果NFS server上面有同名用户,那么此时客户端登录账户的身份转换为NFS server上面的同名用户;
* c. 如果没有明确指定,也没有同名用户,那么此时 用户身份被压缩成nfsnobody;
2. 客户端连接的时候,对root的检查
* a. 如果设置no_root_squash,那么此时root用户的身份被压缩为NFS server上面的root;
* b. 如果设置了all_squash、anonuid、anongid,此时root 身份被压缩为指定用户;
* c. 如果没有明确指定,此时root用户被压缩为nfsnobody;
* d. 如果同时指定no_root_squash与all_squash 用户将被压缩为 nfsnobody,如果设置了anonuid、anongid将被压缩到所指定的用户与组;
- 目录
- 离散的内容
- IO模型
- 网卡绑定
- ssh
- 硬件测试
- 硬件
- limits
- 网络流量
- 硬盘IO
- 硬盘
- tmux
- 主机名和域名
- http_proxy
- iptables
- 内核参数
- 块设备和字符设备
- 内存
- 虚拟内存并非交换分区
- 网络延时
- 概念
- 多核压缩
- linux基础
- SSH协议
- 软件管理
- yum
- 制作本地源 yum系列
- 制作本地源 apt系列
- apt
- 在 Linux 中移除从源代码安装的程序的一种简单的方法
- 其他
- 源码编译和二进制安装后更改配置
- DNS
- bind
- 守护进程
- 特殊权限
- limit.conf配置
- 网络
- shell-ok
- 变量ok
- 数组ok
- 系统变量和环境变量
- 运算符和计算-ok
- 条件测试-ok
- 选择-ok
- shell循环-ok
- 输出echo和printf-ok
- 技巧-ok
- pre-web
- http协议
- web服务器
- Apache
- apache安装
- yum安装
- 二进制安装
- 编译安装
- httpd命令
- 运行 监控apache
- apache配置文件
- 常用配置
- MPM多处理模块
- 编译模块
- apache模块
- apache核心模块
- apache标准模块
- apache第三方模块
- 虚拟主机
- 1
- CGI-FastCGI-SSI
- 别名和重定向
- apache应用
- 301重定向
- apache防盗链
- http转化为https
- 访问时间段控制
- 控制访问目录
- 限制指定USER_AGENT
- 不同客户端访问不同网页
- apache黑名单
- httpd之禁止解析php
- 不记录css/js/img的访问日志
- 浏览器端静态缓存
- apache访问日志自动切割
- order-require
- 压缩传输
- httpd-ssl
- apache代理
- 正向代理
- 反向代理
- apache调优
- httpd压力测试工具ab
- CGI测试
- php
- php原理
- httpd和php的结合方式
- php yum安装之DSO模式
- php 编译安装之DSO模式
- php-fpm详解
- php yum安装之php-fpm模式
- php 编译安装之FastCGI模式
- php扩展之mysql
- php扩展之gd
- php扩展之pcntl
- php扩展之xcache
- php扩展之ZendGuardLoader
- phpMyAdmin
- wordpress
- 数据库-mysql
- 数据库原理
- mysql数据库原理
- mysql源码编译安装
- mysql二进制包安装
- mysql命令行工具
- 更改密码
- 数据库授权grant
- mysql日志
- 命令
- 常用
- 小命令大作为
- awk 报告生成器
- 网络命令
- 命令查找
- 压缩归档命令
- 文件管理
- 文件管理命令
- 文件查看命令
- 目录管理命令
- 用户管理命令
- 用户权限管理
- curl
- cheat
- chrony
- command
- crontab任务计划
- cut
- date
- dd
- df
- echo
- find
- grep
- hash
- iftop
- kill pkill killall
- ls
- lsmod和modprobe
- lsof
- man
- mkpasswd
- mount
- mtr
- netstat
- nmap
- nc
- NTP
- passwd
- rm
- rdate
- pv
- sar系统活动情况报告
- sed文本处理命令
- setup
- screen
- shutdown
- sort 命令
- sudo
- tcpdump
- top
- uniq
- wget
- who
- xargs
- 监控
- zabbix邮件报警
- Redis
- redis安装
- redis数据类型和操作方法
- redis持久化和配置
- redis主从配置
- php连接redis
- redis实现session共享
- 安装测试
- redis设置密码
- ELK日志分析系统
- elasticsearch
- logstash
- logstash插件
- filebeat日志收集
- kibana
- jenkins
- jenkins安装与配置
- 案例1
- 案例2
- 案例3
- 代码仓库之svn
- svn服务端配置
- 常用操作
- svn备份
- LB集群
- LVS负载均衡集群
- ipvsadm使用方法
- LVS调度方法
- NAT原理
- NAT实践
- DR原理
- DR实践
- TUN原理
- LVS持久连接
- HA集群
- HPC集群
- 共享存储
- ftp协议
- vsftpd
- NFS
- 网站架构发展
- 文件同步
- rsync基本用法
- rsync安装和使用_拉取模式
- lsyncd安装和用法
- zabbix
- zabbix服务端安装
- zabbix客户端安装
- zabbix编译安装
- zabbix监控tomcat
- zabbix监控mysql
- gitlab
- supervisor
- nsq
- ruby
- nodejs
- consul
- mesos
- zookeeper
- rwho
- 对象存储
- 工具
- rclone
- minio
- linux 性能调优
- CPU
- 第一部分 CPU
- 安全