ftp

1.ftp简介

ftp是一种较为古老的文件传输服务,可实现文件的共享以及传输。其服务器端有两个端口,一个是控制端口(默认21),控制端口负责ftp的连接控制,还有一个端口是传输端口,其主动模式时,传输端口默认为20端口,在其为被动模式时,默认为1000以后的大端口号。ftp服务的版本服务很多,vsftp是其中一个分支,译为非常安全的文件服务。

2.主动模式与被动模式

ftp其运行时有两种工作模式,主动模式与被动模式。

(1) PORT(主动模式)

PORT中文称为主动模式,工作的原理: FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,客户端随机开放一个端口(1024以上),发送 PORT命令到FTP服务器,告诉服务器客户端采用主动模式并开放端口;FTP服务器收到PORT主动模式命令和端口号后,通过服务器的20端口和客户端开放的端口连接,发送数据,原理如下图:
img

(2) PASV(被动模式)

PASV是Passive的缩写,中文成为被动模式,工作原理:FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,发送PASV命令到FTP服务器, 服务器在本地随机开放一个端口(1024以上),然后把开放的端口告诉客户端, 客户端再连接到服务器开放的端口进行数据传输,原理如下图:
img

3.两种模式对于防火墙的影响

主动模式之所以称为主动模式,是因为在两端传输端口通道建立时,是服务器端(21端口)主动与客户端(1024+随机端口)请求建立连接。这其中可能出现的问题是,我们都知道,防火墙是有入口和出口的,通常客户端的入端口在防火墙策略里面是关闭的,故也无法成功连接客户端的传输接口。而在被动模式中,是服务器端开放一个大于1024的随机接口,然后通过控制接口告知客户端,让客户端来主动请求建立连接。在这里,客户端的防火墙不会是问题所在,因为客户端出端口一般默认不会做限制,而两个连接请求也都是客户端发起的,但此时,服务器端除了开放自己21的控制端口以外,还需要特别开放一个随机端口范围(这个范围由ftp启动被动模式时定义的范围)。

综上所述,在服务器端需要面对大量客户端时,最好选择被动模式,这样不会让客户端因为自己的防火墙入口关闭而受到影响。

4.vsftpd

vsftpd安装很简单 redhad 或centos直接使用

1
yum -y install vsftpd

rpm -ql vsftpd #查看vsftpd安装的所有文件

4.1配置文件

vsftpd配置文件目录:/etc/vsftpd/vsftpd.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# 是否允许匿名登录FTP服务器,默认设置为YES允许
# 用户可使用用户名ftp或anonymous进行ftp登录,口令为用户的E-mail地址。
# 如不允许匿名访问则设置为NO
anonymous_enable=YES
# 是否允许本地用户(即linux系统中的用户帐号)登录FTP服务器,默认设置为YES允许
# 本地用户登录后会进入用户主目录,而匿名用户登录后进入匿名用户的下载目录/var/ftp/pub
# 若只允许匿名用户访问,前面加上#注释掉即可阻止本地用户访问FTP服务器
local_enable=YES
# 是否允许本地用户对FTP服务器文件具有写权限,默认设置为YES允许
write_enable=YES
# 掩码,本地用户默认掩码为077
# 你可以设置本地用户的文件掩码为缺省022,也可根据个人喜好将其设置为其他值
#local_umask=022
# 是否允许匿名用户上传文件,须将全局的write_enable=YES。默认为YES
#anon_upload_enable=YES
# 是否允许匿名用户创建新文件夹
#anon_mkdir_write_enable=YES
# 是否激活目录欢迎信息功能
# 当用户用CMD模式首次访问服务器上某个目录时,FTP服务器将显示欢迎信息
# 默认情况下,欢迎信息是通过该目录下的.message文件获得的
# 此文件保存自定义的欢迎信息,由用户自己建立
#dirmessage_enable=YES
# 是否让系统自动维护上传和下载的日志文件
# 默认情况该日志文件为/var/log/vsftpd.log,也可以通过下面的xferlog_file选项对其进行设定
# 默认值为NO
xferlog_enable=YES
# Make sure PORT transfer connections originate from port 20 (ftp-data).
# 是否设定FTP服务器将启用FTP数据端口的连接请求
# ftp-data数据传输,21为连接控制端口
connect_from_port_20=YES
# 设定是否允许改变上传文件的属主,与下面一个设定项配合使用
# 注意,不推荐使用root用户上传文件
#chown_uploads=YES
# 设置想要改变的上传文件的属主,如果需要,则输入一个系统用户名
# 可以把上传的文件都改成root属主。whoever:任何人
#chown_username=whoever
# 设定系统维护记录FTP服务器上传和下载情况的日志文件
# /var/log/vsftpd.log是默认的,也可以另设其它
#xferlog_file=/var/log/vsftpd.log
# 是否以标准xferlog的格式书写传输日志文件
# 默认为/var/log/xferlog,也可以通过xferlog_file选项对其进行设定
# 默认值为NO
#xferlog_std_format=YES
# 以下是附加配置,添加相应的选项将启用相应的设置
# 是否生成两个相似的日志文件
# 默认在/var/log/xferlog和/var/log/vsftpd.log目录下
# 前者是wu_ftpd类型的传输日志,可以利用标准日志工具对其进行分析;后者是vsftpd类型的日志
#dual_log_enable
# 是否将原本输出到/var/log/vsftpd.log中的日志,输出到系统日志
#syslog_enable
# 设置数据传输中断间隔时间,此语句表示空闲的用户会话中断时间为600秒
# 即当数据传输结束后,用户连接FTP服务器的时间不应超过600秒。可以根据实际情况对该值进行修改
#idle_session_timeout=600
# 设置数据连接超时时间,该语句表示数据连接超时时间为120秒,可根据实际情况对其个修改
#data_connection_timeout=120
# 运行vsftpd需要的非特权系统用户,缺省是nobody
#nopriv_user=ftpsecure
# 是否识别异步ABOR请求。
# 如果FTP client会下达“async ABOR”这个指令时,这个设定才需要启用
# 而一般此设定并不安全,所以通常将其取消
#async_abor_enable=YES
# 是否以ASCII方式传输数据。默认情况下,服务器会忽略ASCII方式的请求。
# 启用此选项将允许服务器以ASCII方式传输数据
# 不过,这样可能会导致由"SIZE /big/file"方式引起的DoS攻击
#ascii_upload_enable=YES
#ascii_download_enable=YES
# 登录FTP服务器时显示的欢迎信息
# 如有需要,可在更改目录欢迎信息的目录下创建名为.message的文件,并写入欢迎信息保存后
#ftpd_banner=Welcome to blah FTP service.
# 黑名单设置。如果很讨厌某些email address,就可以使用此设定来取消他的登录权限
# 可以将某些特殊的email address抵挡住。
#deny_email_enable=YES
# 当上面的deny_email_enable=YES时,可以利用这个设定项来规定哪些邮件地址不可登录vsftpd服务器
# 此文件需用户自己创建,一行一个email address即可
#banned_email_file=/etc/vsftpd/banned_emails
# 用户登录FTP服务器后是否具有访问自己目录以外的其他文件的权限
# 设置为YES时,用户被锁定在自己的home目录中,vsftpd将在下面chroot_list_file选项值的位置寻找chroot_list文件
# 必须与下面的设置项配合
#chroot_list_enable=YES
# 被列入此文件的用户,在登录后将不能切换到自己目录以外的其他目录
# 从而有利于FTP服务器的安全管理和隐私保护。此文件需自己建立
#chroot_list_file=/etc/vsftpd/chroot_list
# 是否允许递归查询。默认为关闭,以防止远程用户造成过量的I/O
#ls_recurse_enable=YES
# 是否允许监听。
# 如果设置为YES,则vsftpd将以独立模式运行,由vsftpd自己监听和处理IPv4端口的连接请求
listen=YES
# 设定是否支持IPV6。如要同时监听IPv4和IPv6端口,
# 则必须运行两套vsftpd,采用两套配置文件
# 同时确保其中有一个监听选项是被注释掉的
#listen_ipv6=YES
# 设置PAM外挂模块提供的认证服务所使用的配置文件名,即/etc/pam.d/vsftpd文件
# 此文件中file=/etc/vsftpd/ftpusers字段,说明了PAM模块能抵挡的帐号内容来自文件/etc/vsftpd/ftpusers中
#pam_service_name=vsftpd
# 是否允许ftpusers文件中的用户登录FTP服务器,默认为NO
# 若此项设为YES,则user_list文件中的用户允许登录FTP服务器
# 而如果同时设置了userlist_deny=YES,则user_list文件中的用户将不允许登录FTP服务器,甚至连输入密码提示信息都没有
#userlist_enable=YES/NO
# 设置是否阻扯user_list文件中的用户登录FTP服务器,默认为YES
#userlist_deny=YES/NO
# 是否使用tcp_wrappers作为主机访问控制方式。
# tcp_wrappers可以实现linux系统中网络服务的基于主机地址的访问控制
# 在/etc目录中的hosts.allow和hosts.deny两个文件用于设置tcp_wrappers的访问控制
# 前者设置允许访问记录,后者设置拒绝访问记录。
# 如想限制某些主机对FTP服务器192.168.57.2的匿名访问,编缉/etc/hosts.allow文件,如在下面增加两行命令:
# vsftpd:192.168.57.1:DENY 和vsftpd:192.168.57.9:DENY
# 表明限制IP为192.168.57.1/192.168.57.9主机访问IP为192.168.57.2的FTP服务器
# 此时FTP服务器虽可以PING通,但无法连接
tcp_wrappers=YES

VSFTPD登录方式:

vsftpd的配置项较多,但都是”配置项”=”xx”这种格式,其本身有三种登录方式

:匿名用户登录,本地用户登录,虚拟用户登录

1.匿名用户登录

anonymous_enable=YES

只要设置这行就表示允许匿名用户登录了

匿名用户使用的登陆名为ftp或anonymous,口令为空

匿名用户(anonymous)设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#控制是否允许匿名用户登入,YES 为允许匿名登入,NO 为不允许。默认值为 YES。
anonymous_enable=YES/NO(YES)

#是否允许登陆用户有写权限。属于全局设置,默认值为 YES。
write_enable=YES/NO(YES)

#若是启动这项功能,则使用匿名登入时,不会询问密码。默认值为 NO。
no_anon_password=YES/NO(NO)

#定义匿名登入的使用者名称。默认值为 ftp。
ftp_username=ftp

#使用匿名登入时,所登入的目录。默认值为/var/ftp。注意 ftp目录不能是 777的权限属性,即匿名用户的家目录不能有 777的权限。
anon_root=/var/ftp

#如果设为 YES,则允许匿名登入者有上传文件(非目录)的权限,只有在 write_enable=YES时,此项才有效。当然,匿名用户必须要有对上层目录的写入权。默认值为 NO
anon_upload_enable=YES/NO(NO)

#如果设为 YES,则允许匿名登入者下载可阅读的档案(可以下载到本机阅读,不能直接在 FTP服务器中打开阅读)。默认值为 YES。
anon_world_readable_only=YES/NO(YES)

#如果设为 YES,则允许匿名登入者有新增目录的权限,只有在 write_enable=YES时,此项才有效。当然,匿名用户必须要有对上层目录的写入权。默认值为 NO。
anon_mkdir_write_enable=YES/NO(NO)

#如果设为 YES,则允许匿名登入者更多于上传或者建立目录之外的权限,譬如删除或者重命名。(如
果 anon_upload_enable=NO,则匿名用户不能上传文件,但可以删除或者重命名已经存在的文件;如
果 anon_mkdir_write_enable=NO,则匿名用户不能上传或者新建文件夹,但可以删除或者重命名已经
存在的文件夹。)默认值为 NO。
anon_other_write_enable=YES/NO(NO)

#设置是否改变匿名用户上传文件(非目录)的属主。默认值为 NO。
chown_uploads=YES/NO(NO)

#设置匿名用户上传文件(非目录)的属主名。建议不要设置为 root。
chown_username=username

#设置匿名登入者新增或上传档案时的 umask 值。默认值为 077,则新建档案的对应权限为 700。
anon_umask=077

#若是启动这项功能,则必须提供一个档案/etc/vsftpd/banner_emails,内容为 email address。若是
使用匿名登入,则会要求输入 email address,若输入的 email address 在此档案内,则不允许进入。
默认值为 NO。
deny_email_enable=YES/NO(NO)

#此文件用来输入 email address,只有在 deny_email_enable=YES时,才会使用到此档案。若是使用匿名登入,则会要求输入 email address,若输入的 email address 在此档案内,则不允许进入。
banned_email_file=/etc/vsftpd/banner_emails

匿名登录最重要的还是anonymous_enable=YES这个配置,表示启用了匿名

下面是我配置好的匿名登录配置文件:vsftpd.conf

allow_writeable_chroot=YES
anonymous_enable=YES
no_anon_password=YES
ftp_username=ftp
anon_root=/var/ftp
anon_upload_enable=YES
anon_world_readable_only=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
chown_uploads=YES
chown_username=nobody
anon_umask=077
#local_enable=YES
#write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
listen_ipv6=NO
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

其中local_enable表示的是本地用户登录,no表示本地用户不能登录,需要注意的是ftp服务的读写权限首先是配置文件里面定义的权限,然后是本地文件夹本身的权限。我这里发现一个问题是这个报错:500 OOPS: vsftpd: refusing to run with writable root inside chroot(),我去网上搜索了一下,网上基本都说是这个问题:

从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误。要修复这个错误,可以用命令chmod a-w /home/user去除用户主目录的写权限,注意把目录替换成你自己的。或者你可以在vsftpd的配置文件中增加下列两项中的一项:allow_writeable_chroot=YES

但根据我测试,只能将根目录取消写权限。加这一行配置并没用,但根目录里面的文件或文件夹加上写权限并不会影响使用。

如测试连接出现这个报错,去掉tcp_wrappers配置重启即可:

500 OOPS: tcp_wrappers is set to YES but no tcp wrapper support compiled in

2.本地用户登录

本地用户设置

local_enable=YES/NO****(YES)

控制是否允许本地用户登入,YES 为允许本地用户登入,NO为不允许。默认值为YES。

local_root=/home/username

当本地用户登入时,将被更换到定义的目录下。默认值为各用户的家目录。

write_enable=YES/NO****(YES)

是否允许登陆用户有写权限。属于全局设置,默认值为YES。

local_umask=022

本地用户新增档案时的umask 值。默认值为077。

file_open_mode=0755

本地用户上传档案后的档案权限,与chmod 所使用的数值相同。默认值为0666

目录锁定配置:

在默认配置下,本地用户登入FTP后可以使用cd命令切换到其他目录,这样会对系统带来安全隐患。可以通过以下三条配置文件来控制用户切换目录。

chroot_list_enable=YES/NO****(NO)

设置是否启用chroot_list_file配置项指定的用户列表文件。默认值为NO。

chroot_list_file=/etc/vsftpd.chroot_list

用于指定用户列表文件,该文件用于控制哪些用户可以切换到用户家目录的上级目录。

chroot_local_user=YES/NO****(NO)

用于指定用户列表文件中的用户是否允许切换到上级目录。默认值为NO。

通过搭配能实现以下几种效果:

当chroot_list_enable=YES,chroot_local_user=YES时,在/etc/vsftpd.chroot_list文件中列出的用户,可以切换到其他目录;未在文件中列出的用户,不能切换到其他目录。

当chroot_list_enable=YES,chroot_local_user=NO时,在/etc/vsftpd.chroot_list文件中列出的用户,不能切换到其他目录;未在文件中列出的用户,可以切换到其他目录。

当chroot_list_enable=NO,chroot_local_user=YES时,所有的用户均不能切换到其他目录。

当chroot_list_enable=NO,chroot_local_user=NO时,所有的用户均可以切换到其他目录。

控制用户访问:

对于用户的访问控制可以通过/etc目录下的vsftpd.user_list和ftpusers文件来实现。

userlist_file=/etc/vsftpd.user_list

控制用户访问FTP的文件,里面写着用户名称。一个用户名称一行。

userlist_enable=YES/NO****(NO)

是否启用vsftpd.user_list文件。

userlist_deny=YES/NO****(YES)

决定vsftpd.user_list文件中的用户是否能够访问FTP服务器。若设置为YES,则vsftpd.user_list文件中的用户不允许访问FTP,若设置为NO,则只有vsftpd.user_list文件中的用户才能访问FTP。

/etc/vsftpd/ftpusers文件专门用于定义不允许访问FTP服务器的用户列表(注意:如果userlist_enable=YES,userlist_deny=NO,此时如果在vsftpd.user_list和ftpusers中都有某个用户时,那么这个用户是不能够访问FTP的,即ftpusers的优先级要高)。默认情况下vsftpd.user_list和ftpusers,这两个文件已经预设置了一些不允许访问FTP服务器的系统内部账户。如果系统没有这两个文件,那么新建这两个文件,将用户添加进去即可。

下面是我配置好的本地用户登录配置文件 vsftpd.conf:

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
listen_ipv6=NO
pam_service_name=vsftpd
userlist_enable=YES
chroot_local_user=YES
local_root=/home/ftp/static
userlist_enable=YES
userlist_deny=YES

这个配置文件匿名用户无法登录,切user_list和ftpusers里面的用户不能登录 user_list是userlist_enable启用的,ftpusers这个配置文件我没找到其定义的配置项,我怀疑应该是/etc/pam.d/vsftpd里面定义的,但这个不用深究。local_root锁定了用户家目录。

记得做完mkdir /home/ftp/static

3.虚拟用户登录

虚拟用户登录其登录的验证文件是/etc/pam.d/vsftpd,与本地登录不同的是,虚拟用户其本身也需要映射到一个本地用户,以本地用户来做为其权限载体,但可将多个虚拟用户映射为一个本地用户,然后在pam.d/vsftpd里面指定其用户账号密码文件,还需单独指定其虚拟用户配置文件,定义其ftp权限,ftp文件路径等。

虚拟用户设置

虚拟用户使用PAM认证方式。

pam_service_name=vsftpd

设置PAM使用的名称,默认值为/etc/pam.d/vsftpd。

guest_enable= YES/NO****(NO)

启用虚拟用户。默认值为NO。

guest_username=ftp

这里用来映射虚拟用户。默认值为ftp。

virtual_use_local_privs=YES/NO****(NO)

当该参数激活(YES)时,虚拟用户使用与本地用户相同的权限。当此参数关闭(NO)时,虚拟用户使用与匿名用户相同的权限。默认情况下此参数是关闭的(NO)。

首先把虚拟用户的配置文件配置好/etc/vsftpd/vsftpd.conf:

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
listen_ipv6=NO
pam_service_name=vsftpd
userlist_enable=YES
chroot_local_user=YES
local_root=/home/ftp/static
userlist_enable=YES
userlist_deny=YES
guest_enable=YES
guest_username=vsftpd
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
user_config_dir=/etc/vsftpd/vusers

guest_enable启用虚拟用户,guest_username是虚拟用户映射到本地用户的用户名,anon的三个配置项代表匿名用户与虚拟用户的权限,因每个虚拟用户权限不一致,所以先关闭权限。user_config_dir表示虚拟用户的配置文件夹,这里需要注意的是:

/etc/vsftpd/vusers里面一个配置文件代表一个虚拟用户,且文件名需以虚拟用户名称来表示。

/etc/vsftpd/vusers/ftpuser:

local_root=/home/ftp/static
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

虚拟用户配置文件有了以后,就可以生成虚拟用户认证文件了,首先上面vsftpd.conf里面guest_username=vsftpd代表虚拟用户映射为vsftpd,pam_service_name=vsftpd表示其登录认证文件为/etc/pam.d/vsftpd这个认证文件,首先先创建虚拟用户账号密码文件,然后再用pam.d/vsftpd配置文件中指定这个虚拟用户文件。

配置完的/etc/pam.d/vsftpd:

auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtualusers
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtualusers

session optional pam_keyinit.so force revoke
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth required pam_shells.so
auth include password-auth
account include password-auth
session required pam_loginuid.so
session include password-auth

上面两行为指定的虚拟用户认证文件,所以接下来需要创建virtualusers

echo -e “ftpuser\n123456” > /etc/vsftpd/virtualusers

db_load -T -t hash -f /etc/vsftpd/virtualusers /etc/vsftpd/virtualusers.db

chmod 600 /etc/vsftpd/virtualusers*

mkdir /home/ftp/static;chown -R vsftpd.vsftpd /home/ftp/static

这个时候用ftp测试工具测试一下可以登录就OK了。

image.png

容易出现的报错:

image.png

在ftp根目录如果用户拥有写权限的话便会报错

421 Service not available, remote server has closed connection

目前最容易遇到的坑:

1.文件夹加了写权限导致ftp账号无法登录

2.虚拟用户的配置文件得在user_config_dir=/etc/vsftpd/vusers指定文件夹下面且每个虚拟用户一个配置文件,其文件名为自己的虚拟用户用户名

3.无法启动vsftpd,基本上都是配置文件文件,建议用vsftpd默认自带的来进行修改,或者复制文中已经写好的配置文件。

4.测试ftp连接性时尽量使用linux下的ftp工具:yum -y install ftp即可安装,因其出错时报错信息都比较准确,如果在windows直接测试的话可能直接就是无法登录,但没有对应的报错信息。

5.vsftpd主动模式与被动模式

这里主要是讲主动模式与被动模式的实现,首先是最常用的被动模式

1.被动模式

1
2
3
pasv_enable=yes (Default: YES) 设置是否允许pasv模式
pasv_max_port=10240 (Default: 0 (use any port)) pasv使用的最大端口
pasv_min_port=20480 (Default: 0 (use any port)) pasv使用的最小端口

被动模式为这三个选项,因pasv默认为yes,所以在vsftpd中,默认也是使用被动模式来运行的。

image.png

定义好最大最小端口后重启并测试

systemctl restart vsftpd

然后找一个windows或linux的ftp客户端进行测试(浏览器也行):

image.png

服务器中ftp没连接时的信息image.png

然后用浏览器去访问ftp时的端口情况

image.png

可以知道,此时vsftpd开启了1408来作为传输端口,与我们配置的无异,被动模式成功运行。

2.主动模式

pasv_enable=NO #关闭被动模式
port_enable=YES #启用主动模式
connect_from_port_20=YES #主动式连接使用的数据通道

#Ftp_date_port=%portnumber% 上一选项使用NO参数是 指定数据传输端口

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
#connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
listen_ipv6=NO
pam_service_name=vsftpd
userlist_enable=YES
chroot_local_user=YES
local_root=/home/ftp/static
userlist_enable=YES
userlist_deny=YES
guest_enable=YES
guest_username=vsftpd
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
user_config_dir=/etc/vsftpd/vusers
#pasv_min_port=1380
#pasv_max_port=1500
pasv_enable=NO
port_enable=YES
connect_from_port_20=YES

下面是测试:

image.png

可以看到20端口启用了,所以主动模式成功运行了。但像浏览器,ftp命令行工具默认会使用被动模式进行连接,启用主动模式后便无法连接

所以最好用ftp工具连接,连接时还需指定用主动模式连接

image.png

当然,如不关闭被动模式,则主动模式将于被动模式共存。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!