FTP服務的簡介和配置詳解

注意:配置FTP服務時,最好關閉防火墻和selinux

1FTP服務簡介

FTP File Transfer Protocol文件傳輸協議)的英文簡稱,而中文簡稱為“文件傳輸協議”。用于Internet上的控制文件的雙向傳輸。同時,它也是一個應用程序Application)。基于不同的操作系統有不同的FTP應用程序,而所有這些應用程序都遵守同一種協議以傳輸文件。在FTP的使用當中,用戶經常遇到兩個概念:"下載"Download)和"上傳"Upload)。"下載"文件就是從遠程主機拷貝文件至自己的計算機上;"上傳"文件就是將文件從自己的計算機中拷貝至遠程主機上。用Internet語言來說,用戶可通過客戶機程序向(從)遠程主機上傳(下載)文件,由于FTP的文件傳輸是明文方式,具有一定危險性,所以就誕生了一種更加安全的傳輸方式vsftp,下面主要介紹vsftp的特性及相關配置。

?

2VSFTP特點

VSFTP是一個比FTP更安全的軟件具有以下特點:

1vsftp一般以普通用戶運行,降低了進程的權限,提高了安全性

?

2)任何需要執行較高權限的指令都需要上層程序的許可

?

3ftp的命令都被整合到了vsftp中,不需要系統額外提供命令

?

4)用于chroot功能,可以改變用戶的根目錄,限制用戶只能在自己的家目錄

?

5vsftpd 是一個基于GPL發布的FTP服務器軟件。其中的vs是“ Very Secure”的縮寫,由此名稱縮寫可以看出,本服務器的初衷就是服務的安全性。

?

6vsftpdRedHat Linux默認使用的ftp服務端軟件。

?

7vsftpd不再依賴于xinetd服務

?

8vsftpd可同時允許匿名( anonymous )與本地用戶(local)訪問,還可以支持虛擬用戶。

?

3VSFTP連接類型

控制連接:TCP 21,用于發送FTP命令信息

數據連接:TCP 20,用于上傳、下載數據

?

4Vsftp工作模式

FTP協議有兩種工作方式:PORT方式和PASV方式,中文意思為主動式和被動式

主動模式:服務端從20端口主動向客戶端發起連接

被動模式:服務端在指定范圍內某個端口被動等待客戶端連接

?

主動模式端口分配:控制端口?21 ?傳輸數據端口?20

被動模式端口分配:控制端口 21 ?傳輸數據端口 隨機

blob.png

5VSFTP傳輸模式

1文本模式:ASCII模式,以文本序列傳輸數據

2二進制模式:Binary模式,以二進制序列傳輸數據

?

6FTP用戶的類型

1匿名用戶:anonymousftp

2本地用戶:帳號名稱、密碼等信息保存在passwd/shadow文件中

3虛擬用戶:使用獨立的帳號/密碼數據文件

?

7VSFTP配置文件介紹

配置文件作用

配置文件路徑

vsftpd的可執行文件(主程序)

/usr/sbin/vsftpd

vsftpd啟動腳本

/etc/rc.d/init.d/vsftpd

vsftpd主配置文件

/etc/vsftpd/vsftpd.conf

vsftpdPAM認證文件

/etc/pam.d/vsftpd

禁止使用vsftpd的用戶列表文件

/etc/vsftpd/ftpusers

禁止或允許使用vsftpd的用戶列表文件

/etc/vsftpd/user_list

匿名用戶主目錄

/var/ftp

?

8vsftpd.conf文件常用的配置參數說明

1)常用的全局配置

listen_address=192.168.4.1 ?????????設置監聽的IP地址

listen=YES ???????????????????????是否以獨立運行的方式監聽服務

listen_port=21 ????????????????????設置監聽FTP服務的端口號

write_enable=YES ????????????????是否啟用寫入權限

download_enableYES ????????????是否允許下載文件

max_clients=0 ???????????????????限制并發客戶端連接數

max_per_ip=0 ???????????????????限制同一IP地址的并發連接數

pasv_enable=yes ?????????????????設置最小的被動端口號

pasv_min_port=9981 ??????????????設置最小的被動端口號

pasv_max_port=9981 ??????????????設置最大的被動端口號

dirmessage_enable=yes ????????????是否顯示目錄說明文件

xferlog_enable=yes ????????????????是否記錄ftp傳輸過程

xferlog_file=/var/log/vsftpd.log ??????日志的路徑和名字

xferlog_std_format=yes ????????????是否使用標準的ftp xferlog

chown_username=username ?是否改變上傳文件的屬主,如果是則需要輸入一個系統用戶名

idle_session_timeout=600 ?????????設置默認不活躍session時間

date_connection_timeout=120 ??????設置數據傳輸超時時間

ftpd_banner=welcome to ftp server ???定制歡迎信息

?

2)本地用戶訪問限制

userlist_enable=YES ???????是否啟用user_list列表文件

userlist_deny=YES ????????是否禁用user_list中的用戶

?

3)本地用戶權限控制

local_enable=YES ??????????是否啟用本地系統用戶

local_umask=022 ??????????本地用戶所上傳文件的權限掩碼

local_root=/var/ftp ????????設置本地用戶的FTP根目錄

chroot_local_user=YES ??????是否將用戶禁錮在主目錄

local_max_rate=0 ??????????限制最大傳輸速率(字節/秒)

chroot_list_enable=YES ?????配合下面的文件使用

chroot_list_file=/etc/vsftpd/chroot_list ??配合使用,列表中的用戶將被禁錮在目錄中

說明:本地用戶的權限除了使用以上的參數控制以外,還可以使用系統的權限進行控制。ftp的權限和系統的權限都允許時才會放行,只要有一方權限不足使用FTP就會出現權限不足。

4匿名權限控制

anonymous_enable=YES ???????啟用匿名訪問

anon_umask=022 ?????????????匿名用戶所上傳文件的權限掩碼

anon_root=/var/ftp ???????????匿名用戶的FTP根目錄

anon_word_readable_only=YES ?允許匿名下載

anon_upload_enable=YES ?????允許上傳文件anon_mkdir_write_enable=YES:允許創建目錄

anon_other_write_enable=YES ??開放其他寫入權

anon_max_rate=0 ????????????限制最大傳輸速率(字節/秒)

?

說明:匿名用戶賬號名稱默認為ftpanonymous,不需要登錄密碼,默認只能下載無法上傳。

?

9、配置擁有所有權限的匿名用戶

說明:這里為了展示匿名用戶的所有功能才這樣配置,實際中不能這樣配置。

1安裝vsftp軟件,并按照下面配置修改配置文件

[root@localhost ~]# yum -y install vsftpd

[root@localhost ~]# chown ftp /var/ftp/pub/

[root@localhost ~]# cp -a /etc/vsftpd/vsftpd.conf ?/etc/vsftpd/vsftpd.conf.back

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf

anonymous_enable=YES ????啟用匿名訪問

anon_upload_enable=YES ???允許匿名用戶可上傳文件

anon_mkdir_write_enable=YES ??允許匿名用戶可創建目錄

anon_other_write_enable=YES ??開放其他寫入權比如改名,需要手動添加

?

[root@localhost ~]# systemctl restart vsftpd

?

2)在windows上或者Linux上測試即可

a、在Windows上文件里面的地址欄輸入ftp://192.168.115.120/,如下所示:

blob.png

輸入地址以后,進入pub目錄測試能否上傳文件、刪除文件、創建目錄、給文件改名等功能。

?

b、在Linux中匿名登陸FTP服務器需要先yum install ftp軟件,然后輸入ftp 192.168.115.120,之后輸入用戶ftp或者anonymous,密碼為空回車即可登陸。

?

10、配置ftp本地用戶的訪問控制

1)把之前的虛擬機還原,重新安裝vsftpd軟件并創建本地用戶

[root@localhost ~]# yum -y install vsftpd

[root@localhost ~]# chown ftp /var/ftp/pub/

[root@localhost ~]# cp -a /etc/vsftpd/vsftpd.conf ?/etc/vsftpd/vsftpd.conf.back

[root@localhost ~]# useradd user1

[root@localhost ~]# useradd user2

[root@localhost ~]# useradd user3

[root@localhost ~]# echo '123456' | passwd --stdin user1

[root@localhost ~]# echo '123456' | passwd --stdin user2

[root@localhost ~]# echo '123456' | passwd --stdin user3

?

2)修改配置文件設置本地用戶的訪問控制

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf

local_enable=YES ?????啟用本地系統用戶

local_umask=000 ?????修改權限掩碼為000,用系統的setfacl權限限制即可

chroot_local_user=YES ??是否將用戶禁錮在local_root設置的目錄

local_root=/var/ftp ?????設置本地用戶的FTP根目錄

chroot_list_enable=YES ??是否啟用列表控制,啟用后和chroot_list_file配合使用

chroot_list_file=/etc/vsftpd/chroot_list ?該文件要自己創建,列表中的用戶將被禁錮在目錄中

userlist_enable=YES ?????是否開啟用戶列表訪問控制

userlist_deny=YES ???????拒絕訪問FTP用戶列表是否啟用

?

[root@localhost ~]# systemctl restart vsftpd

?

說明:userlist_enable=YES對應/etc/vsftpd/user_list文件靈活控制用戶訪問

?

a?userlist_enable=YES

userlist_deny=YES

滿足這兩個條件時,出現在user_list文件里的用戶會被拒絕訪問FTP服務器

?

buserlist_enable=YES

userlist_deny=NO

滿足這兩個條件時,只允許出現在user_list文件里的用戶登錄FTP服務器

?

c)只要出現在/etc/vsftpd/ftpusers文件里的用戶都禁止登陸FTP服務器,優先級要高于上面的user_list文件

?

3)在WindowsLinux中測試上面的配置是否生效

a)在Windows測試輸入:ftp://192.168.115.106之后輸入對應的本地用戶名和密碼登錄測試

?

b)在Linux測試之前先yum安裝ftp軟件,然后輸入ftp 192.168.115.106回車然后輸入對應的本地用戶名回車然后輸入密碼回車即可進行登錄測試?

?

c如果需要不同用戶給予不同的訪問權限,可以使用系統的setfacl進行設置。

11修改vsftpd服務的監聽地址、端口

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf

listen=YES ?????是否開啟監聽地址和端口

listen_address=192.168.115.120 ????監聽的IP地址,寫FTP服務器的地址

listen_port=2100 ?????監聽的端口,默認為21,建議不修改

注意:上面最后兩行的參數需要手動寫入。

12開啟使用FTP服務器的被動模式

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf

pasv_enable=YES ???????是否開啟被動模式

pasv_min_port=24500 ???傳輸數據時隨機端口最小值

pasv_max_port=24600 ???傳輸數據時隨機端口最大值

注意:上面三行的參數需要手動寫入。