三種常見的文件共享服務--ftp,nfs,samba 區別和配置

artType01.jpg 三種常見的文件共享服務--ftp,nfs,samba

FTP(File Transfer Protocol,文件傳輸協議),是一種應用層協議,可以實現很好的實現跨平臺,但是無法實現一些其他的功能,像如文件系統掛載等功能。NFS(Network File System,網路文件系統)是工作在內核模式下的,因此不能很好的實現跨平臺,一般只能是Linux主機或者Unix主機之間,但可以實現掛載使用等功能。SMB(Service Message Block,服務消息塊協議),能夠實現Windows和Linux主機之間的文件共享服務,可實現跨平臺,在Linux上實現了CIFS(Common Internet File System)協議。

一、FTP協議

1、FTP原理知識

是一種C/S架構,基於套接字通信,用來在兩臺機器之間相互傳輸文件。FTP協議用到2種tcp連接:一是命令連接,用於客戶端和服務端之間傳遞命令,監聽在tcp/21端口;另一個是數據傳輸連接,用來傳輸數據,監聽的端口是隨機的。

2、FTP的被動模式、主動模式

主動模式的原理如下圖:

tcp主動模式

主動模式存在的問題是,在客戶端一般都會有防火牆的設置,當服務端與客戶端數據進行數據通信時,客戶端的防火牆會將服務端的端口擋在外面。此時,通信就會受阻。因此,被動模式就產生了。

被動模式的原理圖如下:

tcp被動模式

被動模式也會存在防火牆的問題,客戶端與服務端傳輸數據時,在服務端也會有防火牆,但在服務端的防火牆有連接追蹤的功能,解決了防火牆的問題。因此,一般使用被動模式比較多。

3、FTP的用戶認證

FTP支持系統用戶,匿名用戶,和虛擬用戶三種用戶認證。

匿名用戶:登陸用戶名是anonymous,沒有密碼

系統用戶:是FTP服務器端的本地用戶和對應的密碼,默認訪問的是用戶家目錄

虛擬用戶:僅用於訪問服務器中特定的資源,常見的虛擬用戶認證的方式有使用文件認證或使用數據庫進行認證。最終也會將這些虛擬用戶同一映射爲一個系統用戶,訪問的默認目錄就是這個系統用戶的家目錄。

4、常見的狀態信息碼

1**:提示信息

2**:成功執行的狀態碼

3**:需要進一步提供補充類的信息碼,例如在輸入用戶賬號信息後出現此狀態,提示繼續輸入密碼

4**:客戶端類的錯誤

5**:服務端錯誤

5、常見的實現FTP協議的工具

服務端:

Linux端:wu-ftpd,pureftp,vsftpd(Centos 6上默認提供的)

windows端:ServU,FileZilla-Server

客戶端工具:

Linux操作系統:ftp,lftp,lftpget,wget,cul,gftp等

windows操作系統:FileZilla

6、vsftpd

在CentOS上默認提供的是vsftpd(Very Secure FTP),以安全著稱。

用戶認證配置文件:/etc/pam.d/vsftpd      
服務腳本:/etc/rc.d/init.d/vsftpd      
配置文件目錄:/etc/vsftpd      
主配置文件:vsftpd.conf      
匿名用戶(映射爲ftp用戶)共享資源位置:/var/ftp      
系統用戶通過ftp訪問的資源的位置:用戶自己的家目錄      
虛擬用戶通過ftp訪問的資源的位置:給虛擬用戶指定的映射成爲的系統用戶的家目錄

7、常見的的vsftpd的參數設置

匿名用戶的配置:

anonymous_enable=YES    #允許匿名用戶登錄
anon_upload_enable=YES     #允許匿名用戶上傳文件
anon_mkdir_write_enable=YES    #允許匿名用戶創建目錄
anon_ohter_write_enable=YES    #允許其他的寫權限(刪除目錄,文件)


系統用戶的配置:

local_enable=YES    #允許本地用戶的登錄
write_enable=YES    # 本地用戶可寫
local_umask=022    # 本地用戶的umask


禁錮所有的ftp本地用戶於其家目錄中:

chroot_local_user=YES      #允許本地用戶只能訪問自己的家目錄,不允許訪問其他目錄,適用於所有的用戶

3

禁錮文件中指定的ftp本地用戶於其家目錄中:

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list

 

目錄消息:

dirmessage_enable=YES # 開啓目錄提示信息

在對應的目錄下創建一個.message的文件,裏面的內容當我們在訪問時此目錄時,會看到提示的信息。

4

 

日誌:

xferlog_enable=YES      # 打開傳輸日誌

xferlog_std_format=YES   # 是否使用標準格式

xferlog_file=/var/log/xferlog  #日誌文件路徑

 

改變上傳文件的屬主:

chown_uploads=YES

chown_username=whoever #上傳文件後立即改變文件的屬主名

 

vsftpd使用pam完成用戶認證,其用到的pam配置文件:

pam_service_name=vsftpd   #用戶認證文件,在/etc/pam.d/目錄下

 

是否啓用控制用戶登錄的列表文件

userlist_enable=YES

userlist_deny=YES|NO   # 爲yes的意思是,userlist_file是黑名單文件;是no的意思是userlist_file是白名單文件

userlist_file=/etc/vsftpd/user_list,默認文件爲/etc/vsftpd/user_list

 

連接限制:

max_clients: 最大併發連接數;

max_per_ip: 每個IP可同時發起的併發請求數;

 

傳輸速率:

anon_max_rate: 匿名用戶的最大傳輸速率, 單位是“字節/秒”;

local_max_rate: 本地用戶的最大傳輸速率, 單位是“字節/秒”;

8、虛擬用戶(基於mysql實現)

一、安裝所需要程序

1
2
3
4
5
1、安裝mysql和pam_mysql
 
# yum -y install vsftpd mysql-server mysql-devel pam_mysql
 
注意:pam_mysql由epel源提供。

二、創建虛擬用戶賬號

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
1.準備數據庫及相關表
 
首先請確保mysql服務已經正常啓動。而後,按需要建立存儲虛擬用戶的數據庫即可,
這裏將其創建爲vsftpd數據庫。
 
mysql> create database vsftpd;
 
mysql> grant select on vsftpd.* to vsftpd@'%' identified by 'vsftpd';
mysql> flush privileges;
 
mysql> use vsftpd;
mysql> create table users (
    -> id int AUTO_INCREMENT NOT NULL,
    -> name char(20) binary NOT NULL,
    -> password char(48) binary NOT NULL,
    -> primary key(id)
    -> );
 
2、添加測試的虛擬用戶
 
根據需要添加所需要的用戶,需要說明的是,這裏將其密碼爲了安全起見應該使用PASSWORD
函數加密後存儲。
 
mysql> insert into users(name,password) values('tom',password('tom'));
mysql> insert into users(name,password) values('jerry',password('tom'));

三、配置vsftpd

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
1.建立pam認證所需文件
 
#vi /etc/pam.d/vsftpd.mysql
添加如下兩行
auth required /lib/security/pam_mysql.so user=vsftpd passwd=www.magedu.com host=localhost
 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required /lib/security/pam_mysql.so user=vsftpd passwd=www.magedu.com host=localh
ost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
 
 
注意:由於mysql的安裝方式不同,pam_mysql.so基於unix sock連接mysql服務器時可能會出問題,
此時,建議授權一個可遠程連接的mysql並訪問vsftpd數據庫的用戶。
 
2.修改vsftpd的配置文件,使其適應mysql認證
 
建立虛擬用戶映射的系統用戶及對應的目錄
# useradd -s /sbin/nologin -d /var/ftproot vuser
# chmod go+rx /var/ftproot
 
請確保/etc/vsftpd.conf中已經啓用了以下選項
anonymous_enable=YES
local_enable=YES
write_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
chroot_local_user=YES
 
而後添加以下選項
guest_enable=YES
guest_username=vuser
 
並確保pam_service_name選項的值如下所示
pam_service_name=vsftpd.mysql

四、啓動vsftpd服務

1
2
# service vsftpd start
# chkconfig vsftpd on

五、配置虛擬用戶具有不同的訪問權限

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
vsftpd可以在配置文件目錄中爲每個用戶提供單獨的配置文件以定義其ftp服務訪問權限,
每個虛擬用戶的配置文件名同虛擬用戶的用戶名。配置文件目錄可以是任意未使用目錄,
只需要在vsftpd.conf指定其路徑及名稱即可。
 
1、配置vsftpd爲虛擬用戶使用配置文件目錄
 
# vim vsftpd.conf
添加如下選項
user_config_dir=/etc/vsftpd/vusers_config 
 
2、創建所需要目錄,併爲虛擬用戶提供配置文件
 
# mkdir /etc/vsftpd/vusers_config/
# cd /etc/vsftpd/vusers_config/
# touch tom jerry
 
3、配置虛擬用戶的訪問權限
 
虛擬用戶對vsftpd服務的訪問權限是通過匿名用戶的相關指令進行的。比如,如果需要讓tom用
戶具有上傳文件的權限,可以修改/etc/vsftpd/vusers_config/tom文件,在裏面添加如下選項即可。
anon_upload_enable={YES|NO}
anon_mkdir_write_enable={YES|NO}
anon_other_write_enable={YES|NO}

二、NFS協議

1、NFS的幾個概念

RPC(Remote Procedure Call Protocol遠程過程調用協議):

簡單的說是函數調用(遠程主機上的函數) 一部分功能由本地程序完成 另一部分功能由遠程主機上的函數完成。客戶端掛載了nfs服務器的文件系統時,進行一些操作,但是這些操作服務端如何知道呢??這可是在內核級別上實現協議。RPC就解決了這個問題,它會將客戶端的操作的函數調用發送到服務器端,由服務器端執行這些函數調用。

idmapd:

想想這種情形,nfs客戶端在掛載文件系統以後,在本地以某用戶的身份創建了一個文件,在服務器端這個文件的屬主和屬組是哪個用戶呢?早期是通過NIS(Network Information Services網絡信息服務)來解決這個問題的,但是在傳輸賬號和密碼時,使用的是明文傳輸,現在使用LDAP+clbbler來實現的。但是,NFS使用的是idmapd這個服務,有rpc提供,將所有的用戶後映射爲nfsnobody,但是在訪問的時候,還是以本地UID對應的本地用戶來使用的。

mounted:

NFS是通過什麼來控制那些客戶端可以訪問,那些不可以訪問的呢?NFS只支持通過IP來控制客戶端,而這個功能是由守護進程mounted來實現的,它監聽的端口是半隨機的。所謂的半隨機指的是,這個隨機端口是由rpc服務來決定的,而rpc是通過隨機的方式。作用等等同於小區大門保安的作用。

2、NFS請求過程

在CentOS6.5中,NFS服務端監聽在tcp和udp的2049端口,服務名是nfs、pc監聽於tcp和udp的111號端口,服務名是portmapper。

請求過程:當客戶端試這去掛載使用nfs共享的文件系統是,客戶端首先回去與postmapper(tcp/111)端口去註冊使用,此時postmapper會隨機分配一個端口給mounted,然後mounted這個守護進程會來驗證客戶端的合法性,驗證通過後,會把請求交給nfs服務,客戶端此時可以掛載使用了,用戶在創建文件時,會使用到idmapd的守護進程來映射屬主。其實idmapd也是有rpc服務提供的,只不過在這裏,nfs服務使用到用戶映射的功能時,會自動的去調用此守護進程。

3、服務的配置

在服務端,只需要安裝nfs-utils就可以直接使用,nfs服務直接是內核的模塊。

1
2
3
4
5
6
7
# smod | grep nfs
nfsd                  309196  13 
lockd                  73662  1 nfsd
nfs_acl                 2647  1 nfsd
auth_rpcgss            44949  1 nfsd
sunrpc                262768  17 nfsd,lockd,nfs_acl,auth_rpcgss
exportfs                4236  1 nfsd

服務端共享的目錄是通過 /etc/exports這個文件共享出去的。這個文件的書寫格式如下:

共享目錄    客戶端(選項1,選項2) 客戶端(選項1,選項2) …  示例:

/mydata   172.16.0.0/16(ro,async,no_root_squash)   www.example.com(ro)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
########################客戶端的表示方式##########################
主機IP地址:例如 192.168.1.10
網絡地址:例如 172.16.0.0/24
域名錶示:例如 www.example.com(指定主機),*.example.com(對應域名下的所有主機)
*:表示所有的主機
##############################常見的選項###############################
有幾個常用的選項可以對 NFS 實現進行定製。這些選項包括:
secure: 這個選項是缺省選項,它使用了 1024 以下的 TCP/IP 端口實現 NFS 的連接。
   指定 insecure 可以禁用這個選項。
rw: 這個選項允許 NFS 客戶機進行讀/寫訪問。缺省選項是隻讀的。
async: 異步存儲(所有的客戶端操作先在內存中緩存,等待cpu空閒的時候寫入磁盤)。
  這個選項可以改進性能,但是如果沒有完全關閉 NFS 守護進程就重新啓動了 NFS 服務器,
  這也可能會造成數據丟失。與之相反的是syns,是同步寫入磁盤。
no_wdelay: 這個選項關閉寫延時。如果設置了 async,那麼 NFS 就會忽略這個選項。
nohide: 如果將一個目錄掛載到另外一個目錄之上,那麼原來的目錄通常就被隱藏起來
  或看起來像空的一樣。要禁用這種行爲,需啓用 hide 選項。
no_subtree_check: 這個選項關閉子樹檢查,子樹檢查會執行一些不想忽略的安全性檢查。
  缺省選項是啓用子樹檢查。
no_auth_nlm: 這個選項也可以作爲 insecure_locks 指定,它告訴 NFS 守護進程不要對加
  鎖請求進行認證。如果關心安全性問題,就要避免使用這個選項。缺省選項是 auth_nlm 或 
  secure_locks。
mp (mountpoint=path): 通過顯式地聲明這個選項,NFS 要求掛載所導出的目錄。
fsid=num: 這個選項通常都在 NFS 故障恢復的情況中使用。如果希望實現 NFS 的故障恢復,
  請參考 NFS 文檔。
 
#####################用戶映射的選項############################
root_squash: 這個選項不允許 root 用戶訪問掛載上來的 NFS 卷。
no_root_squash: 這個選項允許 root 用戶訪問掛載上來的 NFS 卷。
all_squash: 這個選項對於公共訪問的 NFS 捲來說非常有用,它會限制所有的 UID 和 GID,
  只使用匿名用戶。缺省設置是 no_all_squash。
anonuid 和 anongid: 這兩個選項將匿名 UID 和 GID 修改成特定用戶和組帳號。


4、常用命令

showmount是用來查看nfs服務的情況

用法:showmount [ -adehv ] [ --all ] [ --directories ] [ --exports ] [ --help ] [ --version ] [ host ]

可以使用短選型,也可以使用長選項。

-a :這個參數是一般在NFS SERVER上使用,是用來顯示已經mount上本機nfs目錄的cline機器。  
-e :顯示指定的NFS SERVER上export出來的目錄。
 

exportfs:一般用在當NFS服務啓動後,使用此命令來控制共享目錄的導出

用法:exportfs [-aruv]
-a :全部mount或者unmount /etc/exports中的內容
-r :重新mount /etc/exports中分享出來的目錄
-u :umount目錄
-v :在export的時候,將詳細的信息輸出到屏幕上。
具體例子:
# exportfs -au 卸載所有共享目錄
# exportfs -rv 重新共享所有目錄並輸出詳細信息

5、客戶端的使用

先使用 showmont -e SER_NAME 來發現服務端的共享的目錄

然後使用mount掛載使用,格式:

mount -t nfs SER_NAME:/data /parth/to/someponit [-o 選項]

mount -t nfs 192.168.1.99:/mydat /mnt -o rsize=4096

rsize 的值是從服務器讀取的字節數。wsize 是寫入到服務器的字節數。默認都是1024, 如果使用比較高的值,如8192,可以提高傳輸速度。

三、samba服務(基本介紹)

1、協議

smb: Service Message Block

CIFS: Common Internet File System通用網絡文件系統,是windows主機之間共享的協議,samba實現了這個協議,所以可以實現wondows與linux之間的文件共享服務。

監聽的端口有:

tcp/137 udp/137 tcp/139 udp/139

137:是實現NetBIOS協議,實現解析windows之間主機名的解析,實現在windows的網上鄰居可以看到Linux的主機名。

139:是實現cifs協議

2、如何訪問?

在Linux中:

交互式數據訪問:

1
smbclient -L HOST -U USERNAME

獲取到共享信息之後,

1
smbclint //SERVER/shared_name -U USERNAME

基於掛載的方式訪問:

1
mount -t cifs //SERVER/shared_name  /mount_point -o username=USERNAME,password=PASSWORD

3、如何配置samba服務器(Linux)

# yum -y install samba

服務腳本:

      /etc/rc.d/init.d/nmb # 實現 NetBIOS協議

      /etc/rc.d/init.d/smb  # 實現cifs協議

主配置文件:

       /etc/samba/smb.conf

samba用戶:

     賬號:都是系統用戶, /etc/passwd

     密碼:samba服務自有密碼文件,

     將系統用戶添加爲samba的命令:smbpasswd

     smbpasswd:

         -a Sys_User: 添加系統用戶爲samba用戶

         -d :禁用用戶

         -e: 啓用用戶

         -x: 刪除用戶

配置文件:

/etc/samba/smb.conf   配置文件包括全局設定,特定共享的設定,私有家目錄,打印機共享,自定義共享

全局配置:

1
2
3
workgroup = MYGROUP  # 工作組
hosts allow = 127. 192.168.12. 192.168.13. # 訪問控制,IP控制
interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24 # 接口+ip控制

自定義共享:

1
2
3
4
5
6
[shared_name] #共享名稱
path = /path/to/share_directory #共享路徑
comment = Comment String # 註釋信息
guest ok = {yes|no} | public = {yes|no} # 是否啓用來賓賬號
writable = {yes|no} |  read only = {yes|no} # 共享目錄是否可寫
write list = +GROUP_NAME  # 允許可寫的用戶列表,前面有+是代表允許可寫的組

測試配置文件是否有語法錯誤,以及顯示最終生效的配置:

1
testparm


    至此,三種常見的文件服務介紹完成。



本文出自 “逆水寒” 博客,請務必保留此出處http://guoting.blog.51cto.com/8886857/1541299

分享至 一鍵收藏,隨時查看,分享好友!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章