|
|
楼主 |
发表于 2022-5-14 09:05:45
|
显示全部楼层
3.使用系统用户访问 FTP 服务器
7 W, n8 \; V, ?. Q7 J3.1.修改配置文件并重启服务0 n( L* r. c+ v( p% C
vim /etc/vsftpd/vsftpd.conf9 m, @! Q5 \* l* H: Q& w6 d. c k! d0 c
-------------------------------
/ @- x. E, Y2 O7 J. kanonymous_enable=NO
( I5 a- ]" @9 q/ z) Alocal_enable=YES0 b) ]' n# G6 [4 k
write_enable=YES* Z; D. g- W( K2 j
local_umask=022
' z- N* x6 }5 p5 s Lchroot_local_user=YES
3 r/ C0 Z0 A- W8 puserlist_enable=YES1 W/ i% N( ~+ O) ]/ `, Y
userlist_deny=NO
" }9 i* m' _# Vuserlist_file=/etc/vsftpd/user_list
" m; x' n; f r* u6 O2 p. T$ ^: |pam_service_name=vsftpd
$ i8 o! Y E/ ntcp_wrappers= YES9 u& j( ?1 M) k3 F1 V* Z
-------------------------------
* S: s; k, k, u6 Vsystemctl restart vsftpd& X' V1 T2 Y( Y5 J. S* S
systemctl status vsftpd
2 E) U5 Q$ {+ @4 e配置注解:: p( N3 @+ B6 p/ S9 \- p3 ?" d
anonymous_enable=NO # 修改,禁止匿名用户登录
. |, `, Z( ]4 E" Glocal_enable=YES # 默认启用,允许本地用户登录,虚拟用户需要映射到本地用户才可以使用8 K7 f- T1 @% q
write_enable=YES # 默认启用,本地用户开放写权限5 C. c3 P, q4 _8 B7 [5 ?
#local_umask=022 # 注释掉,本地用户创建的文件的权限反码022,创建的文件为644
) D- v8 ?( ]+ @% xchroot_local_user=YES # 默认启用,将本地用户锁定在自己的家目录中
8 M; t9 _* ^7 Z% G* d Ruserlist_enable=YES # 是否启用用户控制列表,默认启用9 j" m) j9 `' @, c# j
userlist_deny=NO # 指定用户控制列表的作用,默认为 YES,表示该文件内的用户列表禁止登录FTP服务器,这里修改为 NO,作为授权访问的用户列表使用 ( {, n, i( S' [7 G8 p: C
userlist_file=/etc/vsftpd/user_list # 指定用户控制列表的文件名
! q) G8 S3 p, T& d! I% u$ Zanon_umask=022 # 增加,匿名用户新增文件的umask数值。默认值为077,需要修改为022,否则上传后的文件为600$ f [$ ^2 S0 [/ s4 l; H) N
dirmessage_enable=YES # 设置切换到目录时显 示message 隐含文件的内容
: Q3 @/ K5 g. }) b" Cxferlog_enable= YES # 激活上传和下载日志
5 ]: P: r6 \/ rconnect_from_port_20= YES # 启用FTP数据端口连接
2 |- n. a, P# p% i" _0 m4 gpam_service_name=vsftpd # 设置PAM认证服务的配置文件名称, 该文件存放在/etc/pam.d目录下
L) c/ B9 i E' Z; slisten= YES # 是否使用独占启动方式
2 k% \& D2 b9 k$ Ntcp_wrappers= YES # 使用防火墙
% S& P% b9 I6 E+ q% `#file_open_mode=0755
( v5 }- x9 `/ J8 ?& Jpasv_min_port=50000 # 被动模式下的最小端口9 y) I2 `8 ]1 V& v( W7 |
pasv_max_port=60000 # 被动模式下的最大端口$ n Z$ `. S$ V7 n7 w: C
# 设置连接服务器后的欢迎信息
+ q6 X4 ?$ u8 Tftpd_banner=welcome to ftp service.9 e4 }$ J0 A1 O
banner_file=/etc/vsftpd/vsftpd_banner_file
2 Y7 k; _6 Y0 V" w$ U' ?* y配置建议:
, w, {6 Q6 V% E. y) x/ huserlist_deny=NO ,这里设置为NO,做为允许登陆的用户列表,可以手动指定允许登录 ftp 的用户,比较实用,如果设置为YES,作为禁止登录 ftp 的用户列表,与 ftpusers 功能重复,没有必要3 ^; V( a7 S* D# B0 Y. ?- s
vsftpd 的配置文件列表
* ]4 P8 ~8 p- i; m; x4 @/ v/etc/vsftpd/vsftpd.conf # 主配置文件
6 G9 ^0 O, X; @; `% l2 e/etc/vsftpd/ftpusers # FTP限制访问的用户,里面是一些系统用户,默认不允许访问,防止被入侵,一般不需要修改, U* m3 ?! ^) G1 `) I; v1 F' ~0 b
/etc/vsftpd/user_list # 授权用户列表,可以控制哪些用户可以访问或者禁止访问,我一般配置为允许访问 ftp 的用户列表
j7 B- d. G9 C* ~$ j特别注意:( s# u- Y' ` N# w1 P, O8 R( M
1)vsftpd.conf 文件中每个选项设置为一行,格式为“option=value”,“=”号两边不能留空白符4 a$ d; J$ L, |8 [' q
3.2.创建测试用的本地用户
1 }' x8 N+ B6 k# ouseradd zhaoshuai( X5 R2 ?; L5 M
passwd zhaoshuai
+ O" a7 o/ h" ^5 h# u创建测试用的文件和目录/ O! b4 |% B" o5 Z' Z& ^- G6 b/ O
[root@srv05-CT75 vsftpd]# touch /home/zhaoshuai/aaa.txt! Y- U+ h4 y& a$ u- {
[root@srv05-CT75 vsftpd]# mkdir -p /home/zhaoshuai/bbb 3 g7 N& q# r) k& o* o, {
[root@srv05-CT75 vsftpd]# ll /home/zhaoshuai/
* i0 ?0 m" \; h$ ttotal 4
3 d4 y; j3 Z+ W; p: t1 d3 e-rw-r--r-- 1 root root 0 Jun 19 02:18 aaa.txt+ s6 P4 h, e+ e$ Q l2 O
drwxr-xr-x 2 root root 4096 Jun 19 02:18 bbb9 A0 W9 X2 m" P
3.3.修改授权的本地用户列表" H8 l! m9 H+ ^- V6 V7 ^. D
ftpusers 禁止登录 ftp 服务器的用户列表,一般是系统用户不需要修改,可以增加; \8 q8 d- E* i# b. r
vim /etc/vsftpd/ftpusers
9 K$ Z T' o0 v2 n) \4 j-------------------------------4 {) T4 m# |( O6 U
root
3 L2 U# t, d) C8 vbin
( u- w5 ?; w$ R q, W, Ydaemon3 `" P" |4 E; b$ h8 i9 i
adm
, ~6 \5 W+ G# _& w/ n! zlp
8 X2 I6 F9 @4 R' q* l; P7 esync
4 s5 d7 Y5 p- u) L5 bshutdown
9 i1 x, ?+ w+ z$ [halt, i5 _8 p+ ~, O$ d
mail
1 ~6 A0 a' q- {% J e9 D5 z0 Z Znews
) [2 x; a7 b" a! z# R" c5 g9 ouucp; ]% P$ g. [4 c! H" U/ F
operator
9 D3 t& g- E% J6 Egames! V" ~: S1 }; c5 M' E
nobody
6 J4 h! b8 ^2 [. J& a# L: s/ [-------------------------------
# L D7 Q8 u2 Y/ ouser_list 允许登陆 ftp 服务器的用户列表
$ o3 |4 C/ g- I# r$ Lvim /etc/vsftpd/user_list
6 J) h2 D( H4 b5 c9 h- N$ y2 b2 l-------------------------------. U/ y' ~* J! K# s# {5 K
zhaoshuai, |: }1 O5 W( S$ O
-------------------------------
: r$ n4 b1 [ X ]/ D+ v. I m备注:以上两个文件修改完不需要重启 vsftpd 服务
; [# P4 q# i& I3.4.使用本地用户登陆测试
" e5 \+ Z8 [& v% B% O9 Vftp 127.0.0.1
. ?2 [) c( k! I" n- v实例演示:1 P' o# G6 X, ?1 e, U, y+ c% S
[root@srv05-CT75 pam.d]# ftp 127.0.0.1
& E2 a$ w7 F: y3 x/ |0 cConnected to 127.0.0.1 (127.0.0.1).
% D. o7 \- e/ C3 |+ Q220 (vsFTPd 3.0.2)
) P5 n- K1 Z. G4 G! H) IName (127.0.0.1:root): zhaoshuai
0 D# M( S8 q V* P& T331 Please specify the password.# }( I/ W1 a+ K
Password:. }/ \$ |/ ^1 |" S$ C
230 Login successful.
* D' }8 v, \% {" C' x" S" KRemote system type is UNIX.& b# {( [" d3 @* j; V
Using binary mode to transfer files.$ a& G/ M. f6 G2 K
ftp> 1 n& Y k% t8 z" `, B: \
ftp> T/ s8 U, i) b) @" r0 [' h/ a2 n" \
ftp> ls* O5 V J: z) Z8 P+ I9 r
227 Entering Passive Mode (127,0,0,1,94,91).
, z5 ^1 A8 q0 Z( A3 F4 J \150 Here comes the directory listing.
3 K* a& M; y5 _. F-rw-r--r-- 1 0 0 0 Jun 18 18:18 aaa.txt
0 H; G1 M0 H/ c; udrwxr-xr-x 2 0 0 4096 Jun 18 18:18 bbb" z: X, O8 E& |
226 Directory send OK.
0 g5 u- @; n1 A. l) B9 t5 `ftp> exit
; |0 U) m# n l221 Goodbye.6 |8 L1 {9 W0 y5 R/ ?2 C
如果要使用 xftp 等图形工具,需要选择主动模式
/ {+ z0 C$ r' p. _& l: g8 F D对于阿里云,青云等云平台的虚拟机,需要考虑安全组:允许20,21端口的接入请求5 d3 j4 f, W7 q2 t2 l, p
阿里云配置nat网关的端口转发可以通过公网连接,或者直接绑定EIP,青云需要直接绑定EIP进行公网连接/ }& r+ D, U# ~# _
阿里云和青云都无法通过负载均衡的端口转发提供ftp服务的访问,因为经过了他们内部的路由转发,无法直接找到对应的主机,总之ftp需要直连服务器才行
" U3 t _/ \5 L8 h n: w回到顶部
2 T% o9 @0 k$ P. j4.使用虚拟用户访问 FTP 服务器
# L0 E7 c7 M+ R4 Qftp配置为匿名访问显然是不安全也不便于管理的,另外,单纯使用系统用户的 ftp 也较难管理,通常情况下是使用一个系统用户作为ftp用户登陆ftp服务器的代理用户进行管理
/ |+ I, ?) ]# {8 ~7 {* J. x4.1.修改vsftpd.conf 文件,重启服务
: m! [3 b' {+ E6 }. L7 a) xcd /etc/vsftpd/
% p u" z7 x, `6 ]0 ivim vsftpd.conf 1 l( E7 g2 U4 K. G8 k e
----------------------------------------9 O3 D1 { U3 W
anonymous_enable=NO
5 j Y9 R; h7 E) o2 blocal_enable=YES* t8 v% Y; q+ c
write_enable=YES
* \( g" e5 q; q0 J#local_umask=0220 s- m/ j6 w1 f& n4 x6 I: v8 w. B
chroot_local_user=YES
3 f& i* R/ {) [userlist_enable=YES
9 ~" _3 h0 z9 z0 c& _/ Guserlist_deny=NO% K( H3 {" H! o
userlist_file=/etc/vsftpd/user_list- w* e$ d6 e3 `1 e+ E9 @) [
chroot_local_user=YES: N( I5 A/ ^# l
# made for virtual user
; o v+ Z3 d r6 gguest_enable=YES
9 ^9 r0 U9 G" _. @guest_username=ftpvuser
. |. ~- p" M+ ^- D; C2 cpam_service_name=/etc/pam.d/ftpvuser.pam! I# h# @+ T8 E- e, T- ?
user_config_dir=/etc/vsftpd/vuser.d
' I; F9 N' u1 Y! m( g9 m" ^anon_umask=0226 i1 q9 ]. w3 h
-------------------------------------7 n3 ~! b- |3 q0 q# ^
systemctl restart vsftpd5 B6 m. H" ?8 O# K7 l
systemctl status vsftpd2 C3 X: m {- b: h- G# L& R+ l; _8 E
配置注解:
3 f9 o9 g$ m* v$ u' }1 n& ?guest_enable=YES # 增加,启用虚拟用户模式+ j! L' E5 y: M0 Y& ?/ N
guest_username=ftpvuser # 增加,配置虚拟用户映射到的本地用户名
; B* s4 `! U: Z1 G& P8 h- C. Q: Zpam_service_name=/etc/pam.d/ftpvuser.pam # 修改,配置虚拟用户的认证方式7 m* _6 U6 k! V- d' R1 t& M
user_config_dir=/etc/vsftpd/vuser.d # 增加,虚拟用户的配置文件目录4 g, W4 N$ V) _! A) K
注意:
+ O( d: f! Q8 `& T1)除了主配置文件外,还可以给特定用户设定个人配置文件
: F9 ^- ]: H: J/ `$ w2)虚拟用户默认可以读写,访问时映射为本地用户,所以需要启用对本地用户的控制/ P; C9 a1 l+ Y2 U; F
3)实际的访问权限可由用户独立的配置文件进行单独控制# ~0 G1 y w3 T3 P. @. W( J* v
4.2.设置 ftp 虚拟用户的验证授权方式# a+ I0 F' F) L* U6 B/ B
1)创建虚拟用户的秘钥文件
6 X" A \" O" L* n/ n" nmkdir -p /etc/vsftpd/vuser.d
/ x' H3 o8 f. Z6 e7 m- V) Qcd /etc/vsftpd/vuser.d
! ?5 |8 x+ j( w( i- mtouch vuser.list5 d5 n- ?7 u! U0 m6 V( ^
2)加密虚拟用户的秘钥文件
9 I: b+ N$ @* J8 M# 使用 db_load 工具生成加密文件( R4 f# [* Y2 Z0 V
yum install db4-utils -y ~5 ^6 S/ Y) s+ L3 ^( P
db_load -T -t hash -f vuser.list vuser.db
$ ^9 I& g& p! G5 D* h1 n9 rfile vuser.list
5 C) `8 o9 j: l& u8 c( Zfile vuser.db " | T+ y# p& @6 y
# 为了安全,修改虚拟用户文件的访问权限
1 v' x; q1 K4 ^$ a+ Dchmod 600 /etc/vsftpd/vuser.*
+ K( b1 O; x* Y b1 xll /etc/vsftpd/vuser.*
& F- y3 k. Z" F( W) |7 L" G3)创建虚拟用户的授权认证文件1 L, w; M' k# Q! t
cd /etc/pam.d/& N$ H* j- m+ q& W+ \+ z% |
mv vsftpd vsftpd.ori # 备份原有的ftp的pam认证文件1 |" c: g$ Z7 _2 I. e% t# ^: g6 Y) T
vim ftpvuser.pam # 创建新的ftp虚拟用户认证文件
& E; v! V# Z w- w-----------------------------------
9 U% E$ g5 Z6 `( Y! e" b#%PAM-1.0
8 @% ~& [7 p5 Z2 [auth required pam_userdb.so db=/etc/vsftpd/vuser.d/vuser0 L9 _" ~ ]; X0 x5 d3 p2 z( b8 O
account required pam_userdb.so db=/etc/vsftpd/vuser.d/vuser9 _/ |: c& X' ?$ t' h$ k
-----------------------------------0 V6 L9 t R# f- D( L
注意:db=/etc/vsftpd/vuser.d/vuser 不可以加.db的扩展名,否则认证不成功
6 E# o) F! C9 L4 t7 f- \4.3.实例演示:配置一个虚拟用户8 n8 m) Y& t5 }. T4 J
1)创建 ftp 虚拟用户 test1 的数据目录和秘钥文件
Q8 \ v$ c4 T- f" o/ J* zmkdir -p /data/ftpdata/zhaoshuai2 W( K3 {$ f( [( R ]. L
touch /data/ftpdata/zhaoshuai/ccc.txt # 创建测试文件
' e1 Z D6 J, Cmkdir -p /data/ftpdata/zhaoshuai/ddd8 w0 y2 D& m' h+ |& \
chown -R ftpvuser.ftpvuser /data/ftpdata
3 o. K+ v2 T1 _) H: N; Ychmod 755 /data/ftpdata/) L7 x7 `: w+ E6 L& J5 p
ls -lhd /data/ftpdata/5 L1 K: s9 L M9 N9 g
ls -lh /data/ftpdata/
& @- i: p" {% }- A8 ?. q2)把该虚拟用户 test1 添加到 user_list 文件中
8 i0 a+ A0 Z5 \/ d7 d* C2 kvim /etc/vsftpd/user_list
( c5 h. z" C1 f- E---------------------
* d+ M+ C2 t7 |9 m2 `zhaoshuai
+ j" J0 i J$ f7 X* p8 H----------------------
5 r7 @8 C5 ?8 o- n$ j2 I, b' [: ^% r备注:
0 H% C/ T0 L- s4 D1 X1)注释掉其他本地用户认证的内容,因为启用了 guest_enable 后,本地用户将失效,所有非匿名用户变成虚拟用户! c K9 j3 b |4 ^
2)因为需要授权访问的用户比较少,所以user_list设置为可以访问ftp服务的用户' J5 _6 a) {7 v3 @7 Z4 K7 f
3)创建或修改虚拟用户秘钥信息
1 u: R# C n4 V P. f$ _1 q Ccd /etc/vsftpd/vuser.d1 {, X$ O5 Z2 G% |4 V6 X
vim vuser.list
4 O2 s: }( p+ X: }; a$ l--------------------5 L( h1 \% X/ t3 x- j' q
zhaoshuai
3 P2 t9 L& Y, T3 q$ Hzhaoshuai # 这里的密码和系统用户 zhaoshuai 的密码不同用以区分 u* i+ {+ d5 j0 j2 x8 R; F. Y
--------------------. |: b/ i/ C2 t
db_load -T -t hash -f vuser.list vuser.db
( f0 k. R4 i1 H2 u: T0 ?: [4 B: I该文件的格式为:一行用户名一行密码9 X% y7 u: K$ O: a
4)为用户创建授权配置文件(文件名必须为虚拟用户名)7 D$ e n2 Z+ a4 s
cd /etc/vsftpd/vuser.d
* N% F8 x* a) L6 o& gvim zhaoshuai* o0 v1 R4 D! B+ E
---------------------------
7 g& ^# P n2 z8 N2 O# 指定宿主目录,配置访问权限
2 V D% x& s( B c# ~local_root=/data/ftpdata/zhaoshuai # 虚拟用户的宿主目录 T1 Q; V6 X0 _6 T( r; h6 k
write_enable=YES. s' J2 \- @2 K
anon_upload_enable=YES # 上传 g M( h; ~1 m0 r0 Y" _. v2 B) Z
anon_mkdir_write_enable=YES # 创建目录写权限. O" Q5 A" Y' \
anon_other_write_enable=YES # 其他写入权限" d+ e2 B7 e9 V* y
---------------------------3 L, m8 i' L+ Z; C: A) P2 S: _
5)配置完成刷新配置信息
4 O g3 i6 P7 l6 }$ H$ zsystemctl restart vsftpd$ Q. }+ `3 R& v% l+ p% M! v
systemctl status vsftpd
# ~! p9 _/ r( X1 D# D7 q6)登陆测试' H$ m$ x7 F$ @
[root@srv05-CT75 vuser.d]# ftp 127.0.0.1
- c4 g' f3 x" O9 v2 @8 YConnected to 127.0.0.1 (127.0.0.1).- x6 n" Y" {8 _0 r$ \' H" ^& e
220 (vsFTPd 3.0.2)
0 t' @; [( k4 H9 SName (127.0.0.1:root): zhaoshuai! F! b+ _! M0 ~
331 Please specify the password.
5 j \( i% C% Z% k6 h4 UPassword: # 在这里使用系统用户zhaoshuai的密码无法登陆
; x' H% `' h7 c$ q! L/ [4 u: R530 Login incorrect.' t* \# T3 m8 j3 R3 Y; U
Login failed.) C" A4 c ~% I8 u+ s
ftp> exit' m* R& s) s3 F0 |, K5 M
221 Goodbye.+ {0 [7 |6 h" S+ Z$ Z0 V. W8 L
[root@srv05-CT75 vuser.d]# ftp 127.0.0.13 p1 f: i+ g F, |
Connected to 127.0.0.1 (127.0.0.1).9 P( A6 E% E# U) n1 _& i8 l8 }
220 (vsFTPd 3.0.2)
; o* `" h" {! y3 U5 t/ vName (127.0.0.1:root): zhaoshuai* U0 o" r; g; f2 g. U; d8 H
331 Please specify the password.
* [1 V+ i, }+ T8 FPassword: # 使用虚拟用户zhaoshuai的密码可以正常登录
% f6 z n+ q# w230 Login successful.
) ]+ j0 M% |) G8 G8 uRemote system type is UNIX.
( ^+ h" z# y+ o9 sUsing binary mode to transfer files.
4 q. p. e' m& J0 L1 {6 hftp> $ j, _! v. p: N5 w
ftp> ls # 可以查看到上面创建的测试文件! T: Q) X( X6 b/ ?/ V& G" E/ M
227 Entering Passive Mode (127,0,0,1,226,175).
6 h/ v5 W% d# I9 S# T! S' m, A150 Here comes the directory listing.+ U4 |) g9 z6 ?! a
drwxr-xr-x 3 1000 1000 4096 Jun 12 07:59 ccc.txt" r) Q8 S- F' M! l+ q J- f7 U
drwxr-xr-x 6 1000 1000 4096 Jun 12 07:45 ddd: R" l# ^( e/ d
226 Directory send OK.
6 H& m+ d- [: y' C+ O: {) rftp> exit, ]5 B9 A7 o, }
221 Goodbye.
( \8 K. B( h, X% I* |- r0 L# j回到顶部 `0 `; U2 j" _3 V0 J3 k, ^
拓展1:ftp 的防火墙配置1 |3 ]# f- x; d: s1 Y( {- W7 h
iptables -I INPUT -p tcp --dport 21 -j ACCEPT # FTP连接端口- n2 N$ K6 @0 b
iptables -I INPUT -p tcp --dport 33000:34000 -j ACCEPT # pasv模式下的随机端口/ y' R T0 C) C' f0 I
iptables-save >/etc/sysconfig/iptables # 保存防火墙配置: t6 K4 O& }# D
systemctl restart iptables.service. Z- I# G. c# S; _2 s3 ^; C
systemctl restart vsftpd.service
6 F* Z* \# F9 b7 N ?2 V回到顶部6 l$ r* ]$ Q8 L% n! G
拓展2:CentOS6安装vsftpd
* K6 ^. x: z; g1 @4 q2 s7 w方法相同,区别在于服务的启动命令是
; S: j! v$ x" I. q( fservice vsftpd restart
9 {5 Q& O: `* c. Dservice vsftpd status2 Q. U7 w! l' Q% w
|
|