开发者社区> 技术小胖子> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

深入挖掘vsftpd服务

简介:
+关注继续查看
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
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
vsftp服务
上传、下载、创建、删除、重命名
 
大纲:
一、匿名用户
二、系统用户
三、虚拟用户
 
 
------------------------
ftp> ?
Commands may be abbreviated.  Commands are:
 
!              debug        mdir        sendport    site
$              dir            mget        put         size
account      disconnect     mkdir     pwd         status
append       exit           mls         quit          struct
ascii          form           mode        quote         system
bell           get           modtime   recv          sunique
binary     glob           mput        reget         tenex
bye          hash           newer     rstatus     tick
case           help           nmap        rhelp         trace
cd           idle           nlist     rename      type
cdup           image        ntrans        reset         user
chmod          lcd            open        restart     umask
close          ls               prompt        rmdir         verbose
cr           macdef           passive   runique     ?
delete       mdelete        proxy     send
 
常用的命令
!:    退出
quit:  退出
exit:  退出
 
cd:    在登陆vsftpd后,切换目录
lcd:   切换系统上目录
 
delete:删除文件,文件
rmdir: 删除目录,目录
 
put:   上传;一次上传一个文件
mput:  上传;一次上传多个文件
 
 
get:   下载;一次下载一个文件
mget:  下载:一次下载多个文件
 
rename:重命名
mkdir: 创建目录 
 
dir:   查看目录列表
ls:     查看目录列表
 
 
#参数禁用匿名用户和系统用户访问
anonymous_enable=NO
local_enable=NO
#访问结果如下
[root@localhost vsftpd]# ftp localhost
Trying ::1...
ftp: connect to address ::1拒绝连接
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
500 OOPS: vsftpd: both local and anonymous access disabled!
ftp> 
 
======================================================================================================================
===========================匿===============名====================用======================户==========================
======================================================================================================================
 
 
 
================================================创建目录权限==========================================================
首先来看匿名用户
1、在匿名用户的根目录下创建一个子目录
[root@vsftpd ~]# mkdir /var/ftp/upload
[root@vsftpd ~]# ll -d /var/ftp/upload/
drwxr-xr-x 2 root root 4096 7月  19 19:11 /var/ftp/upload/
 
 
2、匿名用户在upload目录中第一次创建test目录
[root@vsftpd ~]# ftp localhost
Trying ::1...
ftp: connect to address ::1拒绝连接
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
220 (vsFTPd 2.2.2)
Name (localhost:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> dir
227 Entering Passive Mode (127,0,0,1,134,99).
150 Here comes the directory listing.
drwxr-xr-x    2 0        0            4096 Mar 01  2013 pub
drwxr-xr-x    2 0        0            4096 Jul 19 11:11 upload
226 Directory send OK.
ftp> cd upload
250 Directory successfully changed.
ftp> mkdir test   #权限被拒绝,错误代码550
550 Permission denied.
 
3、修改vsftpd的配置文件,增加创建目录的权限
[root@vsftpd vsftpd]# vim vsftpd.conf 
anon_mkdir_write_enable=YES
 
 
4、修改配置文件后,每次都要重新载入配置文件
[root@vsftpd vsftpd]# service vsftpd restart
关闭 vsftpd:                                              [确定]
为 vsftpd 启动 vsftpd:                                    [确定]
 
5、匿名用户第二次登录并在upload目录中创建test目录
[root@vsftpd ~]# ftp localhost
Trying ::1...
ftp: connect to address ::1拒绝连接
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
220 (vsFTPd 2.2.2)
Name (localhost:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd upload
250 Directory successfully changed.
ftp> mkdir test   #提示创建目录操作失败,错误代码依旧是550
550 Create directory operation failed.
注释:同样是错误代码550,但是代表的意义是不一样的。
第一个500:提示权限被拒绝,应该属于配置文件层的
第二个500:提示创建目录操作失败,应该属于文件层的
结论:应该属于upload目录的权限问题,查看upload目录的权限,宿主宿组都是root并且其它用户没有写入的权限
[root@vsftpd ~]# ll -d /var/ftp/upload/
drwxr-xr-x 2 root root 4096 7月  19 19:11 /var/ftp/upload/
赋予其它用户对upload目录有写入的权限
[root@vsftpd ~]# chmod o+w /var/ftp/upload/
[root@vsftpd ~]# ll -d /var/ftp/upload/
drwxr-xrwx 2 root root 4096 7月  19 19:11 /var/ftp/upload/
 
 
6、匿名用户第三次登陆并在upload目录中创建test目录
ftp> mkdir test
257 "/upload/test" created
ftp> pwd
257 "/upload"
ftp> dir
227 Entering Passive Mode (127,0,0,1,171,81).
150 Here comes the directory listing.
drwx------    2 14       50           4096 Jul 19 11:23 test
226 Directory send OK.
 
总结:针对vsftpd服务来说;权限=vsftpd配置文件的权限+根目录的是否有写入权限
 
 
-------------小小的发现----------------
在登陆状态下,级联创建目录后,虽然目录也能创建成功,但是打开却失败,如下
[root@vsftpd ~]# ftp localhost
Trying ::1...
ftp: connect to address ::1拒绝连接
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
220 (vsFTPd 2.2.2)
Name (localhost:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd upload
250 Directory successfully changed.
ftp> dir
227 Entering Passive Mode (127,0,0,1,178,230).
150 Here comes the directory listing.
-rw-------    1 14       50          16558 Jul 19 16:49 Ins.log
226 Directory send OK.
ftp> mkdir ftproot
257 "/upload/ftproot" created
ftp> dir
227 Entering Passive Mode (127,0,0,1,191,8).
150 Here comes the directory listing.
-rw-------    1 14       50          16558 Jul 19 16:49 Ins.log
drwx------    2 14       50           4096 Jul 19 17:00 ftproot
226 Directory send OK.
ftp> cd ftproot
250 Directory successfully changed.
ftp> pwd
257 "/upload/ftproot"
ftp> mkdir test
257 "/upload/ftproot/test" created
ftp> dir        
227 Entering Passive Mode (127,0,0,1,233,207).
150 Here comes the directory listing.
226 Transfer done (but failed to open directory).  #传输成功,但是打开目录失败
 
解决办法:
首先修改配置文件,然后重启vsftpd服务,最后再次查看
修改配置文件,如下
[root@vsftpd ~# vim /etc/vsftpd/vsftpd.conf 
anon_world_readable_only=NO
 
# service vsftpd restart
 
#ftp> dir ftproot  #查看成功
227 Entering Passive Mode (127,0,0,1,102,170).
150 Here comes the directory listing.
drwx------    2 14       50           4096 Jul 19 17:00 test
226 Directory send OK.
================================================上传权限==========================================================
1、上传本地文件;测试
[root@vsftpd ~]# ll
总用量 36
-rw-------. 1 root root   981 6月  30 21:13 anaconda-ks.cfg
-rw-r--r--. 1 root root 16558 6月  30 21:13 install.log
-rw-r--r--. 1 root root  3482 6月  30 21:10 install.log.syslog
drwxr-xr-x  2 root root  4096 7月  19 18:53 vsftpd
[root@vsftpd ~]# ftp localhost
Trying ::1...
ftp: connect to address ::1拒绝连接
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
220 (vsFTPd 2.2.2)
Name (localhost:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd upload
250 Directory successfully changed.
ftp> put install.log       #上传本地install.log文件,权限被拒绝
local: install.log remote: install.log
227 Entering Passive Mode (127,0,0,1,95,49).
550 Permission denied.
权限被拒绝,很多都是因为配置文件的问题
 
2、修改配置文件并重启vsftpd服务
[root@vsftpd ~]# vi /etc/vsftpd/vsftpd.conf 
anon_upload_enable=YES
[root@vsftpd ~]# service vsftpd restart
关闭 vsftpd:                                              [确定]
为 vsftpd 启动 vsftpd:                                    [确定]
 
3、再次登录,上传测试文件
[root@vsftpd ~]# ftp localhost
Trying ::1...
ftp: connect to address ::1拒绝连接
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
220 (vsFTPd 2.2.2)
Name (localhost:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd upload
250 Directory successfully changed.
ftp> put install.log
local: install.log remote: install.log
227 Entering Passive Mode (127,0,0,1,26,235).
150 Ok to send data.
226 Transfer complete.
16558 bytes sent in 0.0755 secs (219.29 Kbytes/sec)
ftp> dir
227 Entering Passive Mode (127,0,0,1,169,5).
150 Here comes the directory listing.
-rw-------    1 14       50          16558 Jul 19 11:33 install.log
drwx------    2 14       50           4096 Jul 19 11:23 test
 
 
 
 
 
 
 
 
 
 
================================================删除|重命名权限==========================================================
[root@vsftpd vsftpd]# ftp localhost
Trying ::1...
ftp: connect to address ::1拒绝连接
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
220 (vsFTPd 2.2.2)
Name (localhost:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd upload
250 Directory successfully changed.
ftp> dir
227 Entering Passive Mode (127,0,0,1,221,162).
150 Here comes the directory listing.
-rw-------    1 14       50          16558 Jul 19 11:33 install.log
drwx------    2 14       50           4096 Jul 19 11:23 test
226 Directory send OK.
ftp> rename install.log Ins.log   #将文件install.log重命名为Ins.log  成功
350 Ready for RNTO.
250 Rename successful.
ftp> dir
227 Entering Passive Mode (127,0,0,1,203,30).
150 Here comes the directory listing.
-rw-------    1 14       50          16558 Jul 19 11:33 Ins.log
drwx------    2 14       50           4096 Jul 19 11:23 test
226 Directory send OK.
ftp> rename test FileTest         #将目录test重命名为FileTest  成功
350 Ready for RNTO.
250 Rename successful.
ftp> dir
227 Entering Passive Mode (127,0,0,1,237,149).
150 Here comes the directory listing.
drwx------    2 14       50           4096 Jul 19 11:23 FileTest
-rw-------    1 14       50          16558 Jul 19 11:33 Ins.log
226 Directory send OK.
ftp> delete Ins.log              #删除文件Ins.log 使用delete  成功
250 Delete operation successful.
ftp> dir
227 Entering Passive Mode (127,0,0,1,41,156).
150 Here comes the directory listing.
drwx------    2 14       50           4096 Jul 19 11:23 FileTest
ftp> delete FileTest            #delete无法针对目录删除,只能针对文件
550 Delete operation failed.
ftp> rmdir FileTest             #rmdir是针对目录删除的   
250 Remove directory operation successful.
ftp> dir
227 Entering Passive Mode (127,0,0,1,197,212).
150 Here comes the directory listing.
-rw-------    1 14       50          16558 Jul 19 16:49 Ins.log
226 Directory send OK.
ftp> 
 
 
 
 
 
 
 
 
 
 
 
 
================================================下载权限==========================================================
1、登录并下载文件
[root@vsftpd mnt]# ftp localhost
Trying ::1...
ftp: connect to address ::1拒绝连接
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
220 (vsFTPd 2.2.2)
Name (localhost:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd upload
250 Directory successfully changed.
ftp> dir
227 Entering Passive Mode (127,0,0,1,103,89).
150 Here comes the directory listing.
drwx------    2 14       50           4096 Jul 19 11:23 FileTest
-rw-------    1 14       50            805 Jul 19 11:48 fstab
ftp> get FileTest        #文件打开失败,还是权限问题
local: FileTest remote: FileTest
227 Entering Passive Mode (127,0,0,1,61,141).
550 Failed to open file.
 
2、修改配置文件,添加下载权限并重启服务
[root@vsftpd mnt]# vim /etc/vsftpd/vsftpd.conf 
anon_world_readable_only=NO
[root@vsftpd mnt]# service vsftpd restart
关闭 vsftpd:                                              [确定]
为 vsftpd 启动 vsftpd:                                    [确定]
 
3、再次登录,下载 成功
[root@vsftpd mnt]# ftp localhost
Trying ::1...
ftp: connect to address ::1拒绝连接
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
220 (vsFTPd 2.2.2)
Name (localhost:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd upload
250 Directory successfully changed.
ftp> dir
227 Entering Passive Mode (127,0,0,1,139,108).
150 Here comes the directory listing.
drwx------    2 14       50           4096 Jul 19 11:23 FileTest
-rw-------    1 14       50            805 Jul 19 11:48 fstab
226 Directory send OK.
ftp> mget FileTest fstab
mget fstab? yes
227 Entering Passive Mode (127,0,0,1,157,240).
150 Opening BINARY mode data connection for fstab (805 bytes).
226 Transfer complete.
805 bytes received in 2.8e-05 secs (28750.00 Kbytes/sec)
ftp> !
[root@vsftpd mnt]# ll  #下载成功
总用量 4
-rw-r--r-- 1 root root 805 7月  19 19:56 fstab
 
 
 
 
 
 
 
==========================================vsftpd.conf配置文件概述=======================================================
 
anonymous_enable=YES        #允许匿名用户访问(yes,为允许,no为不允许)
local_enable=NO             #是否禁用本地用户(设置为no是表示禁用,yes表示不禁用)
write_enable=YES            #允许开放写的权限
anon_umask=022              #设置匿名用户上传建立文件时的权限掩码
anon_upload_enable=YES      #允许匿名上传文件
anon_mkdir_write_enable=YES #允许匿名用户创建目录
dirmessage_enable=YES       #用户切换进入目录时显示.message(如果存在)文件的内容
xferlog_enable=YES          #开启xferlog日志,默认记录到/var/log/xferlog)
connect_from_port_20=YES    #连接控制端口为20
xferlog_std_format=YES      #启用标准xferlog的日志格式,若禁用此项,将使用vsftpd自己的日志格式
listen=YES                  #是否以独立运行的方式监听服务
pam_service_name=vsftpd     #设root置用于用户认证的PAM文件位置(/etc/pam.d/目录中对应的文件名)
userlist_enable=NO          #未启用本地用户时,可以将用户列表功能禁用
tcp_wrappers=YES            #是否开启tcp_wrappers主机访问控制
chroot_local_user=YES       #是否将FTP本地 用户禁锢在宿主目录中
no_anon_password=YES        #允许匿名访问不需要密码(加也可以,不加也可以)
 
 
可新添加的你们用户的设置值
anon_world_readable_only=YES  #仅允许匿名用户具有下载可读文件的权限)
anon_other_write_enable=YES   #是否允许匿名用户有其它写入权限,如对文件改名,覆盖以及删除(此选项慎用)
 
 
 
anon_world_readable_only=NO
anon_upload_enable=YES
download_enable=NO
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
locel_root=/home/ftpsite/mike
 
 
 
 
 
 
======================================================================================================================
===========================本===============地====================用======================户==========================
======================================================================================================================
本地用户需要结合ftpusers和user_list这两个文件
ftpusers:该文件中包含的用户帐户将被禁止登入vsftpd服务器,不管用户是不是在user_list文件出现
user_list:该文件中包含的用户帐户可能被禁止登入vsftpd服务器,也可能被允许登入,具体要看userlist_enable
(是否启用user_list用户列表文件)的配置(配置成YES,则启用,NO则不启用),当userlist_enable=YES,之后看userlist_deny的配置
(为YES则仅禁止用户列表文件的用户账号登入,为NO则仅用户列表文件的用户账号登入)
 
[root@vsftpd vsftpd]# ll
总用量 20
-rw------- 1 root root  125 3月   1 2013 ftpusers 
-rw------- 1 root root  361 3月   1 2013 user_list
-rw------- 1 root root 4990 7月  20 01:06 vsftpd.conf
-rwxr--r-- 1 root root  338 3月   1 2013 vsftpd_conf_migrate.sh
 
 
[root@vsftpd ~]# useradd scott
[root@vsftpd ~]# echo "123" |passwd --stdin "scott"
更改用户 scott 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
 
================================================创建目录权限==========================================================
1、创建系统账户
[root@vsftpd ~]# useradd scott
[root@vsftpd ~]# echo "123" |passwd --stdin "scott"
更改用户 scott 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
 
2、系统账户登录测试
[root@vsftpd ~]# ftp localhost
Trying ::1...
ftp: connect to address ::1拒绝连接
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
220 (vsFTPd 2.2.2)
Name (localhost:root): scott
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/home/scott"
ftp> cd /mnt/
250 Directory successfully changed.
ftp> pwd
257 "/mnt"
ftp> cd /usr/local/
250 Directory successfully changed.
ftp> dir
227 Entering Passive Mode (127,0,0,1,217,163).
150 Here comes the directory listing.
drwxr-xr-x    2 0        0            4096 Sep 23  2011 bin
drwxr-xr-x    2 0        0            4096 Sep 23  2011 etc
drwxr-xr-x    2 0        0            4096 Sep 23  2011 games
drwxr-xr-x    2 0        0            4096 Sep 23  2011 include
drwxr-xr-x    2 0        0            4096 Sep 23  2011 lib
drwxr-xr-x    2 0        0            4096 Sep 23  2011 lib64
drwxr-xr-x    2 0        0            4096 Sep 23  2011 libexec
drwxr-xr-x    2 0        0            4096 Sep 23  2011 sbin
drwxr-xr-x    5 0        0            4096 Jun 30 13:06 share
drwxr-xr-x    2 0        0            4096 Sep 23  2011 src
226 Directory send OK.
注释:想必大家也看到了,系统账户scott登录后,可以任意切换到系统的任意目录,显然这样是十分不安全的,应该做到
系统用户登录后锁定到自已的家目录中,禁止任意切换目录路径
 
 
3、修改配置文件
[root@vsftpd ~]# vim /etc/vsftpd/vsftpd.conf 
chroot_local_user=YES
 
4、系统账户再次登录,测试切换目录路径
[root@vsftpd ~]# ftp localhost
Trying ::1...
ftp: connect to address ::1拒绝连接
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
220 (vsFTPd 2.2.2)
Name (localhost:root): scott
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/"
ftp> cd /mnt/
550 Failed to change directory.  #失败的切换目录
ftp> pwd
257 "/"
ftp> dir
227 Entering Passive Mode (127,0,0,1,152,129).
150 Here comes the directory listing.
226 Directory send OK.
 
 
 
 
 
 
 
 
 
==========================================vsftpd.conf配置文件概述=======================================================
anonymous_enable=NO         #允许匿名用户访问(yes,为允许,no为不允许)
local_enable=YES            #是否禁用本地用户 (设置为no是表示禁用,yes表示不禁用)
write_enable=YES            #允许开放写的权限
local_umask=022             #设置用户上传建立文件时的权限掩码
dirmessage_enable=YES       #用户切换进入目录时显示.message(如果存在)文件的内容
xferlog_enable=YES          #(开启xferlog日志,默认记录到/var/log/xferlog)
connect_from_port_20=YES    #连接控制端口为20
xferlog_std_format=YES      #启用标准xferlog的日志格式,若禁用此项,将使用vsftpd自己的日志格式
ascii_upload_enable=YES     #允许用户使用Ascii码格式上传文件
ascii_download_enable=YES   #允许用户使用Ascii码格式下载文件
listen=YES                  #是否以独立运行的方式监听服务
pam_service_name=vsftpd     #设root置用于用户认证的PAM文件位置(/etc/pam.d/目录中对应的文件名)
userlist_enable=NO          #是否启用user_list用户列表文件
tcp_wrappers=YES            #是否开启tcp_wrappers主机访问控制
chroot_local_user=YES       #是否将FTP本地 用户禁锢在宿主目录中
max_clients=20              #限制并发客户连接数最多为20个
max_per_ip=2                #限制来自同一个IP的客户连接数为最多2个
local_max_rate=102400       #本地下载、上传限速为100KB/s
pasv_enable=YES             #允许被动模式连接
pasv_min_port=24500         #设置用于被动连接的服务器最小端口号
pasv_max_port=24600         #设置用于被动连接的服务器最大端口号
connect_from_port_20=YES    #允许服务器主动模式(从20端口建立数据连接)
download_enable=YES         #是否允许下载文件(建立仅限于浏览和上传的设置为NO)
 
 
 
 
======================================================================================================================
===========================虚===============拟====================用======================户==========================
======================================================================================================================
 
1、安装vsftpd和db4-utils
[root@vsftpd ~]# yum -y install vsftpd db4-utils
注释:vsftpd是ftp服务的主程序包;db4-utils的客户端命令db_load可以用来生成用户的数据库文件
 
2、建立文本格式的用户名和密码列表文件
注释:奇数行为用户,偶数行为密码
[root@vsftpd ~]# cd /etc/vsftpd/
[root@vsftpd vsftpd]# cat >> vusers.list << EOF
> tom
> 123
> jerry
> 123
> Allentuns
> 123
> EOF
 
3、db_load工具将列表文件转化为DB数据库文件
[root@vsftpd vsftpd]# db_load -T -t hash -f vusers.list vusers.db
注释:命令的用法
db_load -T(转换) -t hash(指定读取数据文件的基本方法) -f vusers.list(刚才的列表文件)vusers.db(转化为数据库文件)
 
注释:检查是否转换成功
[root@vsftpd vsftpd]# file vusers.db 
vusers.db: Berkeley DB (Hash, version 9, native byte-order)
[root@vsftpd vsftpd]# file vusers.list 
vusers.list: ASCII text
 
 
4、建立ftp访问的根目录及虚拟用户对应的系统账号
[root@vsftpd vsftpd]# mkdir /var/ftproot
[root@vsftpd vsftpd]# useradd -d /var/ftproot/ -s /sbin/nologin virtual
useradd:警告:此主目录已经存在。
不从 skel 目录里向其中复制任何文件。
 
5、更改根目录的权限
[root@vsftpd vsftpd]# chown virtual:virtual /var/ftproot
[root@vsftpd vsftpd]# chmod 755 /var/ftproot
 
6、建立pam认证文件
[root@vsftpd vsftpd]# cat >> /etc/pam.d/vsftpd.vu << EOF
> #%PAM-1.0
> auth      required   pam_userdb.so    db=/etc/vsftpd/vusers
> account   required   pam_userdb.so    db=/etc/vsftpd/vusers
> EOF
 
7、修改配置文件
[root@vsftpd vsftpd]# cp vsftpd.conf vsftpd.conf.bak
[root@vsftpd vsftpd]# vim vsftpd.conf
anonymous_enable=NO       #允许匿名用户访问(yes,为允许,no为不允许)
local_enable=YES          #是否禁用本地用户(设置为no是表示禁用,yes表示不禁用)
write_enable=YES          #允许开放写的权限
anon_umask=022            #设置匿名用户上传建立文件时的权限掩码
dirmessage_enable=YES     #用户切换进入目录时显示.message(如果存在)文件的内容
xferlog_enable=YES        #开启xferlog日志,默认记录到/var/log/xferlog)
connect_from_port_20=YES  #连接控制端口为20
xferlog_std_format=YES    #启用标准xferlog的日志格式,若禁用此项,将使用vsftpd自己的日志格式
listen=YES                #是否以独立运行的方式监听服务
userlist_enable=YES       #未启用本地用户时,可以将用户列表功能禁用
tcp_wrappers=YES          #是否开启tcp_wrappers主机访问控制
guest_enable=YES            #启用用户映射功能
guest_username=virtual      #将映射用户指定为virtual(我们之前创建的虚拟用户)
pam_service_name=vsftpd.vu  #设root置用于用户认证的PAM文件位置(/etc/pam.d/vsftpd.vu 目录中对应的文件名)
local_root=/var/ftproot     #指定ftp的路径(可以自己写目录路径,要注意权限和宿主)
 
8、重新启动vsftpd服务
[root@vsftpd vsftpd]# service vsftpd restart
关闭 vsftpd:                                              [确定]
为 vsftpd 启动 vsftpd:                                    [确定]
 
 
9、为不同的虚拟用户建立独立的配置文件(分配不同的权限)
[root@vsftpd ~]# cd /etc/vsftpd/
[root@vsftpd vsftpd]# mkdir chroot_list
[root@vsftpd vsftpd]# vim chroot_list/tom
#上传、创建文件
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_world_readable_only=NO
anon_other_write_enable=YES
 
10、然后再修改配置文件,在里面添加一句
[root@vsftpd vsftpd]# vim vsftpd.conf
#指定给用户配置权限目录的位置
user_config_dir=/etc/vsftpd/chroot_list
 
 
 
11、登录、用户权限|测试
创建目录,上传文件,删除、重命名,下载
[root@vsftpd mnt]# ftp localhost
Trying ::1...
ftp: connect to address ::1拒绝连接
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
220 (vsFTPd 2.2.2)
Name (localhost:root): tom
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/"
ftp> mkdir upload
257 "/upload" created
ftp> dir
227 Entering Passive Mode (127,0,0,1,139,65).
150 Here comes the directory listing.
drwx------    2 500      500          4096 Jul 20 19:53 upload
226 Directory send OK.
ftp> lcd /etc
Local directory now /etc
ftp> put fstab
local: fstab remote: fstab
227 Entering Passive Mode (127,0,0,1,249,106).
150 Ok to send data.
226 Transfer complete.
805 bytes sent in 3.8e-05 secs (21184.21 Kbytes/sec)
ftp> dir
227 Entering Passive Mode (127,0,0,1,206,240).
150 Here comes the directory listing.
-rw-------    1 500      500           805 Jul 20 19:53 fstab
drwx------    2 500      500          4096 Jul 20 19:53 upload
226 Directory send OK.
ftp> mput inittab passwd
mput inittab? yes
227 Entering Passive Mode (127,0,0,1,223,114).
150 Ok to send data.
226 Transfer complete.
884 bytes sent in 4.1e-05 secs (21560.98 Kbytes/sec)
mput passwd? yes
227 Entering Passive Mode (127,0,0,1,254,126).
150 Ok to send data.
226 Transfer complete.
951 bytes sent in 3e-05 secs (31700.00 Kbytes/sec)
ftp> dir
227 Entering Passive Mode (127,0,0,1,170,44).
150 Here comes the directory listing.
-rw-------    1 500      500           805 Jul 20 19:53 fstab
-rw-------    1 500      500           884 Jul 20 19:54 inittab
-rw-------    1 500      500           951 Jul 20 19:54 passwd
drwx------    2 500      500          4096 Jul 20 19:53 upload
226 Directory send OK.
ftp> rename passwd password
350 Ready for RNTO.
250 Rename successful.
ftp> dir
227 Entering Passive Mode (127,0,0,1,249,227).
150 Here comes the directory listing.
-rw-------    1 500      500           805 Jul 20 19:53 fstab
-rw-------    1 500      500           884 Jul 20 19:54 inittab
-rw-------    1 500      500           951 Jul 20 19:54 password
drwx------    2 500      500          4096 Jul 20 19:53 upload
226 Directory send OK.
ftp> delete inittab
250 Delete operation successful.
ftp> dir
227 Entering Passive Mode (127,0,0,1,142,175).
150 Here comes the directory listing.
-rw-------    1 500      500           805 Jul 20 19:53 fstab
-rw-------    1 500      500           951 Jul 20 19:54 password
drwx------    2 500      500          4096 Jul 20 19:53 upload
226 Directory send OK.
ftp> mkdir test
257 "/test" created
ftp> dir
227 Entering Passive Mode (127,0,0,1,54,117).
150 Here comes the directory listing.
-rw-------    1 500      500           805 Jul 20 19:53 fstab
-rw-------    1 500      500           951 Jul 20 19:54 password
drwx------    2 500      500          4096 Jul 20 19:55 test
drwx------    2 500      500          4096 Jul 20 19:53 upload
226 Directory send OK.
ftp> rmdir test
250 Remove directory operation successful.
ftp> dir
227 Entering Passive Mode (127,0,0,1,99,71).
150 Here comes the directory listing.
-rw-------    1 500      500           805 Jul 20 19:53 fstab
-rw-------    1 500      500           951 Jul 20 19:54 password
drwx------    2 500      500          4096 Jul 20 19:53 upload
226 Directory send OK.
ftp> lcd /mnt/
Local directory now /mnt
ftp> mget fstab password upload
mget fstab? yes
227 Entering Passive Mode (127,0,0,1,230,153).
150 Opening BINARY mode data connection for fstab (805 bytes).
226 Transfer complete.
805 bytes received in 9.8e-05 secs (8214.29 Kbytes/sec)
mget password? yes
227 Entering Passive Mode (127,0,0,1,141,146).
150 Opening BINARY mode data connection for password (951 bytes).
226 Transfer complete.
951 bytes received in 5.1e-05 secs (18647.06 Kbytes/sec)
ftp> !
[root@vsftpd mnt]# ll
总用量 8
-rw-r--r-- 1 root root 805 7月  21 03:55 fstab
-rw-r--r-- 1 root root 951 7月  21 03:55 password
 
 
 
 
 
建议公司用虚拟用户做vsftpd,因为虚拟用户是在Linux系统中不存在的,这样增强系统的安全性vsftpd配置文件的更多参数,
大家感兴趣可以自己去配置,我写的都是一些基本的配置参数
 
==========================================vsftpd.conf配置文件概述=======================================================
 
主配置文件:/etc/vsftpd/vsftpd.conf
匿名权限
anon_root 指定匿名用户访问目录
anonymous_enable 是否启用匿名访问
anon_mkdir_write_enable   是否允许匿名用户创建目录的权限
anon_other_write_enalbe 是否允许匿名用户其他的写入权限
anon_max_rate    允许匿名用户最大的传输速率
anon_upload_enable  是否允许匿名用户上传
anon_umask=022  匿名用户上传文件的默认权限
  
本地用户权限
local_root 指定本地用户登陆后的宿主目录
chroot_local_user 是否将用户禁锢在宿主目录中
local_max_rate  允许本地用户的传输速率
local_mkdir_write_enable 是否允许本地用户创建目录的权限
local_other_write_enable 是否允许本地用户其他的写入权限
local_enable 是否启用本地用户访问
local_umask 本地用户上传文件的默认权限
  
全局配置
listen=yes 是否以独立的方式监听服务
listen_port=21 设置FTP的侦听端口
write_enable 是否允许写入
download_enable 是否允许下载
dirmessage_enable 用户切换目录时显示.message文件
xferlog_enable  启用xferlog日志
xferlog_std_format 启用标准的xferlog日志
connect_from_port_20 允许服务器从20号端口建立主动连接
pasv_enable 允许服务器被动连接
pasv_max_port   设置用于被动连接的最大端口号
pasv_min_port   设置用于被动连接的最小端口号
pam_service_name 设置用于用户认证的pam文件的位置
userlist_enable  是否启用user_list列表文件
userlist_deny   是否禁user_list列表中用户帐号
max_clients  最多允许多少个客户端同时连接
max_per_ip   对来自同一IP的客户端,最多允许多少个并发连接
tcp_wrappers 是否启用TCP_wrappers主机访问控制
chroot_list_enable=yes
chroot_list_file=/etc/vsftpd/chroot_list
  
虚拟用户配置
guest_enable 是否启用用户映射功能
guest_username 将映射用户指定为某个系统用户
user_config_dir 指定虚拟用户配置目录位置
 
 
 
=======================================================================================================================================
=======================================================================================================================================
=======================================================================================================================================
#!/bin/bash
# Allentuns-郑彦生
# time 2014-07-20
 
#反复安装后,再次安装删除路径文件
yum -y remove vsftpd
rm -rf /etc/init.d/vsftpd
rm -rf /etc/vsftpd
rm -rf /etc/pam.d/vsftpd.vu
rm -rf /var/ftproot
userdel -r virtual
 
#关闭防火墙和selinux
service iptables stop
chkconfig iptables off
setenforce 0
 
 
#安装vsftpd和db4包
yum -y install vsftpd db4-utils
yum -y install ftp
 
#每次安装前对原文件进行一个打包
#tar -cPf /root/vsftpd_bak.tar.gz /etc/vsftpd
 
#创建用户列表文件
#奇数行为账户,偶数行为密码
cd /etc/vsftpd
cat > vusers.list << EOF
tom
123456
jerry
123456
Allentuns
123456
EOF
 
#生成db数据库文件
db_load -T -t hash -f vusers.list vusers.db
 
#创建虚拟用户根目录
mkdir /var/ftproot
#创建虚拟用户 不允许登录系统
useradd -d /var/ftproot/ -s /sbin/nologin virtual &> /dev/null
#更改文件属性、权限
chown virtual:virtual /var/ftproot
chmod 755 /var/ftproot
 
#创建pam文件
cat > /etc/pam.d/vsftpd.vu << EOF
#%PAM-1.0
auth      required   pam_userdb.so    db=/etc/vsftpd/vusers
account   required   pam_userdb.so    db=/etc/vsftpd/vusers
EOF
 
#创建虚拟用户权限文件
cp vsftpd.conf vsftpd.conf.bak
mkdir chroot_list
cat > chroot_list/tom << EOF
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_world_readable_only=NO
anon_other_write_enable=YES
EOF
 
#指明用户列表文件
sed -i 's/pam_service_name=vsftpd/pam_service_name=vsftpd.vu/' vsftpd.conf
 
 
cat >> vsftpd.conf << EOF
guest_enable=YES
guest_username=virtual
local_root=/var/ftproot
user_config_dir=/etc/vsftpd/chroot_list
EOF
sed -i 's/anonymous_enable=YES/anonymous_enable=NO/' /etc/vsftpd/vsftpd.conf
 
#启动服务
/etc/init.d/vsftpd restart
echo "iptables is stop and selinux is disabled"
echo "vsftpd Successfully installed and service startup"

工作中遇到的一些问题,尤其是被动模式,在调试防火墙的时候格外的麻烦,借此借用朋友博客的截图用以分析主动模式和被动模式的区别

wKiom1Pgb-KB2YDKAAOl7wHGD-s516.jpg

wKioL1PgcPyiUib7AAIMbPT3Cus092.jpg

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
#!/bin/bash
src=/www/newtmp
 
FTP_SERVER="192.168.1.107"
FTP_USER="jerry"
FTP_PASS="12345"
 
while true
do
cd $src
find $src -mmin +1 -type f -exec mv '{}' /www/mnttmp ';'
cd /www/mnttmp
wccc=`ls -l|wc -l`
if [ $wccc != "1" ];then
ftp -v -n $FTP_SERVER << EOF
user $FTP_USER $FTP_PASS
prompt off
mput *.*
bye
EOF
rm -rf  /www/mnttmp/*
fi
 
echo `date` 请等待文件传输过程中。。。
sleep 1
done







     本文转自zys467754239 51CTO博客,原文链接:http://blog.51cto.com/467754239/1440658,如需转载请自行联系原作者






版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
21114
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载