文件傳輸協議(FTP,File Transfer Protocol)
即能夠讓用戶在互聯網中上傳、下載文件的文件協議,而FTP服務器就是支持FTP傳輸協議的主機,要想完成文件傳輸則需要FTP服務端和FTP客戶端的配合才行。
通常用戶使用FTP客戶端軟件向FTP服務器發起連接並發送FTP指令,服務器收到用戶指令后將執行結果返回客戶端。
FTP協議占用兩個端口號:
21端口:命令控制,用於接收客戶端執行的FTP命令。
20端口:數據傳輸,用於上傳、下載文件數據。
FTP數據傳輸的類型:
主動模式:FTP服務端主動向FTP客戶端發起連接請求。
被動模式:FTP服務端等待FTP客戶端的連接請求。
關於vsftpd的相關配置文件
用戶禁止登陸列表 |
/etc/vsftpd/ftpusers |
主配置文件 |
/etc/vsftpd/vsftpd.conf |
vsftpd程序配置文件參數的作用:
listen=[YES|NO] |
是否以獨立運行的方式監聽服務。 |
listen_address=IP地址 |
設置要監聽的IP地址。 |
listen_port=21 |
設置FTP服務的監聽端口 21端口(ftp) 20端口(ftp-date) |
Vsftpd的驗證方式
vsftpd程序提供的FTP服務可選認證方式,分別為匿名訪問、本地用戶和虛擬用戶:
匿名訪問:任何人無需驗證口令即可登入FTP服務端。
本地用戶:使用FTP服務器中的用戶、密碼信息。
虛擬用戶:創建獨立的FTP帳號資料。
顧名思義匿名訪問就是所有人均可隨意登入FTP服務,這樣自然會產生安全問題,一般用於存放公開的數據。
而本地用戶與虛擬用戶則需要用戶提供帳號及口令后才能登入FTP服務,更加的安全,而虛擬用戶則是最安全的。
安裝vsftpd服務程序
# yum install vsftpd -y
清空默認的防火牆默認規則:
# iptables -F
保存清空后的防火牆規則
# service iptables save
匿名訪問模式
FTP匿名訪問模式是比較不安全的服務模式,尤其在真實的工作環境中千萬不要存放敏感的數據,以免泄露。
vsftpd程序默認已經允許匿名訪問模式,我們要做的就是開啟匿名用戶的上傳和寫入權限,寫入下面的參數:
# vim /etc/vsftpd/vsftpd.conf
參數 |
作用 |
anonymous_enable=YES |
允許匿名訪問模式。 |
anon_umask=022 |
匿名用戶上傳文件的umask值。 |
anon_upload_enable=YES |
允許匿名用戶上傳文件 |
anon_mkdir_write_enable=YES |
允許匿名用戶創建目錄 |
anon_other_write_enable=YES |
允許匿名用戶修改目錄名或刪除目錄 |
確認填寫正確后保存並退出vsftpd.conf文件,然后重啟vsftpd服務程序並設置為開機自啟動。
# systemctl restart vsftpd
# systemctl enable vsftpd
如果重啟vsftpd服務程序時沒有報錯,此時便可以使用FTP客戶機(192.168.27.200)嘗試登入FTP服務了
客戶機(192.168.27.200)系統中ftp命令默認沒有安裝,請執行”yum install ftp -y“即可安裝完畢
上面操作中已經將防火牆規則清空,在vsftpd.conf文件中也已經允許匿名用戶創建目錄與寫入權限,那怎么會被拒絕了呢?
回想前面的參數細節,匿名訪問模式的FTP根目錄為/var/ftp
原來匿名用戶的FTP根目錄所有者/組都是root,所以匿名用戶沒有寫入權限,那我們將所有者修改為ftp試試
# chown ftp /var/ftp/pub
此時再用ftp命令嘗試登入FTP服務並創建文件:
ftp> mkdir files
550 Create directory operation failed 還是錯誤
查看所有與ftp相關的SELinux規則:
# getsebool -a | grep ftp
ftp_home_dir --> off
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
ftpd_full_access --> off
ftpd_use_cifs --> off
ftpd_use_fusefs --> off
ftpd_use_nfs --> off
ftpd_use_passive_mode --> off
httpd_can_connect_ftp --> off
httpd_enable_ftp_server --> off
sftpd_anon_write --> off
sftpd_enable_homedirs --> off
sftpd_full_access --> off
sftpd_write_ssh_home --> off
tftp_anon_write --> off
tftp_home_dir --> off
設置SELinux服務對ftp服務的訪問規則策略為允許
# setsebool -P ftpd_full_access=on
此時再來創建文件或目錄就沒有問題了:
[root@guoxiaoyan-hbza ~]# ftp 192.168.27.100
Connected to 192.168.27.100 (192.168.27.100).
220 (vsFTPd 3.0.2)
Name (192.168.27.100:root): anonymous
331 Please specify the password.
Password:敲擊回車
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>cd pub
250 Directory successfully changed.
ftp>mkdir files
257 "/pub/files" created
ftp>rename files database
350 Ready for RNTO.
250 Rename successful.
ftp>rmdir database
250 Remove directory operation successful.
ftp>exit
221 Goodbye.
注意:當完成本實驗后請還原虛擬機快照再進行下一個實驗,否則可能導致配置文件沖突而報錯
本地用戶模式
既然要使用本地用戶模式,而本地用戶模式確實要比匿名訪問模式更加的安全,所以本實驗中會關閉匿名訪問模式。
vsftpd服務程序默認已經允許本地用戶模式,我們要做的是添加設置本地用戶模式權限的參數:
# vim /etc/vsftpd/vsftpd.conf
參數 |
作用 |
anonymous_enable=NO |
禁止匿名訪問模式。 |
local_enable=YES |
允許本地用戶模式。 |
write_enable=YES |
設置可寫入權限。 |
local_umask=022 |
本地用戶模式創建文件的umask值。 |
userlist_deny=YES |
參數值為YES即禁止名單中的用戶,參數值為NO則代表僅允許名單中的用戶。 |
userlist_enable=YES |
允許“禁止登陸名單”,名單文件為ftpusers與user_list。 |
確認填寫正確后保存並退出vsftpd.conf文件,然后重啟vsftpd服務程序並設置為開機自啟動。
# systemctl restart vsftpd
# systemctl enable vsftpd
重啟vsftpd服務程序時沒有報錯,此時便可以使用FTP客戶機(192.168.27.200)嘗試登入FTP服務了
我們先來看下ftpusers或user_list文件中禁止登陸用戶名單:vim /etc/vsftpd/user_list
vsftpd服務為了讓FTP服務更加的安全,默認禁止以root身份登入,那么創建個普通用戶吧:
# useradd linuxprobe
為linuxprobe用戶設置密碼:
(我的沒有問題 直接就出來了)如果再遇到了“操作被拒絕”,應該馬上想到SELinux
查看所有與ftp相關的SELinux規則:
# getsebool -a | grep ftp
ftp_home_dir --> off
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
ftpd_full_access --> off
ftpd_use_cifs --> off
ftpd_use_fusefs --> off
ftpd_use_nfs --> off
ftpd_use_passive_mode --> off
httpd_can_connect_ftp --> off
httpd_enable_ftp_server --> off
sftpd_anon_write --> off
sftpd_enable_homedirs --> off
sftpd_full_access --> off
sftpd_write_ssh_home --> off
tftp_anon_write --> off
tftp_home_dir --> off
設置SELinux對FTP服務的規則為允許:
# setsebool -P ftpd_full_access=on
此時再來創建文件或目錄就沒有問題了: