您现在的位置是:首页> 操作系统> Linux

vsftpd的配置文件详解

  • 5438人已阅读
  • 时间:2018-11-15 23:33:02
  • 分类:Linux
  • 作者:祥哥

接着上篇文章,祥哥先讲一下常用的配置项。没有看见过上篇文章的同鞋,可以在祥哥博客先看上一篇文章

    1.常用的配置项

1
vi /etc/vsftpd/vsftpd.conf

    #配置禁止匿名用户访问FTP服务器

1
anonymous_enable=NO

    #限制FTP用户只能在其主目录活动,不允许跳出主目录之外的的其它目录

1
2
3
chroot_local_user#是否将所有用户限制在主目录,YES为启用 NO禁用.(该项默认值是NO,即在安装vsftpd后不做配置的话,ftp用户是可以向上切换到要目录之外的)
chroot_list_enable#是否启动限制用户的名单 YES为启用  NO禁用(包括注释掉也为禁用)
chroot_list_file=/etc/vsftpd/chroot_list#是否限制在主目录下的用户名单,至于是限制名单还是排除名单,这取决于chroot_local_user的值,我们可以这样记忆: chroot_local_user总是一个全局性的设定,其为YES时,全部用户被锁定于主目录,其为NO时,全部用户不被锁定于主目录。那么我们势必需要在全局设定下能做出一些“微调”,即,我们总是需要一种“例外机制",所以当chroot_list_enable=YES时,表示我们“需要例外”。而”例外“的含义总是有一个上下文的,即,当”全部用户被锁定于主目录“时(即chroot_local_user=YES),"例外"就是:不被锁定的用户是哪些;当"全部用户不被锁定于主目录"时(即chroot_local_user=NO),"例外"“就是:要被锁定的用户是哪些。这样解释和记忆两者之间的关系就很清晰了!

这里就是祥哥为什么没有像其它站一样告诉你设为YES还NO,因为这三个文件配合很灵活,不能死记硬背。祥哥列一个表格看着更清楚


chroot_local_user=YES
chroot_local_user=NO
chroot_list_enable=YES
  1. 所有的用户被限制在其主目录

  2. 使用了chroot_list_file指定的用户列表,这些用户作为例外,可以不被限制在其主目录

  1. 所有用户都不被限制其主目录

  2. 使用了chroot_list_file指定的用户列表,这些用户被限制在其目录

chroot_list_enable=NO
  1. 所有用户被限制在其主目录

  2. 无例外

  1. 所有用户不被限制在其主目录

  2. 无例外

相信看到这里都明白了,注意/etc/vsftpd/chroot_list的文件需手动建立,一行一个用户名。

    #还记得祥哥在上篇文章中提到/etc/vsftpd/ftpusers和user_list两个文件有很多站长写的不准确,他们直接定义了ftpusers是黑名单文件,user_list是白名单文件,祥哥说这不是完全正确的,是错误的。那么这两个文件祥哥在这里详解一下。

祥哥先说安装完vsftpd的默认情况:

ftpusers:文件中用户拒绝登录FTP服务器

user_list:文件中用户拒绝登录FTP服务器

光靠这一点就说明了,user_list文件是白名单就是错误的。

ftpusers这个文件内的用户是黑名单还是白名单取绝于

1
/etc/pam.d/vsftpd

这个文件的配置

默认配置为

1
2
3
4
5
6
7
8
#%PAM-1.0
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

 看到这大家也许就明白了。如果将第二行改为

1
auth       required     pam_listfile.so item=user sense=allow file=/etc/vsftpd/ftpusers onerr=succeed

那么ftpusers这个文件就是白名单了。所以是黑是白要看具体的配置。

第二,user_list文件是黑是白的配置

1
/etc/vsftpd/user_list

该文件里的用户帐户,默认情况下也不能访问FTP服务器的,这也是个组合配置项所以说说他是白名单是不完全正确的。祥哥还是用表格来说明更清楚些。


userlist_deny=YES
userlist_deny=NO
userlist_enable=YES
  1. 启用user_list文件访问控制

  2. user_list的用户为黑名单

  1. 启用user_list文件访问控制

  2. user_list中用户为白名单

userlist_enable=NO
  1. 不启用user_list文件访问控制

  2. userlist_deny的值无效。不起作用

  1. 不启用user_list文件访问控制

  2. userlist_deny的值无效不起作用

说明补充:

1.ftpusers和user_list如果两个文件里出现了相同的本地用户,黑名单优先。不论谁是黑名单文件

2.userlist_enable和userlist_deny的联合针对的是本地全体用户

3.当使用user_list为白名单时,匿名用户将无法登入!除非显式在user_list中加入一行:anonymous

     #配置PASV模式

1
2
3
4
5
6
7
8
9
10
11
vsftpd默认没有开启PASV模式,现在FTP只能通过PORT模式连接,要开启PASV默认需要通过下面的配置
打开/etc/vsftpd/vsftpd.conf,在末尾添加
pasv_enable=YES   //开启PASV模式
pasv_min_port=40000   //最小端口号
pasv_max_port=40080   //最大端口号
pasv_promiscuous=YES
在防火墙配置内开启40000到40080端口
-A INPUT -m state --state NEW -m tcp -p -dport 40000:40080 -j ACCEPT
重启iptabls和vsftpd
service iptables restart
service vsftpd restart

 #附配置文件详解

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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
######匿名用户(anonymous)设置相关命令######
#控制是否允许匿名用户登入,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)
#文件权限分u,g,o当为YES时,o具有r权限才能下载。如果为NO,u有r权限就能下载
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=whoever
#设置匿名登入者新增或上传档案时的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
 
 
 
######本地用户设置######
#控制是否允许本地用户登入,YES 为允许本地用户登入,NO为不允许。默认值为YES。
local_enable=YES/NO(YES)
#当本地用户登入时,将被更换到定义的目录下。默认值为各用户的家目录。
local_root=/home/username
#是否允许登陆用户有写权限。属于全局设置,默认值为YES。
write_enable=YES/NO(YES)
#本地用户新增档案时的umask 值。默认值为077。
local_umask=022
#本地用户上传档案后的档案权限,与chmod 所使用的数值相同。默认值为0666。
file_open_mode=0755
 
 
 
######欢迎语设置######
#如果启动这个选项,那么使用者第一次进入一个目录时,会检查该目录下是否有.message这个档案,如果有,则会出现此档案的内容,通常这个档案会放置欢迎话语,或是对该目录的说明。默认值为开启。
dirmessage_enable=YES/NO(YES)
#设置目录消息文件,可将要显示的信息写入该文件。默认值为.message。
message_file=.message
#当使用者登入时,会显示此设定所在的档案内容,通常为欢迎话语或是说明。默认值为无。如果欢迎信息较多,则使用该配置项。
banner_file=/etc/vsftpd/banner
#这里用来定义欢迎话语的字符串,banner_file是档案的形式,而ftpd_banner 则是字符串的形式。预设为无。
ftpd_banner=Welcome to BOB's FTP server
 
 
 
#######控制用户是否允许切换到上级目录######
#在默认配置下,本地用户登入FTP后可以使用cd命令切换到其他目录,这样会对系统带来安全隐患。可以通过以下三条配置文件来控制用户切换目录。
#用于指定用户列表文件中的用户是否允许切换到上级目录。默认值为NO。
chroot_local_user=YES/NO(NO)
#设置是否启用chroot_list_file配置项指定的用户列表文件。默认值为NO。
chroot_list_enable=YES/NO(NO)
#用于指定用户列表文件,该文件用于控制哪些用户可以切换到用户家目录的上级目录。
chroot_list_file=/etc/vsftpd.chroot_list
#通过搭配能实现以下几种效果:
#①当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时,所有的用户均可以切换到其他目录。
 
 
 
######数据传输模式设置######
#FTP在传输数据时,可以使用二进制方式,也可以使用ASCII模式来上传或下载数据。
#设置是否启用ASCII 模式上传数据。默认值为NO。
ascii_upload_enable=YES/NO(NO)
#设置是否启用ASCII 模式下载数据。默认值为NO。
ascii_download_enable=YES/NO(NO)
 
 
 
######访问控制设置######
#①控制主机访问:
#设置vsftpd是否与tcp wrapper相结合来进行主机的访问控制。默认值为YES。如果启用,则vsftpd服务器会检查/etc/hosts.allow 和/etc/hosts.deny 中的设置,来决定请求连接的主机,是否允许访问该FTP服务器。这两个文件可以起到简易的防火墙功能。
#比如:若要仅允许192.168.0.1—192.168.0.254的用户可以连接FTP服务器,则在/etc/hosts.allow文件中添加以下内容:
#vsftpd:192.168.0. :allow
#all:all :deny
tcp_wrappers=YES/NO(YES)
#②控制用户访问:
#下面的三个前面解释了
userlist_enable=YES/NO(NO)
userlist_file=/etc/vsftpd.user_list
userlist_deny=YES/NO(YES)
 
 
 
######访问速率设置######
#设置匿名登入者使用的最大传输速度,单位为B/s,0 表示不限制速度。默认值为0。
anon_max_rate=0
#本地用户使用的最大传输速度,单位为B/s,0 表示不限制速度。预设值为0。
local_max_rate=0
 
 
 
######超时时间设置######
#设置建立FTP连接的超时时间,单位为秒。默认值为60。
accept_timeout=60
#PORT 方式下建立数据连接的超时时间,单位为秒。默认值为60。
connect_timeout=60
#设置建立FTP数据连接的超时时间,单位为秒。默认值为120。
data_connection_timeout=120
#设置多长时间不对FTP服务器进行任何操作,则断开该FTP连接,单位为秒。默认值为300 。
idle_session_timeout=300
 
 
 
######日志文件设置######
#是否启用上传/下载日志记录。如果启用,则上传与下载的信息将被完整纪录在xferlog_file 所定义的档案中。预设为开启。
xferlog_enable= YES/NO(YES)
#设置日志文件名和路径,默认值为/var/log/vsftpd.log。
xferlog_file=/var/log/vsftpd.log
#如果启用,则日志文件将会写成xferlog的标准格式,如同wu-ftpd 一般。默认值为关闭。
xferlog_std_format=YES/NO(NO)
#如果启用此选项,所有的FTP请求和响应都会被记录到日志中,默认日志文件在/var/log/vsftpd.log。启用此选项时,xferlog_std_format不能被激活。这个选项有助于调试。默认值为NO。
log_ftp_protocol=YES|NO(NO)
 
 
 
######定义用户配置文件######
#在vsftpd中,可以通过定义用户配置文件来实现不同的用户使用不同的配置。
#设置用户配置文件所在的目录。当设置了该配置项后,用户登陆服务器后,系统就会到/etc/vsftpd/userconf目录下,读取与当前用户名相同的文件,并根据文件中的配置命令,对当前用户进行更进一步的配置。
#例如:定义user_config_dir=/etc/vsftpd/userconf,且主机上有使用者 test1,test2,那么我们就在user_config_dir 的目录新增文件名为test1和test2两个文件。若是test1 登入,则会读取user_config_dir 下的test1 这个档案内的设定。默认值为无。利用用户配置文件,可以实现对不同用户进行访问速度的控制,在各用户配置文件中定义local_max_rate=XX,即可。
user_config_dir=/etc/vsftpd/userconf
 
 
 
#######FTP的工作方式与端口设置#######
#FTP有两种工作方式:PORT FTP(主动模式)和PASV FTP(被动模式)
#设置FTP服务器建立连接所监听的端口,默认值为21。
listen_port=21
#如果你要在数据连接时取消PORT模式时,设此选项为NO。默认值为YES
connect_from_port_20=YES/NO
#设置在PORT方式下,FTP数据连接使用的端口,默认值为20。
ftp_data_port=20
#若设置为YES,则使用PASV工作模式;若设置为NO,则使用PORT模式。默认值为YES,即使用PASV工作模式。
pasv_enable=YES/NO(YES)
#在PASV工作模式下,数据连接可以使用的端口范围的最大端口,0 表示任意端口。默认值为0。
pasv_max_port=0
#在PASV工作模式下,数据连接可以使用的端口范围的最小端口,0 表示任意端口。默认值为0。
pasv_min_port=0
#就否屏蔽对pasv进行安全检查,(当有安全隧道时可禁用)
#pasv_promiscuous=YES/NO(NO)
 
 
 
#######与连接相关的设置#######
#如果设置为YES,则vsftpd将以独立模式运行,由vsftpd自己监听和处理IPv4端口的连接请求
listen=YES/NO(YES)
#默认配置下"listen=YES"开启,"listen_ipv6=YES"被注释掉了,此时vsftpd只能监听到IPv4的FTP请求,不能监听到IPv6的FTP请求。listen=YES"注释掉,"listen_ipv6=YES"开启,可以监听IPV6
#listen_ipv6=YES
#设置vsftpd允许的最大连接数,默认值为0,表示不受限制。若设置为100时,则同时允许有100个连接,超出的将被拒绝。只有在standalone模式运行才有效。
max_clients=0
#设置每个IP允许与FTP服务器同时建立连接的数目。默认值为0,表示不受限制。只有在standalone模式运行才有效。
max_per_ip=0
#设置FTP服务器在指定的IP地址上侦听用户的FTP请求。若不设置,则对服务器绑定的所有IP地址进行侦听。只有在standalone模式运行才有效。
listen_address=IP地址
#设置每个与FTP服务器的连接,是否以不同的进程表现出来。默认值为NO,此时使用ps aux |grep ftp只会有一个vsftpd的进程。若设置为YES,则每个连接都会有一个vsftpd的进程。
setproctitle_enable=YES/NO(NO)
 
 
 
#######虚拟用户设置#######
#设置PAM外挂模块提供的认证服务所使用的配置文件名
#设置PAM使用的名称,默认值为/etc/pam.d/vsftpd。
pam_service_name=vsftpd
#启用虚拟用户。默认值为NO。
guest_enable= YES/NO(NO)
#这里用来映射虚拟用户。默认值为ftp。
guest_username=ftp
#当该参数激活(YES)时,虚拟用户使用与本地用户相同的权限。当此参数关闭(NO)时,虚拟用户使用与匿名用户相同的权限。默认情况下此参数是关闭的(NO)。
virtual_use_local_privs=YES/NO(NO)
 
 
 
######其他设置######
#设置在执行ls –la之类的命令时,是显示UID、GID还是显示出具体的用户名和组名。默认值为NO,即以UID和GID方式显示。若希望显示用户名和组名,则设置为YES。
text_userdb_names= YES/NO(NO)
#若是启用此功能,则允许登入者使用ls –R(可以查看当前目录下子目录中的文件)这个指令。默认值为NO。
ls_recurse_enable=YES/NO(NO)
#如果启用此功能,所有档案的拥有者与群组都为ftp,也就是使用者登入使用ls -al之类的指令,所看到的档案拥有者跟群组均为ftp。默认值为关闭。
hide_ids=YES/NO(NO)
#如果设置为NO,所有的文件都不能下载到本地,文件夹不受影响。默认值为YES。
download_enable=YES/NO(YES)
#是否允许运行特殊的ftp命令async ABOR.
#async_abor_enable=YES
# 运行vsftpd需要的非特权系统用户,缺省是nobody
#nopriv_user=ftpsecure

 注意,vsftpd2.3.5之后的版本,特别是在centos7下报下面的错误:

1
500 OOPS: vsftpd: refusing to run with writable root inside chroot ()

因为2.3.5之后,vsftpd增强了安全检查,如果用户被限定在其主目录下,则该用户主目录不能再具有写权限了!如果检查发现还有写权限就会报该错误。解决方法有两种:

一种:

1
chmod a-w /home/ftp #替换自己的FTP目录

第二种:

1
allow_writeable_chroot=YES  #添加配置文件

祥哥喜欢第二种,因为第一种想上传文件还得在建一层文件夹,显得特别麻烦,所以还是选择了第二种。

Top