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
- 安全