FTP简介
FTP(File Transfer Protocol)是一种用于在计算机之间传输文件的标准网络协议。在FTP中,有两种传输模式:主动模式(Active Mode)和被动模式(Passive Mode)。
- 主动模式:在主动模式下,客户端首先建立与服务器的命令连接(使用端口21),然后发送PORT命令指定客户端数据端口(通常是一个随机选择的高位端口),服务器接收到命令后会主动连接客户端的数据端口(使用端口20)。在数据连接建立后,文件传输从服务器启动,服务器将文件传输到客户端指定的数据端口,客户端使用该端口接收文件。
- 被动模式:在被动模式下,客户端首先建立与服务器的命令连接(使用端口21),然后发送PASV命令告知服务器将使用被动模式进行文件传输。服务器收到PASV命令后,会在一个大范围的端口中选择一个空闲端口作为数据端口,并通过命令连接告知客户端使用的数据端口。然后客户端会建立第二个数据连接(使用所收到的端口),服务器使用该数据连接将文件传输到客户端。
主动模式和被动模式的区别在于数据连接的建立方式:
- 在主动模式下,服务器主动连接客户端的数据端口。
- 在被动模式下,客户端建立与服务器的数据连接。
主动模式在大多数情况下是可行的,但当客户端处于防火墙或NAT(网络地址转换)后面时,可能会导致连接问题。被动模式通过使客户端建立数据连接来解决这个问题,因此通常在网络环境复杂或存在防火墙的情况下更可靠。
# 默认不使用被动模式,防止因为网络原因导致服务异常
pasv_enable=NO
匿名配置
- pub目录及其同级目录文件可下载不可删除,文件可上传到pub目录下,当anon_other_write_enable=YES上传文件可删除。
chown ftp /var/ftp/pub/
echo \
'anonymous_enable=YES
anon_umask=077
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
no_anon_password=YES
local_enable=NO
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
pasv_enable=NO' > /etc/vsftpd/vsftpd.conf
systemctl restart vsftpd.service
firewall-cmd --permanent --add-service=ftp
firewall-cmd --reload
虚拟用户配置
cd /etc/vsftpd/
useradd -d /var/ftproot -s /sbin/nologin virtual
chmod -Rf 755 /var/ftproot
echo \
'auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser' \
> /etc/pam.d/vsftpd.vu
echo \
'anonymous_enable=NO
local_enable=YES
write_enable=YES
guest_enable=YES
guest_username=virtual
allow_writeable_chroot=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd.vu
user_config_dir=/etc/vsftpd/vusers_dir/
anon_world_readable_only=NO
pasv_enable=NO' > /etc/vsftpd/vsftpd.conf
echo -e 'tom\ntom' > vuser.list
db_load -T -t hash -f vuser.list vuser.db
chmod 600 vuser.db
mkdir /etc/vsftpd/vusers_dir
echo 'anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES' > /etc/vsftpd/vusers_dir/tom
systemctl restart vsftpd.service
firewall-cmd --permanent --add-service=ftp
firewall-cmd --reload
- 登录成功后,服务器异常,检查SELinux 策略