運維進階:文件共享服務全攻略

1、瞭解一下

1.NFS前端

NFS(Network File System)即網絡文件系統,是FreeBSD支持的文件系統中的一種,它容許網絡中的計算機之間經過TCP/IP網絡共享資源。在NFS的應用中,本地NFS的客戶端應用能夠透明地讀寫位於遠端NFS服務器上的文件,就像訪問本地文件同樣。linux

好處:ios

  • 節省本地存儲空間,將經常使用的數據存放在一臺NFS服務器上且能夠經過網絡訪問,那麼本地終端將能夠減小自身存儲空間的使用。
  • 用戶不須要在網絡中的每一個機器上都建有Home目錄,Home目錄能夠放在NFS服務器上且能夠在網絡上被訪問使用。
  • 一些存儲設備如軟驅、CDROM和Zip(一種高儲存密度的磁盤驅動器與磁盤)等均可以在網絡上被別的機器使用。這能夠減小整個網絡上可移動介質設備的數量。

.
.web

2.Sambavim

Samba是在Linux和UNIX系統上實現SMB協議的一個免費軟件,由服務器及客戶端程序構成。SMB(Server Messages Block,信息服務塊)是一種在局域網上共享文件和打印機的一種通訊協議,它爲局域網內的不一樣計算機之間提供文件及打印機等資源的共享服務。SMB協議是客戶機/服務器型協議,客戶機經過該協議能夠訪問服務器上的共享文件系統、打印機及其餘資源。經過設置「NetBIOS over TCP/IP」使得Samba不但能與局域網絡主機分享資源,還能與全世界的電腦分享資源。windows

好處:後端

  • 分享檔案與打印機服務;
  • 提供使用者登入 SAMBA 主機時的身份認證,以提供不一樣身份者的個別數據;
  • 進行 Windows 網絡上的主機名稱解析 (NetBIOS name)
  • 進行裝置的分享 ( 例如 Zip, CDROM... )

.
.centos

3.FTP瀏覽器

FTP 是File Transfer Protocol(文件傳輸協議)的英文簡稱,而中文簡稱爲「文傳協議」。用於Internet上的控制文件的雙向傳輸。同時,它也是一個應用程序(Application)。基於不一樣的操做系統有不一樣的FTP應用程序,而全部這些應用程序都遵照同一種協議以傳輸文件。在FTP的使用當中,用戶常常遇到兩個概念:"下載"(Download)和"上傳"(Upload)。"下載"文件就是從遠程主機拷貝文件至本身的計算機上;"上傳"文件就是將文件從本身的計算機中拷貝至遠程主機上。服務器

好處:

  • 分享文件和資料
  • 用戶訪問控制,身份認證
  • 多平臺能夠訪問ftp服務器,好比:Linux,Windows,Mac os等等
  • 定向共享文件,文件訪問權限設置
  • 限制登陸用戶的根目錄

.
.
.

2、動手實現

1.NFS
1.1語法:

nfsstat(選項)
-s:僅列出NFS服務器端狀態;
-c:僅列出NFS客戶端狀態;
-n:僅列出NFS狀態,默認顯示nfs客戶端和服務器的狀態;
-2:僅列出NFS版本2的狀態;
-3:僅列出NFS版本3的狀態;
-4:僅列出NFS版本4的狀態;
-m:打印以加載的nfs文件系統狀態;
-r:僅打印rpc狀態。

1.2 安裝

[root@linuxview ~]# yum install -y nfs-utils

1.3配置

NFS的經常使用目錄
/etc/exports                           NFS服務的主要配置文件
/usr/sbin/exportfs                   NFS服務的管理命令
/usr/sbin/showmount              客戶端的查看命令
/var/lib/nfs/etab                      記錄NFS分享出來的目錄的完整權限設定值
/var/lib/nfs/xtab                      記錄曾經登陸過的客戶端信息

[root@linuxview ~]# vim /etc/exports
[root@linuxview ~]# cat /etc/exports
/server/source  192.168.0.0/16(rw,no_root_squash,sync)
[root@linuxview ~]# systemctl restart nfs
[root@linuxview ~]# cd /server/source/
[root@linuxview source]# touch linuxview.txt
[root@linuxview source]# echo hello >> linuxview.txt 
[root@linuxview source]# ls
linuxview.txt
[root@linuxview source]# systemctl status nfs
● nfs-server.service - NFS server and services
   Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled; vendor preset: disabled)
   Active: active (exited) since Thu 2018-09-13 22:36:14 CST; 6s ago
  Process: 2695 ExecStopPost=/usr/sbin/exportfs -f (code=exited, status=0/SUCCESS)
  Process: 2692 ExecStopPost=/usr/sbin/exportfs -au (code=exited, status=0/SUCCESS)
  Process: 2690 ExecStop=/usr/sbin/rpc.nfsd 0 (code=exited, status=0/SUCCESS)
  Process: 2715 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS)
  Process: 2708 ExecStartPre=/bin/sh -c /bin/kill -HUP `cat /run/gssproxy.pid` (code=exited, status=0/SUCCESS)
  Process: 2707 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
 Main PID: 2715 (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/nfs-server.service

Sep 13 22:36:14 linuxview systemd[1]: Starting NFS server and services...
Sep 13 22:36:14 linuxview systemd[1]: Started NFS server and services.
[root@linuxview source]#

1.4 客戶端掛載

[root@web2 ~]# showmount -e 192.168.1.9
Export list for 192.168.1.9:
/server/source 192.168.0.0/16
[root@web2 ~]# df
Filesystem              1K-blocks    Used Available Use% Mounted on
/dev/mapper/centos-root  17811456 2445572  15365884  14% /
devtmpfs                  1919556       0   1919556   0% /dev
tmpfs                     1931784       4   1931780   1% /dev/shm
tmpfs                     1931784   11824   1919960   1% /run
tmpfs                     1931784       0   1931784   0% /sys/fs/cgroup
/dev/sda1                 1038336  145092    893244  14% /boot
tmpfs                      386360       0    386360   0% /run/user/0
[root@web2 ~]# mount -t nfs 192.168.1.9:/server/source  /mnt/
[root@web2 ~]# df
Filesystem                 1K-blocks    Used Available Use% Mounted on
/dev/mapper/centos-root     17811456 2445592  15365864  14% /
devtmpfs                     1919556       0   1919556   0% /dev
tmpfs                        1931784       4   1931780   1% /dev/shm
tmpfs                        1931784   11828   1919956   1% /run
tmpfs                        1931784       0   1931784   0% /sys/fs/cgroup
/dev/sda1                    1038336  145092    893244  14% /boot
tmpfs                         386360       0    386360   0% /run/user/0
192.168.1.9:/server/source  17811456 2445312  15366144  14% /mnt
[root@web2 ~]# cd /mnt/
[root@web2 mnt]# ls
linuxview.txt
[root@web2 mnt]# cat linuxview.txt 
hello
[root@web2 mnt]#

1.5 參數說明

exports文件的編寫格式
<輸出目錄> [客戶端1 選項(訪問權限,用戶映射,其餘)] [客戶端2 選項(訪問權限,用戶映射,其餘)]
輸出目錄爲NFS目錄,客戶端爲要鏈接到NFS的客戶端,訪問權限指客戶端的操做權限,用戶映射能夠限制用戶權限

客戶端經常使用的指定方式
指定ip地址的主機 192.168.0.200
指定子網中的全部主機 192.168.0.0/24
指定域名的主機 a.liusuping.com
指定域中的全部主機 .liusuping.com
全部主機

訪問權限選項
設置輸出目錄只讀 ro
設置輸出目錄讀寫 rw
用戶映射選項
all_squash 將遠程訪問的全部普通用戶及所屬組都映射爲匿名用戶或用戶組(nfsnobody);
no_all_squash 與all_squash取反(默認設置);
root_squash 將root用戶及所屬組都映射爲匿名用戶或用戶組(默認設置);
no_root_squash 與rootsquash取反;
anonuid=xxx 將遠程訪問的全部用戶都映射爲匿名用戶,並指定該用戶爲本地用戶(UID=xxx);
anongid=xxx 將遠程訪問的全部用戶組都映射爲匿名用 戶組帳戶,並指定該匿名用戶組帳戶爲本地用戶組帳戶(GID=xxx);
其它選項
secure 限制客戶端只能從小於1024的tcp/ip端口鏈接nfs服務器(默認設置);
insecure 容許客戶端從大於1024的tcp/ip端口鏈接服務器;
sync 將數據同步寫入內存緩衝區與磁盤中,效率低,但能夠保證數據的一致性;
async 將數據先保存在內存緩衝區中,必要時才寫入磁盤;
wdelay 檢查是否有相關的寫操做,若是有則將這些寫操做 一塊兒執行,這樣能夠提升效率(默認設置);
no_wdelay 如有寫操做則當即執行,應與sync配合使用;
subtree 若輸出目錄是一個子目錄,則nfs服務器將檢查其父目錄的權限(默認設置);
no_subtree 即便輸出目錄是一個子目錄,nfs服務器也不檢查其父目錄的權限,這樣能夠提升效率;

2.Samba
2.1 安裝

[root@linuxview ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
[root@linuxview ~]# uname -a
Linux linuxview 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
[root@linuxview ~]# getenforce
Disabled
[root@linuxview ~]# yum install -y samba samba-client samba-swat

2.2 共享文件

[root@linuxview ~]# useradd linuxview
[root@linuxview ~]# smbpasswd -a linuxview
New SMB password:
Retype new SMB password:
Added user linuxview.
[root@linuxview ~]# vim /etc/samba/smb.conf
[smbshare]
comment = share
path = /server/data
browseable = yes
writable = yes
available = yes
admin users = linuxview
valid users = linuxview
public = yes
[root@linuxview ~]# mkdir -p /server/data
[root@linuxview ~]# systemctl restart  smb
[root@linuxview ~]# systemctl status  smb
● smb.service - Samba SMB Daemon
   Loaded: loaded (/usr/lib/systemd/system/smb.service; disabled; vendor preset: disabled)
   Active: active (running) since Sun 2018-09-16 13:57:17 CST; 3s ago
 Main PID: 28641 (smbd)
   Status: "smbd: ready to serve connections..."
   CGroup: /system.slice/smb.service
           ├─28641 /usr/sbin/smbd --foreground --no-process-group
           ├─28643 /usr/sbin/smbd --foreground --no-process-group
           ├─28644 /usr/sbin/smbd --foreground --no-process-group
           └─28645 /usr/sbin/smbd --foreground --no-process-group

Sep 16 13:57:17 linuxview systemd[1]: Starting Samba SMB Daemon...
Sep 16 13:57:17 linuxview smbd[28641]: [2018/09/16 13:57:17.272004,  0] ../lib/u...y)
Sep 16 13:57:17 linuxview smbd[28641]:   STATUS=daemon 'smbd' finished starting ...ns
Sep 16 13:57:17 linuxview systemd[1]: Started Samba SMB Daemon.
Hint: Some lines were ellipsized, use -l to show in full.

2.3 客戶端掛載
Windows訪問
運維進階:文件共享服務全攻略

Linux訪問掛載

[root@client ~]# smbclient -U linuxview //192.168.1.9/smbshare
Enter SAMBA\linuxview's password: 
Try "help" to get a list of possible commands.
smb: \> ls 
  .                                   D        0  Sun Sep 16 17:59:15 2018
  ..                                  D        0  Sun Sep 16 13:50:31 2018
  test                                N        0  Sun Sep 16 17:05:39 2018

        17811456 blocks of size 1024. 15328676 blocks available

掛載文件
[root@client /]# #mount  //192.168.1.9/smbshare  /mnt -o username=linuxview
[root@client /]# df
Filesystem              1K-blocks    Used Available Use% Mounted on
/dev/mapper/centos-root  17811456 2472244  15339212  14% /
devtmpfs                  1919556       0   1919556   0% /dev
tmpfs                     1931784       4   1931780   1% /dev/shm
tmpfs                     1931784   11836   1919948   1% /run
tmpfs                     1931784       0   1931784   0% /sys/fs/cgroup
/dev/sda1                 1038336  145092    893244  14% /boot
tmpfs                      386360       0    386360   0% /run/user/0
[root@client /]# mount  //192.168.1.9/smbshare  /mnt -o username=linuxview
Password for linuxview@//192.168.1.9/smbshare:  ******
[root@client /]# df
Filesystem              1K-blocks    Used Available Use% Mounted on
/dev/mapper/centos-root  17811456 2472244  15339212  14% /
devtmpfs                  1919556       0   1919556   0% /dev
tmpfs                     1931784       4   1931780   1% /dev/shm
tmpfs                     1931784   11836   1919948   1% /run
tmpfs                     1931784       0   1931784   0% /sys/fs/cgroup
/dev/sda1                 1038336  145092    893244  14% /boot
tmpfs                      386360       0    386360   0% /run/user/0
//192.168.1.9/smbshare   17811456 2482316  15329140  14% /mnt
[root@client /]# cd /mnt/
[root@client mnt]# ls
test
[root@client mnt]#

2.4 Samba共享目錄下操做命令

smb: \> help 
?              allinfo        altname        archive        backup         
blocksize      cancel         case_sensitive cd             chmod          
chown          close          del            deltree        dir            
du             echo           exit           get            getfacl        
geteas         hardlink       help           history        iosize         
lcd            link           lock           lowercase      ls             
l              mask           md             mget           mkdir          
more           mput           newer          notify         open           
posix          posix_encrypt  posix_open     posix_mkdir    posix_rmdir    
posix_unlink   posix_whoami   print          prompt         put            
pwd            q              queue          quit           readlink       
rd             recurse        reget          rename         reput          
rm             rmdir          showacls       setea          setmode        
scopy          stat           symlink        tar            tarmode        
timeout        translate      unlock         volume         vuid           
wdel           logon          listconnect    showconnect    tcon           
tdis           tid            logoff         ..             !              
smb: \>

3.FTP
3.1 安裝
[root@linuxview ~]# yum install -y vsftpd

3.2 建立ftp用戶

[root@linuxview ~]# useradd ftpuser
[root@linuxview ~]# passwd ftpuser
Changing password for user ftpuser.
New password: 
BAD PASSWORD: The password is a palindrome
Retype new password: 
passwd: all authentication tokens updated successfully.
[root@linuxview ~]# getenforce
Disabled
[root@linuxview ~]#

3.3 啓動ftp服務

[root@linuxview ~]# service vsftpd restart 
Shutting down vsftpd:                                      [  OK  ]
Starting vsftpd for vsftpd:                                [  OK  ]
[root@linuxview ~]# ps -aux |grep vsftpd
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
root       2587  0.0  0.0  52124   812 ?        Ss   21:34   0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root       2591  0.0  0.0 103324   856 pts/0    S+   21:35   0:00 grep vsftpd
[root@linuxview ~]#

3.4 客戶端訪問並掛載
瀏覽器訪問:
運維進階:文件共享服務全攻略

運維進階:文件共享服務全攻略

命令行訪問:
運維進階:文件共享服務全攻略

3、原理分析

1.NFS

NFS 的基本原則是「允許不一樣的客戶端及服務端經過一組RPC分享相同的文件系統」,它是獨立於操做系統,允許不一樣硬件及操做系統的系統共同進行文件的分享。

  NFS在文件傳送或信息傳送過程當中依賴於RPC協議。RPC,遠程過程調用 (Remote Procedure Call) 是能使客戶端執行其餘系統中程序的一種機制。NFS自己是沒有提供信息傳輸的協議和功能的,但NFS卻能讓咱們經過網絡進行資料的分享,這是由於NFS使用了一些其它的傳輸協議。而這些傳輸協議用到這個RPC功能的。能夠說NFS自己就是使用RPC的一個程序。或者說NFS也是一個RPC SERVER。因此只要用到NFS的地方都要啓動RPC服務,不管是NFS SERVER或者NFS CLIENT。這樣SERVER和CLIENT才能經過RPC來實現PROGRAM PORT的對應。能夠這麼理解RPC和NFS的關係:NFS是一個文件系統,而RPC是負責負責信息的傳輸。

工做流程原理:
運維進階:文件共享服務全攻略

當訪問程序經過NFS客戶端向NFS服務端存取文件時,其請求數據流程以下幾點:
首先用戶訪問網站程序,由程序在NFS客戶端上發出NFS文件存取功能的詢問請求,這時NFS客戶端(即執行程序的服務器)RPC服務(portmap 或rpcbind服務)就會經過網絡向NFS服務端的RPC服務(即portmap或rpcbind服務)的111端口發出NFS文件存取功能的詢問請求。
NFS服務端的RPC服務(即portmap或rpcbind服務)找到對應的已註冊的NFSdaemon端口後,通知NFS客戶端的RPC服務(即portmap或rpcbind服務)。
此時NFS客戶端就可獲取到正確的端口,而後就直接與NFS daemon聯機存取數據了。
NFS客戶端把數據存取成功後,返回給前端程序,告訴用戶存取結果,做爲網站用戶,咱們就完成了一次存取操做。

因爲NFS的各項功能都須要向RPC服務(即portmap或rpcbind)註冊,因此RPC服務(即portmap或rpcbind服務)才能獲取到NFS服務的各項對應的端口號(portnumber)、PID、NFS在主機所監聽的IP等,而NFS客戶端纔可以經過向RPC服務(即portmap或rpcbind服務)詢問從而找到正確的端口。也就是說,NFS須要有RPC服務(即portmap或rpc服務),NFS服務只需在服務端後於RPC服務啓動,客戶端無需啓動NFS服務。
NFS的rpc服務,在CentOS5.X下名稱爲portmap,在CentOS6.x下名稱爲rpcbind。

2.Samba

SAMBA主要提供的是SMB/CIFS或者NETBIOS協議的。
因此只要使用了SAMBA,就能實現讓Linux出如今Windows的網上鄰居里,或者,讓Windows的文件共享在Linux上--
一旦在linux上安裝以後,有兩個主要進程:
1.nmbd :提供NETBIOS 名稱解析的
2.smdb : 提供文件共享的。

而因爲NETBIOS協議對於windows來說監聽TCP的139端口和UDP的137,138端口 ,因此nmbd在linux上模擬出了udp的137和138端口,以及tcp的139端口,smdb上模擬出 tcp的445端口。而SAMBA將在Linux上同時監聽這4個端口。

主要部分
兩個守護程序:smbd 和 nmbd(對客戶端提供NetBIOS名服務)
配置文件:/etc/smb.conf
使用工具:smbclient,smbstatus,smbmount,smbumount,smbprint,smbprint.sysv,smbrun
samba的啓動腳本在/etc/rc.d/init.d/smb

3.FTP

FTP的傳輸使用的是TCP封包協議。

FTP服務器使用了兩個聯機,分別是:
命令信道
數據流通道(ftp-data)

兩個聯機通道的關係是怎麼樣的?以FTP預設的主動式(active)聯機來作說明:
主動指的是FTP服務器主動聯機客戶端,做爲數據通道;
運維進階:文件共享服務全攻略

創建命令通道的聯機
客戶端會隨機取一個大於 1024 以上的端口 (port AA) 來與 FTP服務器端的 port 21 達成聯機, 這個過程固然TCP三次握手了!
達成聯機後客戶端即可以透過這個聯機來對 FTP 服務器下達指令, 包括查詢文件名、下載、上傳等指令
通知 FTP 服務器端,使用 active 且告知鏈接的端口號
客戶端在須要數據的狀況下,會告知服務器端要用什麼方式來聯機,若是是主動式 (active) 聯機時, 客戶端會先隨機啓用一個端口號 (圖21.1-1 當中的 port BB) ,且透過命令通道告知 FTP 服務器這兩個信息,並等待 FTP 服務器的聯機;
FTP 服務器『主動』向客戶端聯機
FTP 服務器由命令通道瞭解客戶端的需求後,會主動的由 20 這個端口號向客戶端的 port BB 聯機, 這個聯機固然也會通過TCP三次握手!此時 FTP 的客戶端與服務器端共會創建兩條聯機,分別用在命令的下達與數據的傳遞。 而預設 FTP服務器端使用的主動聯機端口號就是 port 20 !
如此一來則成功的創建起『命令』與『數據傳輸』兩個信道!不過,要注意的是,數據傳輸信道是在有數據傳輸的行爲時纔會創建的通道喔!並非一開始鏈接到FTP 服務器就馬上創建的通道

由上可見,主動式聯機使用到的端口號:
命令通道的 ftp (默認爲 port 21)
數據傳輸的 ftp-data (默認爲 port 20)

在主動聯機的 FTP 服務器與客戶端之間具備防火牆的聯機問題

通常來講,不少的局域網絡都會使用防火牆(iptables) 的 NAT 功能,那麼在 NAT 後端的 FTP 用戶如何鏈接到 FTP 服務器呢?
運維進階:文件共享服務全攻略

服務器主動連到 NAT 等待轉遞至客戶端的聯機問題:
因爲透過 NAT 的轉換後, FTP 服務器只能得知 NAT 的 IP 而不是客戶端的IP , 所以 FTP 服務器會以 port 20 主動的向 NAT 的 port BB 發送主動聯機的要求。 但你的 NAT 並無啓動 port BB 來監聽 FTP 服務器的聯機啊!

解決辦法:
使用iptables所提供的FTP偵測模塊
ip_conntrack_ftp 及 ip_nat_ftp 等模塊主動的分析『目標是 port 21 的聯機』信息,獲得port BB 的資料,
此時若接受到 FTP 服務器的主動聯機,就可以將該封包導向正確的後端主機了。
客戶端選擇被動式(Passive)聯機模式
主動式,是指 服務器主動聯機客戶端。那被動式,就是客戶端聯機服務器。這裏都是指的數據傳輸聯機。

21.1.3 客戶端選擇被動式聯機模式
運維進階:文件共享服務全攻略

用戶與服務器創建命令信道
客戶端發出 PASV 的聯機要求
發出聯機要求,病等待服務器的迴應
FTP 服務器啓動數據端口口,並通知客戶端聯機
這個端口號碼不是主動式的port 20 ,而是隨機的。
告知客戶端這個 port PASV;
客戶端隨機取用大於 1024 的端口號進行鏈接

更多的博客轉移到我的博客上了,請點擊如下連接:

我的博客

相關文章
相關標籤/搜索