獨孤九篇之運維進階:文件共享服務全攻略完結篇

一、瞭解一下

1.NFS

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

好處:

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

.

2.Samba

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

好處:

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

.

3.FTP

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

好處:

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

.

.

二、動手實現

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 SAMBAlinuxview'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 客戶端訪問並掛載

瀏覽器訪問:

獨孤九篇之運維進階:文件共享服務全攻略完結篇
獨孤九篇之運維進階:文件共享服務全攻略完結篇
命令行訪問:

獨孤九篇之運維進階:文件共享服務全攻略完結篇
三、原理分析

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 的端口號進行連接

1.NFS

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

好處:

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

.

2.Samba

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

好處:

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

.

3.FTP

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

好處:

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

.

.

二、動手實現

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 SAMBAlinuxview'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 客戶端訪問並掛載

瀏覽器訪問:

獨孤九篇之運維進階:文件共享服務全攻略完結篇
獨孤九篇之運維進階:文件共享服務全攻略完結篇
命令行訪問:

獨孤九篇之運維進階:文件共享服務全攻略完結篇
三、原理分析

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 的端口號進行連接

喜歡的點點關注,點點贊。

對Java技術,架構技術感興趣的同學,歡迎加QQ羣668041364?,一起學習,相互討論。

羣內已經有小夥伴將知識體系整理好(源碼,筆記,PPT,學習視頻),歡迎加羣領取。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章