LINUX之FTP服務

1.FTP的鏈接類型

控制鏈接(持續鏈接) -> TCP21(命令信道) -> 用戶收發FTP命令linux

數據鏈接(按需鏈接) -> TCP20(數據信道) -> 用於上傳下載數據數據庫

 

2.FTP的工做模式

ftp模式分爲主動模式(active mode)和被動模式(passive mode),ftp是tcp鏈接,因此要進行三次握手。vim

@See安全

1.1active和passive模式的配置:

在命令行輸入vim /etc/vsftpd/vsftpd.conf:服務器

  • active mode:app

    pasv_enable=NO     (passive模式關閉)
    pasv_min_port=3000
    pasv_max_port=4000
    port_enable=YES   (active模式開啓)
    connect_from_port_20=YES (即默認狀況下,FTP PORT主動模式進行數據傳輸時使用20端口(ftp-data)。YES使用,NO不使用。)
  • passive mode:ssh

    pasv_enable=YES
    pasv_min_port=30000  
    pasv_max_port=40000

    設定在PASV模式下,創建數據傳輸所可使用port範圍的下界和上界,0 表示任意(1024 – 65535端口)。默認值爲0。把端口範圍設在比較高的一段範圍內,好比30000 -40000。

在linux上,若是不配置pasv_enable=NO,默認是passive模式。(之前在鎮江農商行,遇到文件傳輸過不去的問題,後來才發現爲被動模式,但配置的爲NO,改爲YES便可。tcp

  • service vsftpd restart 重啓ftp服務; ui

    • 經過命令行鏈接ftp server:加密

                   active mode: ftp -A 192.168.180.106

                   active模式鏈接ftp server時必定要加 -A

                   passive mode: 能夠直接使用 ftp 192.168.180.106

1.2 active 模式:

 在active模式下,以下圖抓的包中,在命令鏈接部分(ftp類型的包),client端使用的端口是36439,這個端口是大於1024的任意端口,ftp server端用的端口是21:

以下圖,在active模式下,要傳輸數據時,ftp client經過第23個包經過21號端口告訴server數據傳輸聯繫端口43187(大於1024的任意端口),並進行listen,server端用端口20主動和client端43187創建數據傳輸通道,並傳輸數據(第30,32,34個包)。這裏是server知道了client端的數據通道監聽端口後,主動創建了數據傳輸通道,因此是主動模式。

 

在active模式下,數據傳輸部分(FTP-DATA類型的包),ftp-server端用的端口是20,默認狀況下,FTP PORT主動模式進行數據傳輸時使用20端口,ftp-client端用的是43187端口,是上一步client發給server的數據傳輸監聽端口。

總結:active 模式

1.3 passive 模式:

 在passive 模式下,以下圖所抓的包中,在命令部分(ftp類型的包),client端使用的端口是36434,這個端口是大於1024的任意端口,ftp server用的端口是21.

在passive模式下,以下圖的第28個包,是由client端發起PASV(passive mode)的數據傳輸通道鏈接請求,因此爲被動模式。

而在passive模式的數據傳輸部分(FTP-DATA類型的包),ftp-server端用的端口是3542,這個端口是在/etc/vsftpd/vsftpd.conf文件中passive模式下設置的端口範圍(3000-4000,能夠本身設置)中任意選的一個端口,ftp-client端用的是53001端口,是大於1024的任意一個端口。

總結:

passive模式

3.FTP的傳輸模式

Binary模式: 不對數據進行任何處理,適合進行可執行文件、壓縮文件、圖片等。

ASCII模式:進行文本傳輸時,自動適應目標操做系統的結束符,如回車符等

LINUX的紅帽發行版中VSFTP默認採用的是Binary模式,這樣能保證絕大多數文件傳輸後能正常使用

切換方式:

4.FTP的安裝

 1 [root@localhost etc]# yum -y install vsftpd ftp
 2 已加載插件:fastestmirror, langpacks
 3 Loading mirror speeds from cached hostfile
 4 epel/x86_64/metalink                                                                         | 6.7 kB  00:00:00
 5  * base: mirrors.zju.edu.cn
 6  * epel: my.fedora.ipserverone.com
 7  * extras: mirrors.163.com
 8  * updates: mirrors.163.com
 9 [root@localhost etc]# service vsftpd start
10 Redirecting to /bin/systemctl start vsftpd.service
11 [root@localhost etc]# netstat -antp
12 Active Internet connections (servers and established)
13 Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
14 tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd
15 tcp        0      0 0.0.0.0:6000            0.0.0.0:*               LISTEN      7421/X
16 tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      7737/dnsmasq
17 tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      7099/sshd
18 tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      7100/cupsd
19 tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      7360/master
20 tcp        0      0 127.0.0.1:6010          0.0.0.0:*               LISTEN      18303/sshd: root@pt
21 tcp        0      0 192.168.180.106:22      192.168.180.1:51721     ESTABLISHED 18303/sshd: root@pt
22 tcp        0      0 192.168.180.106:22      192.168.180.1:51729     ESTABLISHED 18312/sshd: root@no
23 tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd
24 tcp6       0      0 :::6000                 :::*                    LISTEN      7421/X
25 tcp6       0      0 :::21                   :::*                    LISTEN      25188/vsftpd
26 tcp6       0      0 :::22                   :::*                    LISTEN      7099/sshd
27 tcp6       0      0 ::1:631                 :::*                    LISTEN      7100/cupsd
28 tcp6       0      0 ::1:25                  :::*                    LISTEN      7360/master
29 tcp6       0      0 ::1:6010                :::*                    LISTEN      18303/sshd: root@pt

 


   

FTP的使用可使用?查詢全部命令

 1 [root@localhost etc]# cd /var/ftp
 2 [root@localhost ftp]# ls
 3 pub
 4 [root@localhost ftp]# touch test.txt
 5 [root@localhost ftp]# cd
 6 [root@localhost ~]# ftp 192.168.180.106
 7 Connected to 192.168.180.106 (192.168.180.106).
 8 220 (vsFTPd 3.0.2)
 9 Name (192.168.180.106:root): ftp
10 331 Please specify the password.
11 Password:
12 230 Login successful.
13 Remote system type is UNIX.
14 Using binary mode to transfer files.
15 ftp> ?
16 Commands may be abbreviated.  Commands are:
17 18 !               debug           mdir            sendport        site
19 $               dir             mget            put             size
20 account         disconnect      mkdir           pwd             status
21 append          exit            mls             quit            struct
22 ascii           form            mode            quote           system
23 bell            get             modtime         recv            sunique
24 binary          glob            mput            reget           tenex
25 bye             hash            newer           rstatus         tick
26 case            help            nmap            rhelp           trace
27 cd              idle            nlist           rename          type
28 cdup            image           ntrans          reset           user
29 chmod           lcd             open            restart         umask
30 close           ls              prompt          rmdir           verbose
31 cr              macdef          passive         runique         ?
32 delete          mdelete         proxy           send
33 ftp>
34

 

5.匿名用戶登陸

注:關閉防火牆和SELINUX

anonymous_enable=YES                          #啓用匿名訪問        
anon_umask=022                               #匿名用戶上傳文件的權限掩碼(755,644)   anon_root=/var/ftp                           #FTP的根目錄
anon_upload_enable=YES                       #容許上傳文件                    
anon_mkdir_write_enable=YES                   #容許建立目錄
anon_other_write_enable=YES                   #開放其餘寫入權
anon_max_rate=0                               #限制最大傳輸速率(0爲不限速)

注:在客戶端登陸後,默認狀況下能夠下載,不能上傳

FTP服務器端

FTP客戶端

    

  • 實現上傳

    anonymous_enable=YES                          #啓用匿名訪問  
    須要FTP服務器端的上傳目錄要有足夠的權限(演示:第一次權限不足,第二次能夠)

  • 實現建立目錄和文件其餘操做

    anon_mkdir_write_enable=YES                   #容許建立目錄
    anon_other_write_enable=YES                   #開放其餘寫入權
  • 實現文件下載

 

     
anon_umask=022                               #匿名用戶上傳文件的權限掩碼(755)  
添加之後,就能夠get了,擁有了r權限。

6.本地用戶登陸 (如今項目用的這種)

local_enable=YES                 #是否啓用本地系統用戶
local_umask=022                 #本地用戶所上傳文件的權限掩碼
(新建的目錄 權限是755 ,文件的權限是 644)
local_root=/var/ftp             #設置本地用戶的FTP根目錄
chroot_local_user=YES           #是否將用戶禁錮在主目錄
local_max_rate=0                 #限制最大傳輸速率
userlist_enable=YES&userlist_deny=YES  
#禁止/etc/vsftpd/user_list 文件中出現的用戶名登陸ftp
userlist_enable=YES&userlist_deny=NO
#僅容許/etc/vsftpd/user_list 文件中出現的用戶名登陸ftp
配置文件:ftpusers
#禁止/etc/vsftpd/user_list 文件中出現的用戶名登陸ftp,權限比User_list更高,及時生效
  • 建立的用戶,不須要登陸操做系統,僅用來登陸VSFTP


[root@localhost ~]# useradd -s /sbin/nologin ftpuser
[root@localhost ~]# passwd ftpuser
更改用戶 ftpuser 的密碼 。
新的 密碼:
無效的密碼: 密碼少於 8 個字符
從新輸入新的 密碼:
passwd:全部的身份驗證令牌已經成功更新。
[root@localhost ~]

建立的時候,若是想限制用戶的家目錄,能夠這樣建立

useradd -d /tz/ftp   -s /sbin/nologin dhftpuser
  • 將全部的用戶禁錮在本身的家目錄下(即不能隨意切換路徑)

    chroot_local_user=YES
  • 將部分用戶禁錮在本身的家目錄下

    chroot_list_enable=YES
    chroot_list=file=/etc/vsftpd/chroot_list

 

注:白名單使用的前提,要把chroot_local_user=YES開啓,測了幾遍發現這個問題

  • 配置文件:/etc/vsftpd/ftpusers

    全部寫入此文件內的用戶名都不容許登陸ftp,當即生效

  • 修改被動模式數據傳輸使用端口

    pasv_enable=YES
    pasv_min_port=30000
    pasv_max_port=35000

7.虛擬用戶驗證登陸 (之前項目這種)

 1 [root@localhost vsftpd]# vim vsftpd.user
 2 #奇數行爲用戶,偶數行爲密碼
 3 [root@localhost vsftpd]# db_load -T -t hash -f vsftpd.user vsftpd.db
 4 #將用戶密碼的存放文本轉化數據庫類型,並使用hash加密
 5 [root@localhost vsftpd]# ll
 6 total 40
 7 -rw-r--r-- 1 root root    13 May 26 01:03 chroot_list
 8 -rw------- 1 root root   125 Mar 22  2017 ftpusers
 9 -rw------- 1 root root   361 Mar 22  2017 user_list
10 -rw------- 1 root root  4638 May 26 01:09 vsftpd.conf
11 -rwxr--r-- 1 root root   338 Mar 22  2017 vsftpd_conf_migrate.sh
12 -rw-r--r-- 1 root root 12288 May 26 01:37 vsftpd.db
13 -rw-r--r-- 1 root root    33 May 26 01:36 vsftpd.user
14 [root@localhost vsftpd]# chmod 600 vsftpd.db
15 #修改文件權限爲600,保證其安全性
16 [root@localhost wgr]# useradd -d /wgr/tz -s /sbin/nologin tzftpuser
17 #建立用戶做爲ftp的虛擬用戶的映射用戶
18  /wgr/tz這裏的路徑不要建,建立用戶的時候會本身產生
19 20 [root@localhost wgr]# vim /etc/pam.d/vsftpd.pam
21 添加下面的內容
22 auth required pam_userdb.so db=/etc/vsftpd/vsftpd
23 account required pam_userdb.so db=/etc/vsftpd/vsftpd
24 修改
25 pam_service_name=vsftpd.pam
26 添加
27 guest_enable=YES
28 guest_username=tzftpuser
29 user_config_dir=/etc/vsftpd/dir

 

 

注:作虛擬用戶配置文件設置時,將主配置文件中的自定義的匿名用戶相關設置註釋掉

anon_upload_enable=YES                        #容許上傳文件
anon_mkdir_write_enable=YES                   #容許建立目錄
anon_other_write_enable=YES                   #開放其餘寫入權

給3個配置文件賦予權限

a1: anon_upload_enable=YES                        #容許上傳文件  
a2: anon_mkdir_write_enable=YES                   #容許建立目錄
a3: anon_upload_enable=YES                        #容許上傳文件
    anon_other_write_enable=YES                   #開放其餘寫入權
 1 #建立dir目錄,並給3個用戶賦予不一樣的權限
 2 [root@localhost dir]# ll
 3 總用量 12
 4 -rw-r--r--. 1 root root 23 5月  26 17:15 a1
 5 -rw-r--r--. 1 root root 28 5月  26 17:15 a2
 6 -rw-r--r--. 1 root root 50 5月  26 17:16 a3
 7 [root@localhost dir]#
 8 [root@localhost dir]# ls -ld /wgr/tz/
 9 drwx------. 3 tzftpuser tzftpuser 78 5月  26 17:08 /wgr/tz/
10 # 注:要給映射用戶的家目錄  設置 O+r 讓虛擬用戶有讀權限
11 [root@localhost dir]# chmod o+r /wgr/tz
12 [root@localhost dir]# ls -ld /wgr/tz/
13 drwx---r--. 3 tzftpuser tzftpuser 78 5月  26 17:08 /wgr/tz/
14 [root@localhost dir]#

 

 

相關文章
相關標籤/搜索