
上文:Linux服務器配置-VSFTP服務配置(二)
一、vsftpd服務防火墻配置
1、主動(POST)模式 FTP 防火墻配置
- CentOS6 系統 iptables 的配置
iptables -t filter --line-number -nL INPUT#顯示現有防火墻規則,查看是否開啟20、21號端口。
iptables -t filter -I INPUT -p tcp -m multiport --dport 20,21 -m state --state NEW -j ACCEPT #如沒有開啟端口,添加規則,開啟20、21號端口。
service iptables save#保存防火墻設置。
service iptables restart #重啟防火墻。
iptables -t filter --line-number -nL INPUT#查看新添加的規則是否成功。

- RHEL7 系統 firewalld 的配置
方法1—通過添加FTP服務規則,開啟防火墻通道。
firewall-cmd --list-services #查看防火墻是否允許FTP服務通過。
firewall-cmd --permanent --zone=public --add-service=ftp #如沒有允許FTP服務通過,添加防火墻規則允許其通過。
firewall-cmd --reload #重新加載防火墻。
firewall-cmd --list-all #查看新添加的防火墻規則是否允許FTP服務通過。

方法2—通過添加端口規則,開啟防火墻通道。
firewall-cmd --list-ports #查看防火墻是否開啟20、21端口。
firewall-cmd --permanent --zone=public --add-port=20-21/tcp #如沒有開啟端口,添加規則,開啟20、21號端口。
firewall-cmd --reload #重新加載防火墻
firewall-cmd --list-all #查看新添加的規則是否成功。

以上兩種方法使用哪一種都可以。
2、被動(PASV)模式FTP防火墻配置
如果FTP開啟被動(PASV)模式,就需要修改配置文件(vsftpd.conf),指定一個端口范圍,然后根據這個端口范圍來配置防火墻。
下面是配置文件指定的端口范圍
pasv_enable=YES
pasv_min_port=59800
pasv_max_port=59900
- CentOS6系統iptables的配置
iptables -t filter --line-number -nL INPUT#顯示現有防火墻規則,查看是否開啟21號端口。
iptables -t filter -I INPUT -p tcp -m tcp --dport 21 -m state --state NEW -j ACCEPT#如沒有開啟端口,添加規則,開啟21號端口。
iptables -t filter -I INPUT -p tcp -m tcp --dport 59800:59900 -m state --state NEW -j ACCEPT#開啟被動端口。
service iptables save#保存防火墻設置。
service iptables restart #重啟防火墻。
iptables -t filter --line-number -nL INPUT #查看新添加的規則是否成功。

- RHEL7系統firewalld的配置
方法1—通過添加FTP服務規則,開啟防火墻通道。
firewall-cmd --list-services #查看防火墻是否允許FTP服務通過。
firewall-cmd --permanent --zone=public --add-service=ftp #如沒有允許FTP服務通過,添加防火墻規則允許其通過。
firewall-cmd --permanent --zone=public --add-port=59800-59900/tcp #開啟被動端口。
firewall-cmd --reload #重新加載防火墻。
firewall-cmd --list-all #查看新添加的防火墻規則是否允許FTP服務通過。

方法2—通過添加端口規則,開啟防火墻通道。
firewall-cmd --list-ports #查看防火墻是否開啟21端口。
firewall-cmd --permanent --zone=public --add-port=21/tcp #如沒有開啟端口,添加規則,開啟21號端口。
firewall-cmd --permanent --zone=public --add-port=59800-59900/tcp #開啟被動端口。
firewall-cmd --reload #重新加載防火墻。
firewall-cmd --list-all #查看新添加的規則是否成功。

以上兩種方法使用哪一種都可以。
注:在Windows下用ftp命令連接,都是采用主動模式連接,可以采用圖形界面的FTP工具軟件,默認一般為被動模式。
二、SELinux中關于vsftpd服務的說明
1、vsftp 的 SELinux 的文件類型
SElinux 一共定義了兩種文件類型用于設置 vsftp 服務器。
public_content_t
說明:vsftpd服務可以讀取的文件和目錄,其他服務如 Apache、Samba 和 NFS 也可以,但是 public_content_t 類型的文件不能被寫入,即使 Linux 權限允許。
public_content_rw_t
說明:vsftpd服務可以讀取和寫入的文件和目錄,其他服務其他服務如 Apache,Samba 和 NFS 也可以,不過必須開放相關的布爾變量。
2、vsftp 的布爾變量
下面是常用的布爾變量。
allow_ftpd_anon_write
說明:關閉這個布爾變量會阻止 vsftpd 讀取 public_content_rw_t 類型的文件和目錄。如果允許用戶通過 FTP 上傳文件。必須開放這個布爾變量。
allow_ftpd_full_access
說明:當開放這個布爾變量時只有 Linux(DAC)的權限來控制訪問,通過驗證的用戶可以讀取和寫入標記為 public_content_t 或 public_content_rw_t 類型的文件。
allow_ftpd_use_cif
說明:當開放這個布爾變量時 vsftpd 允許 cifs_t 類型的文件和目錄,因此這個布爾變量啟用,可以讓你的 FTP 服務器可以使用 Samba 文件系統。
allow_ftpd_use_nfs vsftpd
說明:當開放這個布爾變量時 vsftpd 允許 nfs_t 類型的文件和目錄,因此這個布爾變量啟用,可以讓你的 FTP 服務器可以使用 NFS 文件系統。
ftp_home_dir
說明:當開放這個布爾變量時認證用戶可以讀寫自己的主目錄中的文件。
ftpd_connect_db
說明:當開放這個布爾變量時允許 vsftpd 連接數據庫。
httpd_enable_ftp_server
說明:當開放這個布爾變量時容許的 httpd 作為 FTP 服務器,并且監聽 FTP 端口。
tftp_anon_write
說明:當開放這個布爾變量時允許 TFTP 訪問一個公共的目錄。
注:關于SELinux 環境下的 FTP 配置將在實例中加以說明。
三、匿名認證登錄FTP配置
匿名方式登錄FTP服務器是一種最不安全的認證方式,因為任何人都可以無需密碼訪問FTP服務器中的數據。但在企業內部局域網中可以通過這種方式共享一些不重要的數據文件(比如軟件的共享等)。
vsftpd服務程序安裝完成并啟動服務后,默認是開啟匿名訪問的,但只是提供查看和下載文件的權限,如果需要開放匿名用戶的上傳、創建、刪除、更名文件的權限,就需要做一些相應的配置,針對匿名用戶放開這些權限會帶來潛在的危險,這里為了在Linux系統中練習配置vsftpd服務程序而放開了這些權限,不建議在生產環境中使用匿名登錄方式。
1、配置軟件環境說明
CentOS6系統:
CentOS release 6.10 (Final)
vsftpd-2.2.2-24.el6.x86_64
RHEL7系統
Red Hat Enterprise Linux Server release 7.6 (Maipo)
vsftpd-3.0.2-25.el7.x86_64

服務器配置要求:
FTP服務采用被動模式運行,并只允許匿名用戶登錄,匿名用戶具有可下載、上傳、新建目錄(文件)、更名、及刪除文件的權限。
2、備份原有配置文件
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
3、修改配置文件(/etc/vsftpd/vsftpd.conf)
說明:此配置文件將一般常用的設置項全部列出,需要用到的時候更改相應的設置即可。
listen_port=21
connect_from_port_20=NO
pasv_enable=YES
pasv_min_port=59800
pasv_max_port=59900
listen=YES
listen_ipv6=NO
max_clients=0
max_per_ip=0
one_process_model=NO
connect_timeout=60
accept_timeout=60
data_connection_timeout=300
idle_session_timeout=300
dirmessage_enable=YES
message_file=.message
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
write_enable=YES
download_enable=YES
tcp_wrappers=YES
userlist_enable=YES
userlist_deny=YES
userlist_file=/etc/vsftpd/user_list
xferlog_enable=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
use_localtime=YES
anonymous_enable=YES
anon_world_readable_only=YES
anon_other_write_enable=YES
anon_mkdir_write_enable=YES
anon_upload_enable=YES
chown_uploads=NO
chown_username=username
no_anon_password=NO
ftp_username=ftp
anon_root=/var/ftp
anon_max_rate=0
anon_umask=077
local_enable=NO
local_umask=022
file_open_mode=0666
local_root=/home/username
local_max_rate=0
user_config_dir=/etc/vsftpd/userconf
pam_service_name=vsftpd
guest_enable=NO
guest_username=ftp
virtual_use_local_privs=NO
user_config_dir=/etc/vsftpd/vuser_config
4、重啟vsftp服務
- CentOS6系統
service vsftpd restart
- RHEL7系統
systemctl restart vsftpd
5、修改FTP上傳目錄的所有者
因為匿名用戶,使用ftp用戶身份來訪問FTP服務器,所以需將FTP允許上傳文件的目錄的所有者更改為ftp。
匿名用戶不能直接對FTP根目錄進行寫操作,只有在下級目錄中才可以,所以這里設置可對pub目錄進行寫操作。
chown -Rf ftp /var/ftp/pub

6、修改SELinux中 vsftp 的布爾變量
CentOS6系統
setsebool -P allow_ftpd_full_access on
RHEL7系統
setsebool -P ftpd_full_access on

上圖為CentOS6系統實例
7、驗證配置結果

以上是我在學習Linux系統中整理的一些學習要點,肯定會有不對的地方,希望各位大俠給與指正,我們共同學習!謝謝!
下篇:Linux服務器配置-VSFTP服務配置(四)
通過實例說明如何配置本地用戶登錄FTP服務器。