6.5 FTPServer

https://www.jianshu.com/p/252f901c5a8a

FTP服务器的模式

FTP服务器工作端口

  • TCP21 命令传输端口
  • TCP20 数据传输端口

主动模式

image

FTP主动模式联机示意图

如上图所示,FTP服务器在主动模式下,联机步骤如下:

  1. 建立命令信号通道
    客户机会随机选取大于1024以上的端口(port AA)来与FTP服务器的21端口连接,这个过程需要TCP的三次握手建立可靠的连接,建立连接后,客户机会对服务器进行命令的下达。
  2. 协商阶段
    客户机通知FTP服务器使用主动模式(active)进行数据的传输,并且会告知服务器,自己采用的数据传输的端口号。
  3. 传输数据阶段
    此时,FTP服务器由命令通道知道了客户机的数据传输请求后,且知道了客户机的数据传输端口;服务 器会主动向客户机的数据传输端口建立链接请求,这个时候也会用TCP的三次握手!建立连接后,此时,客户机和服务器共会建立两天可靠的TCP连接,在命令信道进行下载或上传的指令,在数据信道进行实际的数据传输。

注: 一句话总结,主动模式是,服务器端主动发出数据连接请求,客户端等待服务器的主动连接。

被动模式

被动模式主要使用与客户端有防火墙的情况下,如下图中,服务器当主动和客户机进行数据连接请求时,会被客户端的防火墙阻止。

image

由上图可知,由于有防火墙的存在或透过 NAT 的转换后,FTP 服务器只能得知 NAT 的 IP 而不是客户端的 IP , 因此 FTP 服务器会以 port 20 主动的向 NAT 的 port BB 发送主动联机的要求。 但你的 NAT 并没有启动 port BB 来监听 FTP 服务器的联机啊!因此,不能顺利建立数据连接。

解决以上的问题有两种方式

  1. 使用iptables的两个模块,你可以用modprobe这个命令来加载 ip_conntrack_ftp和ip_nat_ftp模块来实现,条件是FTP服务器必须使用标准的21端口
  2. 使用FTP的被动模式,如下图


    image

具体的过程是这样的:

  1. 客户机和服务器建立命令通道
    这和之前主动模式是一样的

  2. 协商连接模式
    这时客户机会使用建立好的命令信道,向服务器发出PASV的被动模式连接要求,并等待服务器的回应。此时客户机并没有告知服务器自己的数据传输端口,只是个请求

  3. 当服务器接收到要求被动模式的连接时,且服务器支持此模式;就会先启动一个大于1024的端口号进入监听状态。这个号码也可以通过自己FTP服务器设定一个范围。之后服务器会透过命令信道,告知客户端自己已经启动的数据传输端口,并等待客户机的连接

  4. 这时,客户机知道了服务器端的数据连接端口后,会随机用一个大于1024的端口号来和服务器的数据端口号进行连接。此时一切OK的话,就可传输数据。
    注:一句话总结,被动模式是服务器端先开启一个数据端口进行监听,等待客户机的连接。而客户机会主动向服务器进行连接。

安装

安装服务端软件

yum install   vsftpd

服务管理

启动服务

systemctl  restart  vsftpd

查看监听端口

 ss    -ntal

输入中应该有 21 号端口被监听
LISTEN      0      32      *:21                  *:*

配置文件 /etc/vsftpd/vsftpd.conf

port_enable=YES|NO
如果你要在数据连接时取消PORT模式时,设此选项为NO。默认值为YES。

connect_from_port_20=YES|NO
控制以PORT模式进行数据传输时是否使用20端口(ftp-data)。YES使用,NO不使用。
默认值为NO,但RHEL 自带的vsftpd.conf文件中此参数设为YES。 

ftp_data_port=port number
设定ftp数据传输端口值(ftp-data)。默认值为20。此参数用于PORT FTP模式。

port_promiscuous=YES|NO
默认值为NO。为YES时,取消PORT安全检查。该检查确保外出的数据只能连接到客户端上。

pasv_enable=YES|NO 
YES,允许数据传输时使用PASV模式。NO,不允许使用PASV模式。默认值为YES。 

pasv_min_port=port number
设定在PASV模式下,建立数据传输所可以使用port范围的下界和上界,0 表示任意。默认值为0。

pasv_max_port=port number 
把端口范围设在比较高的一段范围内,比如50000-60000,将有助于安全性的提高。

pasv_promiscuous=YES|NO
此选项激活时,将关闭PASV模式的安全检查。该检查确保数据连接和控制连接是来自同一个IP地址。小心打开此选项。此选项唯一合理的用法是存在于由安全隧道方案构成的组织中。默认值为NO。

 pasv_address=
此选项为一个数字IP地址,作为PASV命令的响应。默认值为none,即地址是从呼入的连接套接字(incoming connectd socket)中获取  

三、FTP服务器的用户分类

匿名用户 (anonymous或ftp)
本地用户(local user)
虚拟用户(guest) use_localtime=YES //使用本地主机的时间,建议设置

  1. 匿名用户的配置选项
anonymous_enable=YES|NO  
控制是否允许匿名用户登录,YES允许,NO不允许,默认值为YES。

 ftp_username=   
匿名用户所使用的系统用户名。默认下,此参数在配置文件中不出现,值为ftp

no_anon_password=YES|NO  
控制匿名用户登入时是否需要密码,YES不需要,NO需要。默认值为NO。

 deny_email_enable=YES|NO  
此参数默认值为NO。当值为YES时,拒绝使用banned_email_file参数指定文件中所列出的e-mail地址进行登录的匿名用户。
即,当匿名用户使用 banned_email_file 文件中所列出的e-mail进行登录时,被拒绝。
显然,这对于阻击某些Dos攻击有效。当此参数生效时,需追加banned_email_file参数 

 banned_email_file=/etc/vsftpd.banned_emails   
指定包含被拒绝的e-mail地址的文件,默认文件为/etc/vsftpd.banned_emails。 

 anon_root=
设定匿名用户的根目录,即匿名用户登入后,被定位到此目录下。主配置文件中默认无此项,默认值为/var/ftp/。

anon_world_readable_only=YES|NO   
控制是否只允许匿名用户下载可阅读文档。YES,只允许匿名用户下载可阅读的文件。NO,允许匿名用户浏览整个服务器的文件系统。默认值为YES。 

anon_upload_enable=YES|NO  
控制是否允许匿名用户上传文件,YES允许,NO不允许,默认是不设值,即为NO。
除了这个参数外,匿名用户要能上传文件,还需要两条件:
一、write_enable=YES;
二、在文件系统上,目录有写权限。 

 anon_mkdir_write_enable=YES|NO   
 控制是否允许匿名用户创建新目录,YES允许,NO不允许,默认是不设值,即为NO。当然在文件系统上,FTP匿名用户必需对新目录的上层目录拥有写权限。 • 如果要设定为 YES, 那么 anony_other_write_enable 必须设定为 YES

anon_other_write_enable=YES|NO 
控制匿名用户是否拥有除了上传和新建目录之外的其他权限,如删除、更名等。YES拥有,NO不拥有,默认值为NO。

chown_uploads=YES|NO   
是否修改匿名用户所上传文件的所属主。YES,匿名用户所上传的文件的所有权将改为另外一个不同的用户所有,用户由chown_username参数指定。此选项默认值为NO 

chown_username=whoever   
指定拥有匿名用户所上传文件的所属主的用户。此参数与chown_uploads一起用。不推荐使用root用户。 

  1. 本地用户配置选项
local_enable=YES|NO   
控制服务器的本地用户是否可以登录vsftpd。默认值为YES。

local_root=   
定义所有本地用户的根目录。当本地用户登入时,将被更换到此目录下。默认值为无此配置语句。

user_config_dir=   
定义用户个人配置文件所在的目录。用户的个人配置文件为该目录下的同名文件。个人配置文件的格式与vsftpd.conf格式相同。
例如定义user_config_dir=/etc/vsftpd/userconf,并且主机上有用户zenxiaoxian,那我们可以在user_config_dir的目录新增名为zenxiaoxian的文件。当用户zenxiaoxian登入时,VSFTPD则会读取user_config_dir下zenxiaoxian这个文件中的设定值,应用于用户zenxiaoxian。默认值为无 

  1. 虚拟用户配置选项

虚拟用户就是可以使用一个 Linux 系统中不存在的用户。
让这个虚拟用户使用 ftp

guest_enable=YES|NO   
若是启动这项功能,所有的非匿名登入者都视为guest。默认值为关闭。 

guest_username= 
定义VSFTPD的虚拟用户在系统中所映射的本地用户名。默认值为ftp。  

  1. 用户的登陆控制
pam_service_name=vsftpd
指出VSFTPD进行PAM认证时所使用的PAM配置文件名,默认值是vsftpd,默认PAM配置文件是  /etc/pam.d/vsftpd。 

/etc/vsftpd/ftpusers
VSFTPD禁止列在此文件中的用户登录FTP服务器。这个机制是在/etc/pam.d/vsftpd中默认设置的。

userlist_enable=YES|NO   
此选项为YES时,VSFTPD将读取userlist_file参数所指定的文件中的用户列表。当列表中的用户登录FTP服务器时,该用户在提示输入密码之前就被禁止了。即该用户名输入后,VSFTPD查到该用户名在列表,VSFTPD就直接禁止掉该用户,不会再进行询问密码等后续步聚。默认值为NO。 

userlist_file=/etc/vsftpd/user_list
指出userlist_enable选项生效后,被读取的包含用户列表的文件。默认值是/etc/vsftpd/user_list。

userlist_deny=YES|NO   
决定禁止还是只允许由userlist_file指定文件中的用户登录FTP服务器。此选项在userlist_enable 选项启动后才生效。YES,默认值,禁止文件中的用户登录,同时也不向这些用户发出输入口令的提示。NO,只允许在文件中的用户登录FTP服务器。 

tcp_wrappers=YES|NO
在VSFTPD中使用TCP_Wrappers远程访问控制机制,默认值为YES 

  1. 用户的目录访问控制
chroot_list_enable=YES|NO  
锁定某些用户在自家目录中。即当这些用户登录后,不可以转到系统的其他目录,只能在自家目录(及其子目录)下。具体的用户在chroot_list_file参数所指定的文件中列出。默认值为 注释。   

chroot_list_file=/etc/vsftpd/chroot_list  
指出被锁定在自家目录中的用户的列表文件。文件格式为一行一用户。
通常该文件是/etc/vsftpd/chroot_list。此选项默认不设置。  

chroot_local_users=YES|NO  
将本地用户锁定在自家目录中。
当此项被激活时,chroot_list_enable=YES参数的作用将发生变化,chroot_list_file所指定文件中的用户将不被锁定在自家目录。本参数被激活后,可能带来安全上的冲突 

passwd_chroot_enable   
当此选项激活时,与chroot_local_user选项配合,chroot()容器的位置可以在每个用户的基础上指定。每个用户的容器来源于/etc/passwd中每个用户的自家目录字段。默认值为NO  

tcp_wrappers=YES
支持 TCP Wrappers 的防火墙机制

客户端操作

安装客户软件

yum install -y lftp

连接到 FTP Server

lftp 172.18.0.2 
# lftp   FTP Server 的 ip

基本操作

查看

lftp 172.18.0.2:/> ls
-rw-r--r--    1 0        0            4707 Jul 29 11:03 an.cfg
drwxr-xr-x    2 0        0            4096 Jul 29 11:13 pub

执行 shell 命令

lftp 172.18.0.2:/> !ls

下载单一文件

lftp 172.18.0.2:/> get an.cfg
4707 bytes transferred

下载目录

lftp 172.18.0.2:/> mirror pub

你可能感兴趣的:(6.5 FTPServer)