《探错笔记》之Linux的FTP服务

《探错笔记》之Linux的FTP服务

FTP服务的安装和配置

FTP服务的安装和开启

  1. 切换到root用户

  2. 查看是否安装vsftp,我这个是已经安装的

    1
    rpm -qa |grep vsftpd
  3. 如果没有发现,则安装

    1
    yum  install  vsftpd
  4. 启动vsftpd服务,以及重启命令(centos7.0以上版本)

    1
    2
    [root@localhost vsftpd]# /bin/systemctl start vsftpd.service
    [root@localhost vsftpd]# /bin/systemctl restart vsftpd.service

    低版本试一下这些命令:

    1
    2
    3
    4
    5
    6
    7
    /etc/init.d/vsftpd restart
    启动ftp命令  
    #service vsftpd start
    停止ftp命令  
    #service vsftpd stop
    重启ftp命令  
    #service vsftpd restart

    设置自启:

    1
    chkconfig vsftpd on
  5. 测试一下能否登录FTP了,先安装一个ftp客户端组件

    1
    yum -y install ftp

    尝试登录一下

    1
    ftp localhost

    输入用户名ftp,密码随便(因为默认是允许匿名的)
    登录成功,就代表ftp服务可用了。
    但是,外网是访问不了的,所以还要继续配置。

  6. 取消匿名登录

    1
    vi /etc/vsftpd/vsftpd.conf

    把第一行的 anonymous_enable=YES ,改为NO,重启

    添加用户配置权限和指定目录

  7. 添加FTP账号和目录

  8. 1登录Linux主机后,运行命令:”useradd ftpadmin -s /sbin/nologin “。该账户路径默认指向/home/ftpadmin目录;如果需要将用户指向其他目录,请运行命令:useradd ftpadmin -s /sbin/nologin –d /www(其他目录)
    1.2 设置ftpadmin用户密码,运行命令:”passwd ftpadmin” ; 输入两次密码,匹配成功后,就设置好了ftpadmin用户的密码了。
    1.3测试连接,您可以在“我的电脑”地址栏中输入 ftp://IP 来连接FTP服务器,根据提示输入账户密码。

    1. centos FTP 用户指定目录禁用上级目录
      在默认配置下,本地用户登入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时,所有的用户均可以切换到其他目录。
  9. 从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误。
    要修复这个错误,可以用命令chmod a-w /home/user去除用户主目录的写权限,注意把目录替换成你自己的。或者你可以在vsftpd的配置文件中增加下列项:
    allow_writeable_chroot=YES
    好了,这样就只能访问自身所属目录。
    如果希望某个用户可以访问根目录,把用户名加入
    /etc/vsftpd/chroot_list
    不存在就创建这个文件,一行一个用户名。

  10. 如果还是登陆不了ftp,那很有可能是selinux的问题,这个东西把他关掉就行

    1
    2
    vi /etc/selinux/config
    SELINUX=enforcing #设置成SELINUX=disabled后重启

FTP的配置详解

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
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465

vsftpd.conf 是 vsftpd 守护进程的配置文件,默认位于 /etc/vsftpd.conf ,
但是其路径也可以通过 vsftpd 的命令行参数进行修改。
这个特性在希望由 xinetd 针对每个不同的主机使用不同的配置文件调用 vsftpd 的场合很有用。

---------------------
格式
---------------------
vsftpd.conf 的格式非常简单,每一行要么是一条指令,要么就被视作注释。
以井号(#)开头的行被视为注释而忽略。
而如下格式的行将被视为配置指令。注意:等号两边不能有任何空白!

option=value

每一个指令都有一个默认值,但是可以通过配置文件进行修改

---------------------
布尔型指令
---------------------
布尔型指令的值只能设为 YES 或 NO ,等号后是其默认值。

allow_anon_ssl=NO
是否允许匿名用户使用SSL连接。仅在 ssl_enable=YES 时才有意义。

anon_mkdir_write_enable=NO
是否允许匿名用户创建新目录。
仅在 write_enable=YES 时才有意义,而且匿名用户必须对所在目录具有写权限。

anon_other_write_enable=NO
是否允许匿名用户在上传文件和创建目录之外执行其他写操作,比如删除和重命名。

anon_upload_enable=NO
是否允许匿名用户或虚拟用户上传文件。
仅在 write_enable=YES 时才有意义,而且匿名用户必须对所在目录具有写权限。

anon_world_readable_only=YES
是否仅允许匿名用户下载全局可读的文件。
这主要是考虑到 ftp 用户可能会拥有文件,特别是允许上传文件的情况下。

anonymous_enable=YES
是否允许匿名登录。ftp 和 anonymous 两个名称都被认为是匿名用户。

ascii_download_enable=NO
是否允许以ASCII模式下载文件。

ascii_upload_enable=NO
是否允许以ASCII模式上传文件。

async_abor_enable=NO
是否允许使用"async ABOR"命令。
只有不合格的FTP客户端才会使用此命令,而且此命令难以正确处理,所以默认禁止使用。

background=NO
是否以"listen"模式运行。
该模式下的 vsftpd 会将监听进程放到后台运行。

check_shell=YES
是否检查本地登录用户的SHELL合法性(/etc/shells)。仅在 vsftpd 不支持PAM特性时有意义。

chmod_enable=YES
是否允许使用 SITE CHMOD 命令。仅对本地登录用户有意义,匿名用户永远不允许使用此命令。

chown_uploads=NO
是否将所有匿名上传的文件所有者更改为 chown_username 指定的用户。

chroot_list_enable=NO
是否读取 chroot_list_file 文件中的"chroot例外"用户。
当 chroot_local_user=YES 时,chroot_list_file 文件中用户将不会被限制在其家目录中。
当 chroot_local_user=NO 时,chroot_list_file 文件中用户将会被限制在其家目录中。

chroot_local_user=NO
是否将本地登录的用户通过 chroot() 限制在其家目录中。
该功能有安全方面的隐患,特别是在用户有上传权限或者有可用SHELL的时候。

connect_from_port_20=NO
是否强制 PORT 风格的数据连接使用 20 端口。
出于安全考虑,一些 FTP 客户端隐含了这个假定。而设为 NO 则可以让 vsftpd 以非特权用户运行。

debug_ssl=NO
是否将 OpenSSL 连接对话转储到日志文件中。

delete_failed_uploads=NO
是否删除上传失败的文件

deny_email_enable=NO
是否读取 banned_email_file 文件中的Email地址黑名单,其中的地址将被禁止用作匿名登录密码。

dirlist_enable=YES
是否允许列出目录的内容。

dirmessage_enable=NO
是否在进入新目录时显示 message_file 文件中的内容。

download_enable=YES
是否允许下载

dual_log_enable=NO
是否同时记录 xferlog_file 和 vsftpd_log_file 两份日志。

force_dot_files=NO
是否强制显示隐藏文件(点文件),即使客户端没有使用"a"选项也显示。

force_anon_data_ssl=NO
是否强制匿名用户必须使用SSL连接发送和接受数据。仅在 ssl_enable=YES 时才有意义。

force_anon_logins_ssl=NO
是否强制匿名登录时必须使用SSL连接,以保证密码不被泄露。仅在 ssl_enable=YES 时才有意义。

force_local_data_ssl=YES
是否强制非匿名用户必须使用SSL连接发送和接受数据。仅在 ssl_enable=YES 时才有意义。

force_local_logins_ssl=YES
是否强制非匿名登录时必须使用SSL连接,以保证密码不被泄露。仅在 ssl_enable=YES 时才有意义。

guest_enable=NO
是否将所有非匿名登录看做"guest"登录,并被映射到 guest_username 指定的用户。

hide_ids=NO
是否隐藏文件和目录的宿主和属组信息,而统一显示为"ftp"。

implicit_ssl=NO
是否强制客户端必须使用SSL连接(将 vsftpd 配置为一个FTPS服务器,也就是 implicit 模式)。
FTPS 一般使用 990 端口作为控制端口,而使用 989 端口作为数据传输端口。

listen=YES
是否以 standalone 模式运行。standalone 模式是指 vsftpd 不由 inetd 启动,而是独自监听和处理连接。

listen_ipv6=NO
含义与 listen 指令相同,只是在 IPv6 套接字上进行监听。该指令与 listen 是互斥的,不能同时使用。

local_enable=NO
是否允许本地用户登录。激活后,将允许 /etc/passwd 文件或PAM中的用户登录。
必须激活此选项才能允许非匿名登录(包括虚拟用户登录)。

lock_upload_files=YES
是否对上传中的文件加锁。激活后,所有下载进程将在该文件上共享一个读取锁。
激活此指令后,恶意的读取进程会导致写进程饿死(比如追加的写进程)。

log_ftp_protocol=NO
在 xferlog_std_format=NO 的前提下,是否在日志中记录所有FTP的请求和应答。主要用于调试。

ls_recurse_enable=NO
是否允许客户端使用"ls -R"递归列出目录的内容。对于巨大的站点来说,可能会导致性能问题。

mdtm_write=YES
是否允许客户端使用 MDTM 文件的修改时间(依然要受访问权限的限制)

no_anon_password=NO
匿名用户是否需要输入口令后才能登陆。激活后匿名用户将不需要输入密码而直接登录。

no_log_lock=NO
是否在记录日志文件时不对日志文件加锁。除非为了要解决某些操作系统缺陷,一般不应开启此指令。

one_process_model=NO
简单的一句话:不要开启此指令。

passwd_chroot_enable=NO
在 chroot_local_user=YES 的前提下,是否允许为每个不同的用户分别指定不同的 chroot() 位置。
每个用户的虚根目录来自于 /etc/passwd 文件中对应的家目录。
家目录中的 /./ 字符串表示虚根目录位于那个目录中的特定位置。

pasv_addr_resolve=NO
是否允许将 pasv_address 指令的值设为主机名而不是IP地址,以便对其进行DNS解析。

pasv_enable=YES
是否允许使用 PASV 命令获得数据连接的地址端口对。

pasv_promiscuous=NO
是否禁止对 PASV 命令进行安全检查(确保数据连接和控制连接来自于同一个IP地址)。
不要开启它,除非你明确知道自己在做什么。

port_enable=YES
是否允许使用 PORT 命令获得数据连接的端口。

port_promiscuous=NO
是否禁止对 PORT 命令进行安全检查(确保数据连接和控制连接来自于同一个IP地址)。
不要开启它,除非你明确知道自己在做什么。

require_cert=NO
是否强制SSL客户端必须提供证书。证书的有效性由 validate_cert 指令控制。

require_ssl_reuse=YES
是否要求所有SSL数据连接都复用SSL会话,以确保它们都知道控制连接的主密码。
虽然出于安全考虑,YES 是默认值,但是却与不少FTP客户端不兼容。

run_as_launching_user=NO
是否以启动 vsftpd 的进程的用户身份运行。常在无法取得 root 权限的时候使用。
警告:不要开启它,除非你明确知道自己在做什么,想当然的使用此指令会导致重大安全漏洞。
开启此指令后,chroot 特性将会失效(即使由root启动),还有其他许多重大安全问题。

secure_email_list_enable=NO
是否仅允许匿名用户使用 email_password_file 指令指定的文件中的Email地址作为登录密码。
在某些安全性要求不高的场合,这样做可以避免使用虚拟用户。

session_support=NO
是否要求 vsftpd 维护登录会话。
在使用PAM认证的时候,设为 YES 表示打开一个PAM会话,并更新 utmp 和 wtmp 文件。
如果不需要记录会话,则应该设为 NO ,以让 vsftpd 运行的更快并且需要更少的特权。

setproctitle_enable=NO
是否在进程的标题中包含会话状态信息(idle, downloading ...)。出于安全考虑,建议设为 NO 。

ssl_enable=NO
是否允许客户端使用SSL连接(将 vsftpd 配置为一个 FTPS 服务器,也就是 explicit 模式)。
与 implicit_ssl 指令的不同之处在于它并不强制客户端一定要使用SSL连接。

ssl_request_cert=YES
是否允许查看客户端证书(与 require_cert 不同,并非必须查看)。

ssl_sslv2=NO
是否允许使用 SSL2 进行连接。推荐使用 TLS1 。仅在 ssl_enable=YES 时才有意义。

ssl_sslv3=NO
是否允许使用 SSL3 进行连接。推荐使用 TLS1 。仅在 ssl_enable=YES 时才有意义。

ssl_tlsv1=YES
是否允许使用 TLS1 进行连接。推荐使用 TLS1 。仅在 ssl_enable=YES 时才有意义。

strict_ssl_read_eof=NO
是否强制SSL数据上传在SSL连接内终结,而不是以socket结束作为终结。
设为 YES 可以确保攻击者无法通过伪造的 TCP FIN 包提前终止上传数据流。
不幸的是,只有很少的客户端能正确处理,所以默认值为 NO

strict_ssl_write_shutdown=NO
是否强制SSL数据下载在SSL连接内终结,而不是以socket结束作为终结。
设为 YES 可以确保攻击者无法通过伪造的 TCP FIN 包提前终止下载数据流。
不幸的是,只有很少的客户端能正确处理,所以默认值为 NO
不过即使无此保证,客户端依然能够检查下载文件的完整性。

syslog_enable=NO
是否通过系统日志机制记录日志而不是由 vsftpd 自己记录。日志将通过 FTPD facility 进行记录。

tcp_wrappers=NO
是否通过 tcp_wrappers 对进入连接进行访问控制。仅在编译了 tcp_wrappers 支持的时候有效。
tcp_wrappers 可以针对每个单独的IP进行设置。
如果 tcp_wrappers 设置了 VSFTPD_LOAD_CONF 环境变量,那么 vsftpd 会话将会尝试加载其指定的配置文件。

text_userdb_names=NO
是否在列出目录内容时不显示文件和目录的 UID 和 GID 值,而是显示其对应的名称。
默认值 NO 主要是出于性能考虑。

tilde_user_enable=NO
是否将类似 ~chris/pics 这样路径解析到对应的用户主目录下。
注意: ~ 和 ~/something 将始终被解析( ~ 表示初始登录的目录)。
注意: ~user 仅在当前的 chroot() 中存在 /etc/passwd 时才能被解析。

use_localtime=NO
是否在列出目录内容时以本地时间(而非UTC时间)显示。MDTM FTP 返回的时间也有该指令控制。

use_sendfile=YES
是否使用操作系统的 sendfile() 接口发送文件。

userlist_deny=YES
是否允许 userlist_file 文件之外的用户登陆。该指令仅在 userlist_enable=YES 时有意义。

userlist_enable=NO
是否禁止 userlist_file 文件中的用户登陆。设为 NO 则根本无视该文件。

validate_cert=NO
是否强制要求SSL客户端证书必须有效。自签名的证书总是被认为是无效的。

virtual_use_local_privs=NO
是否让虚拟用户拥有与本地用户一样的权限(虚拟用户默认权限与匿名用户相同)。

write_enable=NO
是否允许执行FTP写入操作(STOR, DELE, RNFR, RNTO, MKD, RMD, APPE, SITE)。

xferlog_enable=NO
是否在 vsftpd_log_file 文件中记录上传和下载信息。

xferlog_std_format=NO
是否在 xferlog_file 文件中按照标准的 xferlog 格式(wu-ftpd 的格式)记录日志。
这样做的好处是可以使用针对 wu-ftpd 设计的日志分析工具。但是默认格式更易于阅读。

---------------------
数值型指令
---------------------
数值型指令的值只能设为一个非负整数,等号后是其默认值。
为了支持 umask 相关的选项,八进制数也被支持,但是必须以"0"作为第一个数字。

accept_timeout=60
允许客户端建立 PASV 风格的数据传输连接的秒数。

anon_max_rate=0
匿名用户允许的最大数据传输率,单位是"字节/秒"。"0"表示不限。

anon_umask=077
匿名用户创建新文件是的 umask 值。

chown_upload_mode=0600
使用 chown() 更改匿名用户上传的文件的用户时,将此文件的权限设为什么值。

connect_timeout=60
客户端相应 PORT 风格的数据连接的超时秒数。也就是必须在此时间内建立数据连接。

data_connection_timeout=300
数据传输的超时秒数。如果超过此处规定的秒数,数据传输依然没有任何进展,那么该客户端将被踢出。

delay_failed_login=1
在对一个失败的登录作出相应前暂停的秒数。

delay_successful_login=0
在对一个成功的登录作出相应前暂停的秒数。

file_open_mode=0666
上传的文件被创建时使用的权限。umask 值将会应用到这个值上面。
如果你希望上传的文件具有可执行权限,那么可以设为 0777

ftp_data_port=20
指定 PORT 风格的连接从哪个端口发起(仅在 connect_from_port_20=YES 时有意义)

idle_session_timeout=300
客户端在两个FTP命令之间允许的最大间隔秒数。超时的客户端将被踢出。

listen_port=21
仅对 standalone 模式有效。指定在哪个端口上监听。

local_max_rate=0
本机用户允许的最大数据传输速率。"0"表示不限。

local_umask=077
本机用户在创建上传文件时使用的 umask 值。

max_clients=0
standalone 模式下,允许连接的最大客户端数量。"0"表示不限。

max_login_fails=3
最大登录尝试次数。失败次数超过这个值之后,该次会话将被终止。

max_per_ip=0
standalone 模式下,同一个IP地址允许发起的最大并发连接数。"0"表示不限。

pasv_max_port=0
允许为 PASV 风格的数据连接使用的最大端口号。"0"表示不限。

pasv_min_port=0
允许为 PASV 风格的数据连接使用的最小端口号。"0"表示不限。

trans_chunk_size=0
一般不需要调整此设置,但是也可能需要将其设置成诸如 8192 之类的值以达到更平滑的带宽限制。
"0"表示让 vsftpd 自己选择一个合理的值。

---------------------
字符串型指令
---------------------
等号后是其默认值。(none)表示没有默认值。

anon_root=(none)
匿名用户登录后的 chroot 目录。若未指定则使用 ftp_username 指令的家目录。
注意:ftp_username 指令指定的用户不能拥有该目录的写权限。

banned_email_file=/etc/vsftpd.banned_emails
包含禁止匿名用户使用的登录密码(Email地址)的文件。仅在 deny_email_enable=YES 时才被读取。

banner_file=(none)
指定一个文件,其内容将在客户端连接上服务器时显示。设置后将取代 ftpd_banner 指令的值。

ca_certs_file=(none)
用于校验客户端证书的CA证书文件。
注意:vsftpd 并不使用默认的 SSL CA 证书路径,因为 vsftpd 只能看到虚根(chroot)下的文件。

chown_username=root
匿名用户上传的文件的宿主。仅在 chown_uploads=YES 时有意义。

chroot_list_file=/etc/vsftpd.chroot_list
包含"chroot例外用户"的文件,仅在 chroot_list_enable=YES 时才有意义。

cmds_allowed=(none)
允许客户端使用的FTP命令(逗号分隔的列表,"USER,PASS,QUIT"总被允许),列表外的命令都将被拒绝。
不设置表示允许所有命令。

cmds_denied=(none)
禁止客户端使用的FTP命令(逗号分隔的列表,"USER,PASS,QUIT"总被允许),其优先级比 cmds_allowed 更高。

deny_file=(none)
设置一个匹配模式,禁止访问任何与此模式匹配的文件和目录(并不隐藏这些文件)。
注意,不要依赖此指令做访问控制,而应该优先使用操作系统的文件和目录权限。该指令主要用于控制虚拟用户的权限。
需要注意的是,可以通过多个途径(链接)访问的文件/目录,必须把所有途径都要考虑进去。
匹配模式语法很简单,仅支持 *, ?, {} 三种符号,例如:deny_file={*.mp3,*.mov,.private}
注意:仅在路径的结尾部分才支持匹配。也就是说 a/b/? 是可以进行匹配的,但是 a/?/c 是不可以被匹配的。

dsa_cert_file=(none)
用于SSL连接的DSA证书。默认值(none)表示使用RSA证书。

dsa_private_key_file=(none)
用于SSL连接的DSA私钥。未指定(none)表示私钥就存在于证书文件中。

email_password_file=/etc/vsftpd.email_passwords
指定一个文件,其中每一行都是一个Email地址。仅在 secure_email_list_enable=YES 时有意义。

ftp_username=ftp
用于处理匿名FTP操作的系统用户。该用户的家目录即是匿名用户登录后的根目录。

ftpd_banner=(none)
指定一个字符串,用于覆盖默认的 vsftpd 欢迎词。默认值(none)表示使用 vsftpd 内置的默认值。

guest_username=ftp
将 guest 用户映射到哪个实际用户。参见 guest_enable 指令对于 guest 登录的介绍。

hide_file=(none)
设置一个匹配模式,隐藏任何与此模式匹配的文件和目录(但是并不阻止对其访问)。
需要注意的是,可以通过多个途径(链接)访问的文件/目录,必须把所有途径都要考虑进去。
匹配模式语法很简单,仅支持 *, ?, {} 三种符号,例如:deny_file={*.mp3,*.mov,.private}
注意:仅在路径的结尾部分才支持匹配。也就是说 a/b/? 是可以进行匹配的,但是 a/?/c 是不可以被匹配的。

listen_address=(none)
仅对 standalone 模式有效。指定在哪个IP地址上监听。默认值为空,表示监听所有IP地址。

listen_address6=(none)
与 listen_address 指令含义相同,不过是针对 IPv6 地址(仅在 listen_ipv6=YES 时有意义)。

local_root=(none)
指定一个本地登录(非匿名)后的默认 chroot 目录。即使失败也不会有任何提示。

message_file=.message
指定进入一个目录时向用户显示哪个文件的内容。仅在 dirmessage_enable=YES 时有意义。

nopriv_user=nobody
当 vsftpd 进入非特权模式时使用的用户名。最好设置为一个专门的用户,而不是默认的 nobody 用户。

pam_service_name=ftp
vsftpd 将要使用的PAM服务名称

pasv_address=(none)
指定用于应答 PASV 命令的IP地址。当 pasv_addr_resolve=YES 时,可以使用主机名。
默认值(none)表示使用连接接入的IP地址。

rsa_cert_file=/usr/share/ssl/certs/vsftpd.pem
用于SSL连接的RSA证书文件的位置

rsa_private_key_file=(none)
用于SSL连接的RSA私钥文件的位置。(none)表示私钥就存放于证书文件中。

secure_chroot_dir=/usr/share/empty
该指令的值必须是一个空目录,并且对于 ftp 用户没有写权限。
该目录将在 vsftpd 不需要文件系统权限时,被用作安全的 chroot() 监狱。

ssl_ciphers=DES-CBC3-SHA
指定允许使用的SSL连接加密算法。
限制仅允许使用特定的算法可以将那些安全性较弱的算法排除在外。

user_config_dir=(none)
这个很牛叉的指令可以用于针对每个不同的用户进行不同的设置。
使用方法很简单,假定 user_config_dir=/etc/vsftpd_user_conf ,
那么当"chris"登录后,vsftpd 将针对该用户使用 /etc/vsftpd_user_conf/chris 文件中的设置。
该文件的语法与 vsftpd.conf 本身完全相同,但是并非所有指令都可以针对每个用户单独设定。
例如 listen_address, banner_file, max_per_ip, max_clients, xferlog_file 等指令。

user_sub_token=(none)
根据模板自动为每个虚拟用户生成一个家目录,与虚拟用户一起使用才有意义。
例如,如果实际用户(guest_username)的家目录是 /home/virtual/$USER ,并且 user_sub_token=$USER ,
那么虚拟用户 fred 的家目录就是 /home/virtual/fred (通常被 chroot 进该目录)。
在 local_root 包含了 user_sub_token 的情况下,该指令依然有效。

userlist_file=/etc/vsftpd.user_list
指定 userlist_enable=YES 时要加载的文件

vsftpd_log_file=/var/log/vsftpd.log
指定 vsftpd 风格的日志文件的路径。
仅在(xferlog_enable=YES 并且 xferlog_std_format=NO)或者(dual_log_enable=YES)时有意义。
注意:如果 syslog_enable=YES ,那么日志将被发送到系统日志记录器,而不会记录到这里指定的文件中。

xferlog_file=/var/log/xferlog
指定wu-ftpd风格的日志文件的路径。
仅在(xferlog_enable=YES 并且 xferlog_std_format=YES)或者(dual_log_enable=YES)时有意义。

常见问题

启动vsftpd服务,报错:Job for vsftpd.service failed because the control process exited with error code. See “systemctl status vsftpd.service” and “journalctl -xe” for details

解决:

vim /etc/vsftpd/vsftpd.conf #修改配置文件
在这里插入图片描述

chroot_local_user与chroot_list_enable详解

  • 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),”例外”“就是:要被锁定的用户是哪些。这样解释和记忆两者之间的关系就很清晰了!

    | 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.不使用chroot_list_file指定的用户列表,没有任何“例外”用户|1.所有用户都不被限制其主目录下 2.不使用chroot_list_file指定的用户列表,没有任何“例外”用户

报错:500 OOPS: vsftpd

  1. 在服务器上修改Vsftpd的配置文件vsftpd.conf

    1
    2
    vim /etc/vsftpd/vsftpd.conf
    # 添加一行配置 allow_writeable_chroot=YES
  2. 保存退出,重启一下 vsftp 服务即可。
    在这里插入图片描述

报错:530 Login incorrect

  1. 检查/etc/vsftpd/vsftpd.conf 配置文件
    在这里插入图片描述
    查看是否有这一行 没有的话添加上去 pam_service_name=vsftpd

  2. 检查 /etc/pam.d/vsftpd 配置文件
    PAM 服务名称,这里的设置决定PAM将为vsftpd使用配置文件
    在这里插入图片描述
    注释掉这一行 然后再重启ftp即可登录

Vsftpd 连接超时解决方法(被动模式)

  1. 编辑 Vsftpd 配置文件

    1
    vi /etc/vsftpd/vsftpd.conf
  2. 在最下面添加以下信息

    1
    2
    3
    pasv_enable=YES         #开启被动模式
    pasv_min_port=4000 #随机最小端口
    pasv_max_port=5000 #随机最大端口
  3. 加载内核 ip_conntrack_ftp 和 ip_nat_ftp(终端执行)

    1
    2
    modprobe ip_conntrack_ftp
    modprobe ip_nat_ftp
  4. 配置 iptables 开放 4000 到 5000 端口(如果防火墙没启用可以跳过4、5步)

    1
    2
    3
    4
    vi /etc/sysconfig/iptables  在*filter下加入下

    -A OUTPUT -p tcp --sport 4000:5000 -j ACCEPT
    -A INPUT -p tcp --dport 4000:5000 -j ACCEPT
  5. 加载 iptables 配置

    1
    iptables-restore < /etc/sysconfig/iptables
  6. 重启 Vsftpd

    1
    service vsftpd restart

本作品采用知识共享署名 4.0 中国大陆许可协议进行许可,欢迎转载,但转载请注明来自御前提笔小书童,并保持转载后文章内容的完整。本人保留所有版权相关权利。

本文链接:https://royalscholar.cn/2019/08/04/《探错笔记》之Linux的FTP服务/

# IDEA

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×