|
|
楼主 |
发表于 2022-5-14 09:05:45
|
显示全部楼层
3.使用系统用户访问 FTP 服务器& k- k+ ]; M, X" O2 {0 h1 t
3.1.修改配置文件并重启服务4 O) P8 k5 Q" O$ L% G- P) J0 k
vim /etc/vsftpd/vsftpd.conf
; V$ \7 D" k: ^2 ?- V/ C-------------------------------
" {1 W# k& V9 H& F- F/ T3 Wanonymous_enable=NO; J/ j0 q+ f! ~5 T
local_enable=YES) v0 {1 v! l) K7 B& n2 \2 g; U
write_enable=YES
0 n! K4 h4 u) D. Klocal_umask=022
1 T2 v9 Q' g @$ E; [1 ochroot_local_user=YES
) j! z" N( T: V0 ^userlist_enable=YES4 \6 S" ?6 k, O( b
userlist_deny=NO
8 D& _3 `2 J; z9 a+ j, Buserlist_file=/etc/vsftpd/user_list
" N! i' R2 J* I6 ~8 Upam_service_name=vsftpd
( b) q/ g8 E$ y- Ctcp_wrappers= YES# M: ~; {$ v* Q J! I1 ]
-------------------------------
9 i* {4 @) A( H1 I5 i4 Hsystemctl restart vsftpd7 j$ y3 L8 s* Q
systemctl status vsftpd% C- h/ B/ a) V0 U' \
配置注解:$ c: B" K: h8 o9 z
anonymous_enable=NO # 修改,禁止匿名用户登录
- S& W: \7 {/ w' dlocal_enable=YES # 默认启用,允许本地用户登录,虚拟用户需要映射到本地用户才可以使用
0 |* k% A4 c* _7 wwrite_enable=YES # 默认启用,本地用户开放写权限
9 U. ]4 i- L8 i5 x#local_umask=022 # 注释掉,本地用户创建的文件的权限反码022,创建的文件为644: W1 ` F$ U* w4 `8 y3 u2 K
chroot_local_user=YES # 默认启用,将本地用户锁定在自己的家目录中
" ?9 V. ]2 I' \3 \/ muserlist_enable=YES # 是否启用用户控制列表,默认启用
: z' S' W( s$ |! z7 [) E7 x) G- zuserlist_deny=NO # 指定用户控制列表的作用,默认为 YES,表示该文件内的用户列表禁止登录FTP服务器,这里修改为 NO,作为授权访问的用户列表使用
5 V& X: P, l: a" R, Fuserlist_file=/etc/vsftpd/user_list # 指定用户控制列表的文件名
/ C& r6 r Z, p0 `1 Danon_umask=022 # 增加,匿名用户新增文件的umask数值。默认值为077,需要修改为022,否则上传后的文件为600- J- a8 @7 G2 _1 L% m( V
dirmessage_enable=YES # 设置切换到目录时显 示message 隐含文件的内容/ d2 d/ @" B: a# j, u$ T2 D
xferlog_enable= YES # 激活上传和下载日志
+ p9 \' ~" d( R5 mconnect_from_port_20= YES # 启用FTP数据端口连接
5 N) w. G" g; s3 Cpam_service_name=vsftpd # 设置PAM认证服务的配置文件名称, 该文件存放在/etc/pam.d目录下
& {& r( p$ x$ W$ S" h! C) o* p& v: Flisten= YES # 是否使用独占启动方式* G2 Z' W! L+ f6 Q# E+ ?
tcp_wrappers= YES # 使用防火墙5 J' ?/ P/ s4 a1 w
#file_open_mode=07552 _5 c$ G5 l3 J' i3 L. j. b
pasv_min_port=50000 # 被动模式下的最小端口
2 Y& R/ K' C! K! l! v4 Rpasv_max_port=60000 # 被动模式下的最大端口: j8 u/ G. P2 A0 @
# 设置连接服务器后的欢迎信息
/ Y# u- ~" g: t# i6 W/ tftpd_banner=welcome to ftp service.& { e, y4 @4 ^( g
banner_file=/etc/vsftpd/vsftpd_banner_file/ e0 w3 P" k9 Z: S) z
配置建议:1 P: G- Z$ f1 c+ c8 J% D
userlist_deny=NO ,这里设置为NO,做为允许登陆的用户列表,可以手动指定允许登录 ftp 的用户,比较实用,如果设置为YES,作为禁止登录 ftp 的用户列表,与 ftpusers 功能重复,没有必要1 L4 h( K7 f/ X8 \- M: S$ v
vsftpd 的配置文件列表1 f4 t# ~. a- m, Y6 h
/etc/vsftpd/vsftpd.conf # 主配置文件
! Z( {$ }" _2 @6 a0 g2 h( z! T: z/etc/vsftpd/ftpusers # FTP限制访问的用户,里面是一些系统用户,默认不允许访问,防止被入侵,一般不需要修改: I w* R" V6 x# m# [4 V/ ~. V3 P$ A
/etc/vsftpd/user_list # 授权用户列表,可以控制哪些用户可以访问或者禁止访问,我一般配置为允许访问 ftp 的用户列表
! I! H1 q/ g3 c2 Q) h; X特别注意:
3 @, R# j% C+ a6 n9 R/ ~0 H1)vsftpd.conf 文件中每个选项设置为一行,格式为“option=value”,“=”号两边不能留空白符
/ j4 a" ?$ L. h% o, x3.2.创建测试用的本地用户6 @8 ^( f+ m( B# F
useradd zhaoshuai
9 ]2 E5 N/ L* ~7 V( vpasswd zhaoshuai
/ F8 \- ?9 ?- W( K. J创建测试用的文件和目录/ e$ x9 u2 m) _" d6 D4 @% b
[root@srv05-CT75 vsftpd]# touch /home/zhaoshuai/aaa.txt
! H# K. A( ^) M- S" I2 t/ m( P5 Z[root@srv05-CT75 vsftpd]# mkdir -p /home/zhaoshuai/bbb
u& q! [% Q6 g% S2 H$ X! o1 W[root@srv05-CT75 vsftpd]# ll /home/zhaoshuai/ * L& ]& M3 C. ?7 s! [
total 4
8 O( F: m5 X# v8 C. b9 |-rw-r--r-- 1 root root 0 Jun 19 02:18 aaa.txt K& U" G! a& o- n0 k& l9 M, T# h
drwxr-xr-x 2 root root 4096 Jun 19 02:18 bbb
9 e1 _* G1 I( t' C) E3.3.修改授权的本地用户列表8 G- `$ X# F# i2 E
ftpusers 禁止登录 ftp 服务器的用户列表,一般是系统用户不需要修改,可以增加" o& n5 T% x3 |7 }3 M. M7 G
vim /etc/vsftpd/ftpusers% T4 j9 ~! R) B; O& ]
-------------------------------
- n% H5 }2 T1 uroot3 Y% W! `8 P# I9 r( @1 a, o: M
bin
. g& F% S% p% H) r, ?5 g6 ?daemon
5 ], r# o# V3 w4 Hadm8 E* J! P' y3 F% h5 v2 f
lp
, }4 w( O( @4 `! `- Osync8 `! c. T7 K* j8 Z# t% z. P
shutdown
2 P2 Y6 G H3 r$ X3 Phalt2 _, j. u: @. K3 S5 o
mail
8 [1 K( q5 U1 f$ m* W% ^news
- t, `8 S; j2 }: u, g/ c' fuucp
; O% c" o$ _7 [: X! Moperator
6 M% q! b% g! @4 dgames8 O- D! `7 }) F' M* N, m9 X
nobody& C' \- f; i3 Y/ O$ E0 v
-------------------------------- F, ?/ K0 s, F7 y. l
user_list 允许登陆 ftp 服务器的用户列表: w- T% z; \, V. Z" }0 D3 J7 w1 D5 u
vim /etc/vsftpd/user_list
) S) F. f* ]' X+ e R8 D-------------------------------0 b5 {# I, B R0 n# i; K
zhaoshuai7 v" y0 @$ b5 E" T
-------------------------------
' v2 Z/ i l0 z( a/ r; I; Q1 @. ]4 f备注:以上两个文件修改完不需要重启 vsftpd 服务/ L9 |" }$ f8 J* p! t
3.4.使用本地用户登陆测试
, W2 ]% H7 D( Xftp 127.0.0.1 * O2 b) v3 g7 k% N$ m
实例演示:* q1 |5 q& t4 n
[root@srv05-CT75 pam.d]# ftp 127.0.0.1 ; }9 d. T; ?9 m: \- x0 p3 v
Connected to 127.0.0.1 (127.0.0.1).
+ [3 x3 q3 q4 e; n" f9 D220 (vsFTPd 3.0.2)
A' Q* n5 Q2 f7 y% DName (127.0.0.1:root): zhaoshuai5 p7 a# n2 V7 h( w
331 Please specify the password.
$ w& f s$ z2 |) B% P1 U$ PPassword:0 {# Q) N- o0 Y2 g* t& B! B# {0 k
230 Login successful.* o/ G6 [: A+ p0 W
Remote system type is UNIX.! {! i$ o1 e$ p# Y% {, U
Using binary mode to transfer files. X0 x! F$ E- T8 H9 e
ftp>
2 R1 m/ B% {! g# C* g, ~ftp> # Q$ S9 t2 M+ Y: p" r; h: ~, I+ Y
ftp> ls$ l* c0 B6 V' Q$ m+ e! O* E1 P( ~
227 Entering Passive Mode (127,0,0,1,94,91).8 @# y, x5 q: A$ j6 `' I5 T; M
150 Here comes the directory listing.; e2 Q* ]3 A, k1 G
-rw-r--r-- 1 0 0 0 Jun 18 18:18 aaa.txt9 S& C' j4 k( t7 P- r% A% i3 \
drwxr-xr-x 2 0 0 4096 Jun 18 18:18 bbb
( o# I1 h% u2 y1 v9 I. u& K+ o226 Directory send OK.
9 r( l- D) }- y) x+ D3 P/ }ftp> exit
$ [7 F; }" C% J221 Goodbye.
7 u: Q/ }4 f% ^# Z如果要使用 xftp 等图形工具,需要选择主动模式5 @+ q5 h, @$ _4 Y; p' _
对于阿里云,青云等云平台的虚拟机,需要考虑安全组:允许20,21端口的接入请求& ^/ z0 j. o' t- Q
阿里云配置nat网关的端口转发可以通过公网连接,或者直接绑定EIP,青云需要直接绑定EIP进行公网连接4 C: J7 D: T% ^4 P
阿里云和青云都无法通过负载均衡的端口转发提供ftp服务的访问,因为经过了他们内部的路由转发,无法直接找到对应的主机,总之ftp需要直连服务器才行% q9 ^2 A; s8 J- d
回到顶部% \( _ {8 Y% v" w5 G; o) Z
4.使用虚拟用户访问 FTP 服务器
5 J: s( s7 p# K' Fftp配置为匿名访问显然是不安全也不便于管理的,另外,单纯使用系统用户的 ftp 也较难管理,通常情况下是使用一个系统用户作为ftp用户登陆ftp服务器的代理用户进行管理" B4 W, M+ f9 v2 Q$ P- Z
4.1.修改vsftpd.conf 文件,重启服务5 \6 M1 j/ ~. M ]# H' z
cd /etc/vsftpd/8 ~9 ]' b/ w7 `9 v8 I. D3 c
vim vsftpd.conf ) d4 `8 y# P. M. p2 g
----------------------------------------1 K/ x7 g$ `& \: y6 x: G$ ^
anonymous_enable=NO" x# T* u7 |. K- w' ~5 Q
local_enable=YES
' c; u4 U8 a$ q2 Pwrite_enable=YES" L8 h9 l2 b' i5 S6 B
#local_umask=022
4 _& m) z5 s, X# achroot_local_user=YES/ t3 ] |9 ^8 x3 y! @$ w
userlist_enable=YES0 c& h+ p4 D7 m! L* T* j/ b
userlist_deny=NO, A5 D+ ~% w# U0 P1 @
userlist_file=/etc/vsftpd/user_list
4 \- e* D, E- q$ j) Bchroot_local_user=YES% K; O0 M/ ]$ \. M, P
# made for virtual user) ~% c8 @$ z/ a% o
guest_enable=YES# u) P8 X0 H T$ I% C0 l# h5 Z; D
guest_username=ftpvuser
1 z# `4 m c! t/ y/ jpam_service_name=/etc/pam.d/ftpvuser.pam4 j( Z6 }1 Z- ^6 {4 t# @) A
user_config_dir=/etc/vsftpd/vuser.d
% Z7 N' r6 A9 U0 I6 o5 c& qanon_umask=022
+ n0 e( s+ r) y5 w3 p" f( V-------------------------------------/ c! K7 C( _9 P- A. |6 Q, Z# m% i# j
systemctl restart vsftpd" `: i! l+ S5 G
systemctl status vsftpd7 g) `( d5 K4 q5 ]1 w) Z
配置注解:: ^* e( W+ N9 S: ^6 E
guest_enable=YES # 增加,启用虚拟用户模式 A" a6 M: ?$ \3 w) a- |& z7 Z8 W# Y
guest_username=ftpvuser # 增加,配置虚拟用户映射到的本地用户名
- Q( r* ~* ~- {& I4 xpam_service_name=/etc/pam.d/ftpvuser.pam # 修改,配置虚拟用户的认证方式4 \ ^9 f$ _5 [" j
user_config_dir=/etc/vsftpd/vuser.d # 增加,虚拟用户的配置文件目录
9 ~) P* s- {( z; L* j/ C5 P6 n注意:
1 n1 `+ I- w* ?0 G1)除了主配置文件外,还可以给特定用户设定个人配置文件6 q0 B8 a5 @/ s) h
2)虚拟用户默认可以读写,访问时映射为本地用户,所以需要启用对本地用户的控制! e8 I8 U1 i: h$ T2 x+ N/ b
3)实际的访问权限可由用户独立的配置文件进行单独控制
H, u/ n! x4 ~4 `) K5 n4.2.设置 ftp 虚拟用户的验证授权方式
) d6 v# o& f3 Q6 K# a1)创建虚拟用户的秘钥文件
( H0 J" v, i: Xmkdir -p /etc/vsftpd/vuser.d
2 N' j3 \3 s% |- K8 y. Zcd /etc/vsftpd/vuser.d" [+ H: P8 s! R8 v. E3 y: Q
touch vuser.list5 j# o' C5 V* E" y6 \/ s
2)加密虚拟用户的秘钥文件
9 a; R* ?+ D+ h% U# v# 使用 db_load 工具生成加密文件! a. s0 X) _' ^5 l3 W& V
yum install db4-utils -y
# y/ p5 H, L/ ` k Hdb_load -T -t hash -f vuser.list vuser.db
# i3 K2 s. r/ P/ z8 ?6 Mfile vuser.list . \3 t: o4 ?, E& |6 J( w
file vuser.db
U! Z# e* M5 d/ R' U# 为了安全,修改虚拟用户文件的访问权限# Q- ^6 u5 w f; v4 r
chmod 600 /etc/vsftpd/vuser.*8 q' q7 i' i# F( r# K7 h2 y
ll /etc/vsftpd/vuser.*
5 p Q/ F/ p9 @! E' t0 X3)创建虚拟用户的授权认证文件
/ K% q m: ?* k6 [cd /etc/pam.d/
* s2 x. a+ W# R3 a/ fmv vsftpd vsftpd.ori # 备份原有的ftp的pam认证文件. b6 |# G& _2 {8 e3 [7 J j6 S8 U) L
vim ftpvuser.pam # 创建新的ftp虚拟用户认证文件! z$ o* w o, a" \7 H
-----------------------------------
( Y' A7 `( y% _* w; M#%PAM-1.0
! S1 U) u8 E* U* Dauth required pam_userdb.so db=/etc/vsftpd/vuser.d/vuser
* Y- m8 ?' o& P8 q# Q% ?account required pam_userdb.so db=/etc/vsftpd/vuser.d/vuser4 f" Y: `/ [, ^! [0 F% V6 ^
-----------------------------------, I! a2 C2 b( |/ _/ a1 U
注意:db=/etc/vsftpd/vuser.d/vuser 不可以加.db的扩展名,否则认证不成功
7 ]! o5 T* f/ J5 S- ~4.3.实例演示:配置一个虚拟用户
6 l" n, @" p) i1)创建 ftp 虚拟用户 test1 的数据目录和秘钥文件) W* r, r( o2 {5 A1 t
mkdir -p /data/ftpdata/zhaoshuai
7 z; c. |; a4 _: n! _touch /data/ftpdata/zhaoshuai/ccc.txt # 创建测试文件. h, t$ `# j4 [1 I" ^: f! j1 o
mkdir -p /data/ftpdata/zhaoshuai/ddd$ f. ~- V+ A, j; [" [
chown -R ftpvuser.ftpvuser /data/ftpdata
5 Q/ x! x0 w1 U& x& A9 G1 U- Xchmod 755 /data/ftpdata/
/ P$ r5 e. T( i4 ~3 j) T$ Uls -lhd /data/ftpdata/
5 ?9 v3 w9 `$ D, Ils -lh /data/ftpdata/% X8 ~* u3 K: O- O' T
2)把该虚拟用户 test1 添加到 user_list 文件中
$ i, R/ v0 M7 r* L( Q- q2 cvim /etc/vsftpd/user_list
4 L6 m: g4 s" d/ N) D/ T: W---------------------
% x3 y$ ]+ T( K* Zzhaoshuai
9 ~* {: D9 P% A0 ~1 y- p----------------------; c: f# a: _1 K
备注:0 X7 a5 d) C( z$ r" N) T9 p W
1)注释掉其他本地用户认证的内容,因为启用了 guest_enable 后,本地用户将失效,所有非匿名用户变成虚拟用户
# \3 a, p3 i6 Z4 i0 }6 a! O) M1 `2)因为需要授权访问的用户比较少,所以user_list设置为可以访问ftp服务的用户, Q9 X5 B9 |6 w m
3)创建或修改虚拟用户秘钥信息
! B; `: e p/ x. Ecd /etc/vsftpd/vuser.d- j9 K6 v6 h, g* ^
vim vuser.list7 p6 D, L) o& D O+ ~5 x
--------------------
1 f6 l6 O) }# @, }+ k. izhaoshuai( ^$ Z5 z8 [3 }5 }' t% H" u2 V( p
zhaoshuai # 这里的密码和系统用户 zhaoshuai 的密码不同用以区分
1 e- N2 M/ C2 M& ~% F--------------------, d5 Y8 @+ x% O0 e1 _0 X
db_load -T -t hash -f vuser.list vuser.db6 B" @4 j5 D6 ], o5 c
该文件的格式为:一行用户名一行密码" x* w6 n7 d8 K
4)为用户创建授权配置文件(文件名必须为虚拟用户名)
- W( f, c$ Y% r7 T5 G, Y! l2 Ecd /etc/vsftpd/vuser.d
9 u+ g1 p1 u G5 O9 K( uvim zhaoshuai
* R8 \" V5 r& L---------------------------! O$ X# q3 h7 g" e( k
# 指定宿主目录,配置访问权限
/ x4 B9 p" d0 h* _5 s2 N( Plocal_root=/data/ftpdata/zhaoshuai # 虚拟用户的宿主目录
3 E9 o. _: x/ }* k* ]! A z) twrite_enable=YES
% B+ ~6 c% V4 b' ^5 \5 tanon_upload_enable=YES # 上传4 o& D% A; L$ m+ t
anon_mkdir_write_enable=YES # 创建目录写权限5 O4 w& X+ h' S5 f9 E# p
anon_other_write_enable=YES # 其他写入权限
* _/ M/ Z8 `, b- V& @4 O---------------------------
) A# g$ S# t0 |: g" I6 s; c% u5)配置完成刷新配置信息
b3 m+ G9 x1 ^" s( G2 Zsystemctl restart vsftpd6 V+ ]2 b* h2 m- ~) _9 Y% U6 R
systemctl status vsftpd$ h- [! ~/ Z. F9 l8 d
6)登陆测试) Z* O: u. g x6 u6 U5 X7 I, V& a
[root@srv05-CT75 vuser.d]# ftp 127.0.0.15 d$ n4 }/ F2 d' j/ a
Connected to 127.0.0.1 (127.0.0.1).5 e4 j% ?9 p4 b3 u
220 (vsFTPd 3.0.2)
5 w) G2 V8 Z/ i& u4 L4 UName (127.0.0.1:root): zhaoshuai
5 o' r. }4 N' w9 [: o7 O331 Please specify the password.
5 ~8 a: g1 v' W& F, `) F6 Y9 PPassword: # 在这里使用系统用户zhaoshuai的密码无法登陆
) x, G8 \5 @: F530 Login incorrect.8 }% Z4 H$ ^$ r( g+ z/ Z* J A
Login failed.) a9 U5 ~7 Z$ {" E3 C
ftp> exit
/ K+ L! S3 B- ?5 c221 Goodbye.4 b; f- d" V! C2 o" v1 T
[root@srv05-CT75 vuser.d]# ftp 127.0.0.1# ~! l( A. e( Q( k4 u6 Z. T
Connected to 127.0.0.1 (127.0.0.1).
% a% G* {% p0 V220 (vsFTPd 3.0.2)9 G9 H6 S+ a6 ^
Name (127.0.0.1:root): zhaoshuai3 b1 `8 L. L5 k% x. X: l
331 Please specify the password.# a& ]8 W! z( l0 Z5 t
Password: # 使用虚拟用户zhaoshuai的密码可以正常登录8 q; Z% c# `/ J: h, p! i
230 Login successful.3 P. o# v- z- { u/ H0 O
Remote system type is UNIX.- m8 a s0 H% B% G# O% z
Using binary mode to transfer files.
, D' ~# R7 y7 s, [4 B1 r- U+ C2 Z' Rftp>
8 S9 q$ p1 L) D/ d& R, wftp> ls # 可以查看到上面创建的测试文件
4 _; }0 @0 T3 b9 z: h" e$ [227 Entering Passive Mode (127,0,0,1,226,175).
0 N, w4 H% ], z8 U& E150 Here comes the directory listing.
0 o. y% U! B2 l- j+ C* l/ rdrwxr-xr-x 3 1000 1000 4096 Jun 12 07:59 ccc.txt4 x5 M ?1 A- J- e+ k+ [
drwxr-xr-x 6 1000 1000 4096 Jun 12 07:45 ddd
5 I6 n9 Z& Y7 U9 o226 Directory send OK.
" l5 V1 E6 b9 [0 }, g; kftp> exit! t x" V( u$ Z0 r
221 Goodbye.
; A+ }2 h+ Q" S4 [- _. j# _回到顶部
/ ?' e8 x2 d; G6 X+ S: T5 W4 ]! P拓展1:ftp 的防火墙配置; d3 D1 l1 j' o, l' u+ F
iptables -I INPUT -p tcp --dport 21 -j ACCEPT # FTP连接端口$ S, O; C% A+ O- V
iptables -I INPUT -p tcp --dport 33000:34000 -j ACCEPT # pasv模式下的随机端口
/ `1 m# \! I$ Y' H1 xiptables-save >/etc/sysconfig/iptables # 保存防火墙配置$ @( x P) w, @+ O7 r
systemctl restart iptables.service7 A! Q* b& c. k
systemctl restart vsftpd.service
- Z/ m3 }6 u' |; U; [& w. h7 T" B回到顶部
/ |; o# }! H0 _; q1 B拓展2:CentOS6安装vsftpd6 H2 b; Y2 [3 T$ K
方法相同,区别在于服务的启动命令是7 p4 k( q* w' N0 S9 Z9 d, [0 d) x
service vsftpd restart* r1 ^8 j' l& Z1 v) [! v, l0 b2 r
service vsftpd status( ^4 [4 p7 B% Y! S0 i; Z/ W. i
|
|