文件共享服務之FTP

文件共享服務

1、什麼是文件共享服務node

簡單來講就是文件或存儲塊設備能夠共享給你們使用mysql

(一)、實現共享服務有三種:linux

一、ftp:屬於應用層服務,能夠跨平臺使用(linux<->unix<-->windows)sql

二、nfs:屬於內核模式,不能夠跨平臺(linux<-->linux)數據庫

三、samba:能夠跨平臺(linux<-->unix<-->windows)vim

(二)、實現存儲設備與服務器鏈接的方式有三種:windows

一、DAS:鏈接的磁盤bash

二、NAS:經過nfs/cifs協議實現網絡共享文件(文件存儲方式)電子郵件、網頁服務器、多媒體流服務、檔案分享等就適用於NAS存儲架構。服務器

三、SAN:經過網線或光纖實現ISCSI和FCSAN將物理存儲設備鏈接起來使用(塊存儲方式較底層,須要格式化並掛載當本地磁盤使用)數據庫有關的應用適用於SAN存儲架構。網絡

(三)、附:

一、nfs(Network File System,網絡文件系統)協議實現Linux的文件封裝共享傳輸。

二、cifs(common internet File System,公共互聯網文件系統)協議實現windows與linux的共享識別,例如samba就是基於cifs(smb)協議實現。

2、FTP

一、FTP是File Transfer Protocol 文件傳輸協議的縮寫,基於網絡來傳輸文件的應用層通訊協議。

二、FTP可以經過網絡來傳輸文件,由於工做在應用層因此不會受到平臺的限制。

三、FTP的工做模式

wKiom1d2AXLAk2xuAABQJA8IIlM732.png

wKiom1d2AXOhTWpQAABLtIzLT5c387.png

(1)、FTP的數據傳輸分爲命令數據與文件數據,命令傳輸就是客戶端要執行的命令,服務端收到後返回給客戶端執行結果,如ls命令的執行結果同樣。文件傳輸就是客戶端要傳輸的數據,服務端與客戶端數據鏈接來傳輸。

(2)、FTP的服務端與客戶端創建鏈接大致三個步驟,創建鏈接,傳輸數據,斷開鏈接。

(3)、FTP是基於tcp協議來傳輸數據的,使用21號端口來創建認證通道,20號端口來創建數據通道。

(4)、FTP是明文傳輸的。

(5)、FTP的用戶可分爲實體用戶(real user),匿名用戶(anonymous user),訪問用戶(guest user)。

主動模式與被動模式

因爲如今的網絡架構中,都會有防火牆來阻止端口與高位端口被主動鏈接,特別20端口是被禁止主動鏈接的,由於20端口是FTP的數據端口,因此爲了解決客戶端或者服務端的防火牆問題,FTP就有了主動和被動兩種模式,經過牆內的一端來主動鏈接外端的一方,這樣子就不會被防火牆阻擋。

主動模式:通常用於服務端存在防火牆的狀況,客戶端沒法主動鏈接至服務端的20數據端口,須要由服務端主動鏈接客戶端的高位數據端口。

1. 兩端在創建TCP通訊通道後,客戶端會發送port請求與服務端的21號端口認證鏈接併發送開放用來創建數據鏈接的高位端口號。
2. 服務端在收到後,會經過20號端口發送ACK響應請求
3. 服務端會經過20端口與客戶端發送的高位端口創建數據鏈接通道。

被動模式:通常用於客戶端存在防火牆的狀況,服務端在收到鏈接請求後由於客戶端防火牆而沒法達到客戶端高位端口,須要客戶端主動鏈接至服務端的數據傳輸端口。

1. 兩端在創建TCP通訊通道鏈接後,客戶端會發送PASV請求給服務端。
2. 服務端在受到PASV端口後就會打開一個高位端口做爲數據傳輸端口來響應給客戶端等待客戶端鏈接。
3. 客戶端在收到響應後,就會去鏈接響應的端口創建數據鏈接通道。

咱們能夠看到以上兩種工做方式,都是由牆內的一方來發出鏈接並容許另外一端來鏈接指定端口,牆內的一方就相似是一間房子的主人,而另一方是客人,客人去訪問須要獲得主人的贊成,並來給你「開門」以後,你才能進到這個屋子。

wKioL1d2BkKCHiQQAADhozNXKQ0725.png

wKioL1d2BlLyNIYNAABB7hjXHJg885.png

3、響應碼

    1XX:信息類

      2XX:成功類信息

      3XX:提示須要進一步補全內容類

      4XX:客戶端錯誤

      5XX:服務器端錯誤

4、用戶認證

一、虛擬用戶:僅用於訪問某特定服務中的資源

   nsswitch:network server switch,名稱解析框架

     配置文件:/etc/nsswitch.conf

     模塊:/lib64/libnss*,/usr/lib64/libnss*

   pam:pluggable authentication module,用戶認證框架

     配置文件:/etc/pam.conf,/etc/pam.d/*

    模塊:/lib64/security/

   以上兩種框架是linux的自帶框架,經過庫調用的方式自由選擇基於系統帳戶實現,非系統帳戶實現,仍是數據    庫帳戶形式實現不用所有編譯進去浪費資源。

二、系統用戶:經過nsswitch服務解決用戶名稱解析,經過pam對系統用戶進行認證(/etc/passwd,/etc/shadow)

三、匿名用戶:映射爲一個系統用戶ftp,爲ftp用戶設置權限

四、虛擬用戶:映射爲系統某一用戶,用戶帳號密碼存儲於非/etc/passwd,/etc/shadow

注:匿名用戶或虛擬用戶雖然和系統用戶沒有關係,可是登錄後獲取系統上的文件權限仍是須要映射爲系統用戶,以系統用戶的權限訪問系統文件(例如:FTP系統用戶,httpd系統用戶)

5、VSFTPD

VSFTPD是基於ftp協議來對網絡數據交換的一種實現,是一個開源的解決方案。

VSFTPD能攻經過配置,搭建ftp服務器,完成基於網絡的數據傳輸功能。

一、vsftpd基礎服務搭建
[root@lab01 ~]# cat /etc/redhat-release 
CentOS release 6.7 (Final)
[root@lab01 ~]# yum -y install vsftpd #安裝vsftpd
[root@lab01 ~]# rpm -ql vsftpd   #查看安裝生成的文件
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd                 #pam認證文件
/etc/rc.d/init.d/vsftpd           #服務啓動進程
/etc/vsftpd
/etc/vsftpd/ftpusers              #限制登錄文件
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf           #vsftp的主配置文件
/etc/vsftpd/vsftpd_conf_migrate.sh
/usr/sbin/vsftpd                  #程序文件
......
/var/ftp                          #FTP家目錄
/var/ftp/pub                      

二、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,也就是上傳後文件的權限
#定義訪問日誌
    xferlog_enable=YES   #是否啓動xferlog日誌
    xferlog_file=/var/log/xferlog    #定義xferlog日誌文件的存放位置
    xferlog_std_format=YES   #是否使用標準的xferlog模式 
#禁錮全部的ftp本地用戶於其家目錄中:
    chroot_local_user=YES
#禁錮文件中指定的ftp本地用戶於其家目錄中:
    chroot_list_enable=YES  #設置是否啓用將部分用戶禁錮在家目錄
    chroot_list_file=/etc/vsftpd/chroot_list(在此文件中添加系統用戶)
#虛擬用戶映射系統用戶
    guest_enable=YES  是否啓用來賓帳號(默認沒有) 
    guest_username=vuser  未來賓帳號映射爲那一個系統用戶(默認沒有)
#經過pam用戶認證
    pam_service_name=vsftpd    (/etc/pam.d/vsftpd中定義) 
    pam_service_name=vsftpd.mysql \\pam認證文件
#定義歡迎語
    ftpd_banner=Welcome to blah FTP service. \\設置定義登陸ftp的歡迎語

#其餘選項       
    connect_from_port_20=YES  #設置主動鏈接的數據傳輸端口  
    chown_uploads=YES  #是否啓動上傳ftp文件後,更改文件的屬主 [YES | NO] 
    chown_username=whoever  #若啓用了更改上傳文件的屬主,則定義是哪個屬主
    idle_session_timeout=600  \\設置會話超時時間 
    data_connection_timeout=120 \\設置數據傳輸超時時間 
    nopriv_user=ftpsecure  \\運行vsftpd須要非特權系統用戶,默認是nobody  
    async_abor_enable=YES  \\設置是否容許執行特殊的ftp命令async ABOR
    ascii_upload_enable=YES  \\設置是否使用ascii碼上傳文件 [YES | NO]
    ascii_download_enable=YES \\設置是否使用ascii碼下載文件 [YES | NO]
    deny_email_enable=YES  \\設置是否禁止匿名用戶使用某些郵件地址
    banned_email_file=/etc/vsftpd/banned_emails  \\郵件地址文件
    ls_recurse_enable=YES  \\是否容許遞歸 [YES | NO]
    listen=YES \\設置vsftpd是否處於監聽狀態
    listen_ipv6=YES \\是否啓用ipv6地址監聽 
    user_config_dir=/etc/vsftpd/vuser_config\\設置匿名用戶的權限配置文件位置 (默認沒有)
    userlist_enable=YES  \\此選項與下面選項userlit_deny都爲YES時,/etc/vsftpd/user_list爲黑名單,
    userlist_deny=YES     \\若userlist_enable爲YES,userlist_deny=NO則此文件爲白名單
    tcp_wrappers=YES  \\支持tcp_wrappers訪問限制(/etc/{hosts.allow,hosts.deny} 
    max_clients=1024  \\限制最大併發鏈接數(默認沒有此選項)
    max_per_ip=1024   \\限制每一個ip同時請求的鏈接數(默認沒有此選項)
    anon_max_rate=1024 \\限制匿名用戶的傳輸速率(默認沒有此選項)
    local_max_rate=1024 \\限制本地用戶的傳輸速率(默認沒有出選項)
#匿名用戶(映射爲ftp用戶)共享資源位置:/var/ftp 
#系統用戶經過ftp訪問的資源的位置:用戶本身的家目錄 
#虛擬用戶經過ftp訪問的資源的位置:給虛擬用戶指定的映射成爲的系統用戶的家目錄

6、vsftpd+mysql+pam實現過程

一、安裝數據庫及pam_mysql插件
[root@lab01 ~]# yum -y install mysql-server pam_mysql
二、建立用於vsftpd的數據庫,在建立表和用戶
mysql> CREATE DATABASE vsftpd;   #建立數據庫
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)
    -> );
mysql> INSERT INTO users(name,password) values('bjwf',password('123456'));
mysql> INSERT INTO users(name,password) values('zhangsan',password('bjwf.com'));
mysql> GRANT ALL ON vsftpd.* TO vsftpd@'%' IDENTIFIED BY 'bjwf.com';   #用戶受權
mysql> FLUSH PRIVILEGES;     #刷新受權
三、查看pam模塊,並建立認證文件
[root@lab01 ~]# rpm -ql pam_mysql
/lib64/security/pam_mysql.so   #pam模塊生成認證時須要的共享庫
[root@lab01 ~]# vim /etc/pam.d/vsftpd.mysql
auth required /lib64/security/pam_mysql.so user=vsftpd passwd=bjwf.com host=192.168.130.251 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required /lib64/security/pam_mysql.so user=vsftpd passwd=bjwf.com host=192.168.130.251 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
四、建立虛擬用戶的映射用戶
[root@lab01 ~]# useradd -s /sbin/nologin -d /var/ftproot vuser
[root@lab01 ~]# chmod go+rx /var/ftproot
五、編輯配置文件,啓動以下選項
[root@lab01 ~]# vim /etc/vsftpd/vsftpd.conf
    anonymous_enable=NO
    local_enable=YES
    write_enable=YES
    anon_upload_enable=NO
    anon_mkdir_write_enable=NO
    chroot_local_user=YES
    pam_service_name=vsftpd.mysql
    guest_enable=YES
    guest_username=vuser
六、爲單個用戶提供配置文件
[root@lab01 ~]# vim /etc/vsftpd/vsftpd.conf
    user_config_dir=/etc/vsftpd/vuser_config
[root@lab01 ~]# mkdir /etc/vsftpd/vuser_config
[root@lab01 ~]# cd /etc/vsftpd/vuser_config
[root@lab01 vuser_config]# cat bjwf
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
[root@lab01 vuser_config]# cat zhangsan
anon_upload_enable=YES
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
七、重啓服務驗證權限
[root@lab01 ~]# service vsftpd restart
Shutting down vsftpd:                                      [  OK  ]
Starting vsftpd for vsftpd:                                [  OK  ]
[root@lab01 ~]# netstat -tnlp|grep 21
tcp        0      0 0.0.0.0:21 0.0.0.0:*     LISTEN      1850/vsftpd   
[root@lab01 ~]# cp install.log /var/ftproot/
#切換另外一臺機器測試
 [root@node1 tmp]# lftp -u bjwf 192.168.130.251   #使用可讀、可寫帳號
Password: 
lftp bjwf@192.168.130.251:~> ls         #查看文件
-rw-r--r--    1 0        0            9545 Jul 01 09:16 install.log
lftp bjwf@192.168.130.251:/> lcd /etc/  #切換到本地目錄
lcd ok, local cwd=/etc
lftp bjwf@192.168.130.251:/> put fstab  #上傳文件
541 bytes transferred
lftp bjwf@192.168.130.251:/> ls
-rw-------    1 500      500           541 Jul 01 09:20 fstab
-rw-r--r--    1 0        0            9545 Jul 01 09:16 install.log
lftp bjwf@192.168.130.251:/> put passwd  #上傳文件
1228 bytes transferred
lftp bjwf@192.168.130.251:/> ls
-rw-------    1 500      500           541 Jul 01 09:20 fstab
-rw-r--r--    1 0        0            9545 Jul 01 09:16 install.log
-rw-------    1 500      500          1228 Jul 01 09:21 passwd
lftp bjwf@192.168.130.251:/> mkdir haha  #建立目錄
mkdir ok, `haha' created
lftp bjwf@192.168.130.251:/> rm install.log #刪除文件
rm ok, `install.log' removed
lftp bjwf@192.168.130.251:/> ls
-rw-------    1 500      500           541 Jul 01 09:20 fstab
drwx------    2 500      500          4096 Jul 01 09:21 haha
-rw-------    1 500      500          1228 Jul 01 09:21 passwd

[root@node1 tmp]# lftp -u zhangsan 192.168.130.251  #切換另外一個用戶
Password: 
lftp zhangsan@192.168.130.251:~> ls     
-rw-------    1 500      500           541 Jul 01 09:20 fstab
drwx------    2 500      500          4096 Jul 01 09:21 haha
-rw-------    1 500      500          1228 Jul 01 09:21 passwd
lftp zhangsan@192.168.130.251:/> lcd /etc
lcd ok, local cwd=/etc
lftp zhangsan@192.168.130.251:/> put issue    #上傳成功
23 bytes transferred
lftp zhangsan@192.168.130.251:/> ls
-rw-------    1 500      500           541 Jul 01 09:20 fstab
drwx------    2 500      500          4096 Jul 01 09:21 haha
-rw-------    1 500      500            23 Jul 01 09:23 issue
-rw-------    1 500      500          1228 Jul 01 09:21 passwd
lftp zhangsan@192.168.130.251:/> rm issue
rm: Access failed: 550 Permission denied. (issue)    #不能刪除
lftp zhangsan@192.168.130.251:/> mkdir data
mkdir: Access failed: 550 Permission denied. (data)   #不能建立目錄
lftp zhangsan@192.168.130.251:/> ls
-rw-------    1 500      500           541 Jul 01 09:20 fstab
drwx------    2 500      500          4096 Jul 01 09:21 haha
-rw-------    1 500      500            23 Jul 01 09:23 issue
-rw-------    1 500      500          1228 Jul 01 09:21 passw

#常見問題:
一、ftp沒法登錄,請檢查你的文件夾權限並檢查主配置文件中的屬性是否打開了,如anonymous_enable,local_enable等。
二、沒法切換目錄或者個別用戶沒法登錄,請檢查chroot_list,ftpusers,user_list文件內容或者主配置文件中的配置是否正確。
三、mysql存儲沒法登錄,請查看日誌文件/var/log/secure,/var/log/message,/var/log/xferlog,並確認認證文件沒有寫錯,仔細檢查配置文件與目錄和被映射的實體用戶的權限。
四、若是遇到密碼錯誤,檢查密碼文件,如mysql表中字段長度類型是否正確,數據庫用戶是否能遠程登錄訪問數據庫user表。
五、建議不要編譯安裝pam_mysql模塊
六、沒法正常工做時,請檢查端口是否開啓,或檢查防火牆和selinux是否有配置正確。
相關文章
相關標籤/搜索