|
|
楼主 |
发表于 2022-5-14 09:05:45
|
显示全部楼层
3.使用系统用户访问 FTP 服务器; o6 Z: d. r0 D) f, Y
3.1.修改配置文件并重启服务
! y m1 Y% d( ]8 z5 ?vim /etc/vsftpd/vsftpd.conf
3 T# T7 F8 Y3 n; ^-------------------------------! Y* _+ U& f5 h9 L" D9 f; O4 w/ S- u
anonymous_enable=NO
& j6 A8 @& X% M* h5 K. ~local_enable=YES
! Z: C- t; @$ Z: F" {2 Jwrite_enable=YES
3 b8 X$ z: ], k8 Llocal_umask=022
8 k3 s+ b0 T mchroot_local_user=YES
2 l! r* Z' f1 j1 H3 D& N6 u( F6 Duserlist_enable=YES' ]7 M# l* J! J# N* {# T
userlist_deny=NO 9 C' i3 n6 `0 N) B; H' D
userlist_file=/etc/vsftpd/user_list
; ^% H9 ]: {( m+ T) x' l( t5 ypam_service_name=vsftpd# S1 X' x4 T2 T% s' p& A& b4 d
tcp_wrappers= YES. S+ |8 J/ ^$ L8 w- s
-------------------------------
0 Q& {: Z; j7 e' i: e# N$ J: {systemctl restart vsftpd+ Q7 f( O* E, F2 }
systemctl status vsftpd6 Z, t" [2 H9 I3 [
配置注解:& S' A7 y/ L+ m i! \1 q3 g
anonymous_enable=NO # 修改,禁止匿名用户登录
4 P7 b' w4 Z5 Z$ b$ ^# qlocal_enable=YES # 默认启用,允许本地用户登录,虚拟用户需要映射到本地用户才可以使用/ w9 V* \7 q* U: D6 a$ D5 Z1 T0 o
write_enable=YES # 默认启用,本地用户开放写权限
0 K0 m/ H: ^7 p2 E Q9 l#local_umask=022 # 注释掉,本地用户创建的文件的权限反码022,创建的文件为644/ t$ o) x+ X( W) f
chroot_local_user=YES # 默认启用,将本地用户锁定在自己的家目录中
# R2 o% C) t- [- u Fuserlist_enable=YES # 是否启用用户控制列表,默认启用
: A! H1 p+ K! `4 A& p' z6 Duserlist_deny=NO # 指定用户控制列表的作用,默认为 YES,表示该文件内的用户列表禁止登录FTP服务器,这里修改为 NO,作为授权访问的用户列表使用 ; j' f) K! X- L. d1 t2 J* H/ |
userlist_file=/etc/vsftpd/user_list # 指定用户控制列表的文件名+ B; \: P. @. j" \5 e% H+ u7 a( f
anon_umask=022 # 增加,匿名用户新增文件的umask数值。默认值为077,需要修改为022,否则上传后的文件为600
- p& ]1 ]& _ T+ _dirmessage_enable=YES # 设置切换到目录时显 示message 隐含文件的内容
* [( T9 S+ K* l4 uxferlog_enable= YES # 激活上传和下载日志
4 O2 Y, m" S3 D+ V% Kconnect_from_port_20= YES # 启用FTP数据端口连接0 H% t) W6 u! K/ V }! G
pam_service_name=vsftpd # 设置PAM认证服务的配置文件名称, 该文件存放在/etc/pam.d目录下5 E( U8 g, O! h* t
listen= YES # 是否使用独占启动方式
2 H" L: m2 E! etcp_wrappers= YES # 使用防火墙
3 l) k( b; C1 r1 y2 [" E8 K#file_open_mode=0755
; {8 p8 J& \. ?; p/ z# _; \' ypasv_min_port=50000 # 被动模式下的最小端口0 W* ?) p* w6 a8 I: [5 ~6 L+ K
pasv_max_port=60000 # 被动模式下的最大端口
8 I* x% a6 E( |+ ?" H( y1 q+ s& Z# 设置连接服务器后的欢迎信息. ]. m C1 a" D6 S3 ^5 B0 b1 J
ftpd_banner=welcome to ftp service.
& Y M8 l7 D( G6 jbanner_file=/etc/vsftpd/vsftpd_banner_file1 R/ }% I7 i h$ x7 z! F' g
配置建议:
, ]3 x+ m: }- w9 N; P9 wuserlist_deny=NO ,这里设置为NO,做为允许登陆的用户列表,可以手动指定允许登录 ftp 的用户,比较实用,如果设置为YES,作为禁止登录 ftp 的用户列表,与 ftpusers 功能重复,没有必要
3 K% a$ Y$ ? i2 n! Nvsftpd 的配置文件列表
9 H' b( c$ Y# \2 J$ A/etc/vsftpd/vsftpd.conf # 主配置文件6 [1 \& H, L5 w3 ~
/etc/vsftpd/ftpusers # FTP限制访问的用户,里面是一些系统用户,默认不允许访问,防止被入侵,一般不需要修改9 F3 H3 H" w: k
/etc/vsftpd/user_list # 授权用户列表,可以控制哪些用户可以访问或者禁止访问,我一般配置为允许访问 ftp 的用户列表
1 s: z# c' k+ _' w d x! k特别注意:
7 S$ k) J! ?/ P m7 B1)vsftpd.conf 文件中每个选项设置为一行,格式为“option=value”,“=”号两边不能留空白符
6 `" ?$ p( U1 ]7 Y1 d, v7 ]3.2.创建测试用的本地用户! J% g7 ]8 x/ E% A! f% ^
useradd zhaoshuai
0 p" M+ K8 X4 K2 b1 G( G8 _passwd zhaoshuai; ~7 V# z! C$ [3 L( t' s
创建测试用的文件和目录
0 j( Z% \. e% ]9 k7 e) E0 `[root@srv05-CT75 vsftpd]# touch /home/zhaoshuai/aaa.txt! f9 l% z4 B7 `
[root@srv05-CT75 vsftpd]# mkdir -p /home/zhaoshuai/bbb
3 q6 k i/ C6 H- s[root@srv05-CT75 vsftpd]# ll /home/zhaoshuai/
, P7 ~4 i6 m( {: w0 y# R' }total 4( V9 ~5 ]2 E0 s' [( l
-rw-r--r-- 1 root root 0 Jun 19 02:18 aaa.txt' W7 k/ i. O3 j+ e' h
drwxr-xr-x 2 root root 4096 Jun 19 02:18 bbb
5 r$ ^; U! e4 y" s, Z& f$ {/ ]3.3.修改授权的本地用户列表
& r: p: p4 c3 N9 {+ Qftpusers 禁止登录 ftp 服务器的用户列表,一般是系统用户不需要修改,可以增加& n# t! }7 ~( Y/ c7 v7 S. C
vim /etc/vsftpd/ftpusers
' _3 Y) ?) Y1 Z/ u& W% e' |& ?) \. G-------------------------------
7 B% ^# x; C) v1 R7 x' \% s; @' iroot2 T# B/ r8 \9 Z6 {& }
bin
1 v9 W' A. t3 X3 D4 Zdaemon
x) N( W, K/ ~# [4 Radm5 F" `8 W$ |9 O- b3 k7 p
lp3 ?* H. J. i6 w8 }( U- _
sync1 K* U* \# @7 K- [) {4 L2 B
shutdown$ H0 ?& |" h/ T
halt& L. O6 g& c# r8 S7 m9 K1 M
mail0 D+ k" x/ h7 R; x$ {6 t
news
8 L9 B0 K9 E5 }6 v( [uucp7 D% F2 L' q7 y- D$ Q6 x' J6 m
operator
% D% [/ M; F" G9 _. y4 R/ xgames
U5 ?9 D' D. C- Z3 s; Mnobody4 @- W5 Z; L; P$ R: s+ r
-------------------------------
! f9 \8 ^8 N6 G- fuser_list 允许登陆 ftp 服务器的用户列表2 g9 I3 s8 k& P$ n! P0 c1 t
vim /etc/vsftpd/user_list ) ?, a6 o6 G$ N- j
-------------------------------
! M+ P" w2 |* B& n) V$ Qzhaoshuai
$ Z5 G: a. K; ]; A" n- Z% I9 ~-------------------------------
% ^9 G* T: P5 i; X+ M! d备注:以上两个文件修改完不需要重启 vsftpd 服务
/ x! S9 g6 Y# _8 }% k3.4.使用本地用户登陆测试
' V9 g% r" M) B0 h( k7 hftp 127.0.0.1 . j4 D* x. ^5 U `
实例演示:3 K& [1 j6 R; {# _4 I) S: ~5 o
[root@srv05-CT75 pam.d]# ftp 127.0.0.1 " a5 L7 n! C& X0 N3 R' ]: K+ S4 e
Connected to 127.0.0.1 (127.0.0.1).. ]4 h) m$ u7 c8 w
220 (vsFTPd 3.0.2); k- J+ A/ c! `8 p% V F: j
Name (127.0.0.1:root): zhaoshuai% A4 W7 x" r& k7 `
331 Please specify the password.) Z% m) t q% q. v1 ]1 f: p
Password:
7 ]1 S4 C' I% q4 P# l& G5 }- }* }230 Login successful.: g( ?: j2 ?4 g0 y5 b, F
Remote system type is UNIX.
9 e' q. l+ s# e3 tUsing binary mode to transfer files.
! y" A, [1 I q$ u. Y( Xftp>
" T, z' \' f1 c4 Q6 g% \ftp> * B9 B: [4 k! n" E' @, D4 G
ftp> ls
0 J m* T/ @. s227 Entering Passive Mode (127,0,0,1,94,91).& ^2 W0 v8 v G; w- \4 c+ X$ h
150 Here comes the directory listing.
* ^ r" M2 R& h-rw-r--r-- 1 0 0 0 Jun 18 18:18 aaa.txt6 a- O+ W/ j5 v4 W
drwxr-xr-x 2 0 0 4096 Jun 18 18:18 bbb" w6 p- }) p* \# R4 c0 {; n6 |
226 Directory send OK.
0 L2 A* {& @3 l3 c8 O) X2 }2 fftp> exit) L4 p% P+ }( j0 y2 R- r/ w
221 Goodbye., c7 B h6 x3 z" y
如果要使用 xftp 等图形工具,需要选择主动模式) j, g5 X$ g. h: j0 \" Q& \2 @- O$ m: \
对于阿里云,青云等云平台的虚拟机,需要考虑安全组:允许20,21端口的接入请求7 v, f4 `. M' a" s& G/ r: H; b
阿里云配置nat网关的端口转发可以通过公网连接,或者直接绑定EIP,青云需要直接绑定EIP进行公网连接2 S' F, F$ Y- h: K; g; k: E: f
阿里云和青云都无法通过负载均衡的端口转发提供ftp服务的访问,因为经过了他们内部的路由转发,无法直接找到对应的主机,总之ftp需要直连服务器才行& U( \, X1 z, c" v& A7 b
回到顶部9 J6 O- d; j& R- O" q
4.使用虚拟用户访问 FTP 服务器) Y+ Q2 I. c; S+ p$ t* D" d$ e
ftp配置为匿名访问显然是不安全也不便于管理的,另外,单纯使用系统用户的 ftp 也较难管理,通常情况下是使用一个系统用户作为ftp用户登陆ftp服务器的代理用户进行管理
2 L# k% w7 p( L t4.1.修改vsftpd.conf 文件,重启服务. s7 M; `: ~" K8 T- e4 v; E
cd /etc/vsftpd/4 e* O, X9 d, Q. D- T4 ]; n9 \5 I
vim vsftpd.conf
* X9 i: b- L0 c2 a---------------------------------------- C- g# c v1 V( L" T
anonymous_enable=NO- e; h4 s0 O1 p, H
local_enable=YES
+ A h$ W f" {7 S1 J0 pwrite_enable=YES
) F d6 z8 |0 I#local_umask=022* W& [% J4 D( q. C$ I& ?4 z7 p
chroot_local_user=YES
1 u* [* D, Y) Q9 l6 yuserlist_enable=YES. |* @6 Z! k u+ C+ D3 Q5 w
userlist_deny=NO7 X) [* M3 J! I: g# X5 I7 t- y
userlist_file=/etc/vsftpd/user_list
3 ^. j, v" l- y+ s- t9 Echroot_local_user=YES) T9 o8 D3 ^1 h* ?" m
# made for virtual user3 H4 c3 e2 Q& Y0 |( R! O
guest_enable=YES
0 `: J1 O- B4 M7 F, |" V3 U5 t; rguest_username=ftpvuser
4 g1 N* G7 E$ G+ B+ Spam_service_name=/etc/pam.d/ftpvuser.pam
9 F3 z$ k8 _" ]user_config_dir=/etc/vsftpd/vuser.d- i. D8 U& \" Q8 G: ?
anon_umask=022
+ s) x0 V" [9 ~-------------------------------------4 u- h) Z. r- Q1 |& D
systemctl restart vsftpd
, X% t. c% ~. y- M" W) Lsystemctl status vsftpd
3 x4 _+ m, h& g' c# [; Z3 r% [" l- z配置注解:. u$ j# U' p+ A& d: W. r
guest_enable=YES # 增加,启用虚拟用户模式+ t: u% B5 m/ v- W/ K3 [6 l
guest_username=ftpvuser # 增加,配置虚拟用户映射到的本地用户名! V, }$ ^" i) q6 N
pam_service_name=/etc/pam.d/ftpvuser.pam # 修改,配置虚拟用户的认证方式
( X5 S" }( q* m4 a" x% H) k/ auser_config_dir=/etc/vsftpd/vuser.d # 增加,虚拟用户的配置文件目录4 c& H& U' B2 ^5 x
注意:6 v8 \5 t! V* T
1)除了主配置文件外,还可以给特定用户设定个人配置文件
( k) V, J6 a3 A% Y2)虚拟用户默认可以读写,访问时映射为本地用户,所以需要启用对本地用户的控制
0 a- | g2 U* y$ ^3 Q' ?3)实际的访问权限可由用户独立的配置文件进行单独控制
9 u5 g: z; w/ e' S- j8 Q1 M4.2.设置 ftp 虚拟用户的验证授权方式9 J9 \# L5 k0 N; H
1)创建虚拟用户的秘钥文件
" W2 w# p% L$ b9 L- kmkdir -p /etc/vsftpd/vuser.d, `" T9 L7 m8 F4 h' }
cd /etc/vsftpd/vuser.d( S5 s6 z' R$ F, \+ b
touch vuser.list1 r# R q, ]1 Y6 C5 s
2)加密虚拟用户的秘钥文件
8 U. H I3 A/ h1 o& Y4 O8 z1 l* y# 使用 db_load 工具生成加密文件
# ^6 t! t( z1 ?/ x. ]3 U) D1 x+ Zyum install db4-utils -y. U6 `! K+ g! a
db_load -T -t hash -f vuser.list vuser.db9 U6 B) T8 j. Q1 [, _
file vuser.list 0 B5 H6 Y# t$ U" a" G; ?4 G
file vuser.db
' t! j* e4 L) N- t! s: q N# 为了安全,修改虚拟用户文件的访问权限5 z- @5 ^5 @* W% L$ G( o
chmod 600 /etc/vsftpd/vuser.*; [ j) A3 W9 i& s6 } X
ll /etc/vsftpd/vuser.* _2 H; s2 D9 P( b& ]4 \% U, H+ \
3)创建虚拟用户的授权认证文件& X4 M$ F E; s# ^/ @$ q& p# m0 U5 C
cd /etc/pam.d/0 f% M3 `. n1 G$ A
mv vsftpd vsftpd.ori # 备份原有的ftp的pam认证文件
. V) F6 P s1 f% Jvim ftpvuser.pam # 创建新的ftp虚拟用户认证文件9 d# W+ \4 X, S# a) q
-----------------------------------
8 x2 O! z& `" t2 F1 p1 T#%PAM-1.0& S/ |% i2 V/ Z! E% J/ t
auth required pam_userdb.so db=/etc/vsftpd/vuser.d/vuser
$ `, \( Z" \$ z- o( [+ g6 @account required pam_userdb.so db=/etc/vsftpd/vuser.d/vuser
- I' T& z, h3 _1 G+ j-----------------------------------
0 _. L* N# y9 n: o0 E) t& ]9 _注意:db=/etc/vsftpd/vuser.d/vuser 不可以加.db的扩展名,否则认证不成功. B. o7 [- _: X4 b; c. F; o
4.3.实例演示:配置一个虚拟用户
6 @& o2 ]( t, M& o+ Z0 {* d1)创建 ftp 虚拟用户 test1 的数据目录和秘钥文件
u4 k7 Q" |. [0 ]& a1 `1 mmkdir -p /data/ftpdata/zhaoshuai& U3 W' W' V; d6 {5 p& q( t, O0 @
touch /data/ftpdata/zhaoshuai/ccc.txt # 创建测试文件. ]- \3 g5 H* B. L; j
mkdir -p /data/ftpdata/zhaoshuai/ddd
+ e" C- l, B% S8 ~" R& echown -R ftpvuser.ftpvuser /data/ftpdata+ x. q' ?' V" y4 U4 O: w
chmod 755 /data/ftpdata/8 d+ N$ w8 n4 ]$ I8 n9 J
ls -lhd /data/ftpdata/, W- W% o* r% X- F/ |- b
ls -lh /data/ftpdata// V+ q, W, M- q* m' H( y
2)把该虚拟用户 test1 添加到 user_list 文件中5 y T" s% T. @, b
vim /etc/vsftpd/user_list
; P4 X7 f/ [5 r+ v---------------------" l% V4 E5 i# e. K2 Q- E
zhaoshuai) k" T- E; V% d7 Q/ b( b1 K2 o
----------------------0 H1 U# y$ j5 I
备注:! I q6 k9 @# x) i
1)注释掉其他本地用户认证的内容,因为启用了 guest_enable 后,本地用户将失效,所有非匿名用户变成虚拟用户" W% ?- c" @! C) N) X/ g% \/ S
2)因为需要授权访问的用户比较少,所以user_list设置为可以访问ftp服务的用户4 ^% w: W. A% I- d# h6 s
3)创建或修改虚拟用户秘钥信息& h) B' c7 h1 |
cd /etc/vsftpd/vuser.d0 k( i. c; e: F2 V/ @! `
vim vuser.list1 s3 X! b' G" i/ P/ d3 m7 g
--------------------
H- ~0 Y( `# k; H! d5 \( c* s5 Lzhaoshuai
6 s! d7 a. y; m" @8 a' \* Pzhaoshuai # 这里的密码和系统用户 zhaoshuai 的密码不同用以区分
' H0 @! {! B- p) O: S* F9 t/ Q--------------------
& W- |" X A6 N- T) v% Gdb_load -T -t hash -f vuser.list vuser.db
/ k5 X/ P$ @) x( N& W' A; C/ L该文件的格式为:一行用户名一行密码7 R4 X& K4 _ |4 W: N$ ?
4)为用户创建授权配置文件(文件名必须为虚拟用户名)" R! u; V" _; l. b
cd /etc/vsftpd/vuser.d
) K) D4 }- B* j7 l& jvim zhaoshuai
! H- M( Q, V$ e% U1 y% G6 {! m---------------------------% P; v0 R5 H0 ?% \7 L+ G' [5 ^
# 指定宿主目录,配置访问权限. n0 R$ I" I& g/ D) S ^- y) P
local_root=/data/ftpdata/zhaoshuai # 虚拟用户的宿主目录5 l8 a f& ]. E* F2 H4 i: B% I
write_enable=YES. @0 f4 j+ U2 f2 P x
anon_upload_enable=YES # 上传/ y' f% g, t3 A) k4 x2 E8 N! ]; Z
anon_mkdir_write_enable=YES # 创建目录写权限
3 H3 G# A6 H% @5 [8 J O3 Lanon_other_write_enable=YES # 其他写入权限
8 M. o; L+ u9 _' [9 y; _2 V---------------------------
2 d% u+ F# f) C- T+ K6 v! h( x5)配置完成刷新配置信息$ i) L- C/ k1 p; R& N' [5 A" N
systemctl restart vsftpd
4 F) x/ z9 R. v% P# r$ t5 ]1 i0 Gsystemctl status vsftpd) ^$ `7 f6 A* d* ?0 ]+ O
6)登陆测试
6 _6 |, U' N& c S[root@srv05-CT75 vuser.d]# ftp 127.0.0.1
: s( m# K. {, A9 O" v; ?7 xConnected to 127.0.0.1 (127.0.0.1).& `( L$ O: ^* i. O% k
220 (vsFTPd 3.0.2): e1 u7 V# M+ G" s, x8 m
Name (127.0.0.1:root): zhaoshuai( _; }$ q$ Y* \- V D
331 Please specify the password.- l$ H5 f# L8 P7 y* c3 Z
Password: # 在这里使用系统用户zhaoshuai的密码无法登陆+ p3 O9 U$ r! X I
530 Login incorrect.4 e5 c# j; W& x$ E
Login failed.5 J2 t: }+ b* H) E" b. h& b/ h
ftp> exit$ c5 z2 Q. k7 ]
221 Goodbye.
- Z* M! T S Y9 E2 }[root@srv05-CT75 vuser.d]# ftp 127.0.0.1$ }* h. M( P1 V7 [* Z
Connected to 127.0.0.1 (127.0.0.1).. @' Q+ o4 o/ ^" ^; G4 B1 G; L; w' i' I
220 (vsFTPd 3.0.2)# g- u' T/ Z9 k* Z
Name (127.0.0.1:root): zhaoshuai* L) I/ Y3 r. d8 D/ u
331 Please specify the password.: V8 G4 F# J5 V2 d
Password: # 使用虚拟用户zhaoshuai的密码可以正常登录
# d. @8 k$ W9 W& a: B) B% q230 Login successful.
, W! c) c; G4 m8 \4 Y6 g9 qRemote system type is UNIX.
& Y7 X0 T. l& H. [- OUsing binary mode to transfer files.( w: B: ^/ N5 z; ], L# M4 |
ftp>
6 J0 z v$ u2 f% d7 ]ftp> ls # 可以查看到上面创建的测试文件$ L" b* n% T/ L2 L; B
227 Entering Passive Mode (127,0,0,1,226,175).
4 w8 @9 z# v- j7 j7 M- [150 Here comes the directory listing.
3 u2 [$ ?) E. s$ N, O/ A" p5 wdrwxr-xr-x 3 1000 1000 4096 Jun 12 07:59 ccc.txt
# d, b& P3 p8 F4 G- t) g" [3 Hdrwxr-xr-x 6 1000 1000 4096 Jun 12 07:45 ddd% q* C; k! s; j/ ^7 D' d
226 Directory send OK.
+ }* ]3 t! K! X% O, mftp> exit, p8 l, Y# {+ h3 M! \
221 Goodbye.
/ b. K% O7 _4 u4 n+ H% P K9 c回到顶部
; n3 M( R3 p8 i. u& V拓展1:ftp 的防火墙配置
! B% F" w# X7 c$ y- F4 y) Liptables -I INPUT -p tcp --dport 21 -j ACCEPT # FTP连接端口
. z5 F; [- n8 f7 t1 Uiptables -I INPUT -p tcp --dport 33000:34000 -j ACCEPT # pasv模式下的随机端口5 c3 F T' n _# g' s# \
iptables-save >/etc/sysconfig/iptables # 保存防火墙配置
7 U% n$ }5 o5 M n, n' wsystemctl restart iptables.service3 [6 f ]5 N. D& J. P; Q8 L9 _
systemctl restart vsftpd.service. H. t' V8 @+ L5 K/ S! `" j* g
回到顶部
% M) ~0 q2 m8 U& ^2 I0 U拓展2:CentOS6安装vsftpd* q; h/ C$ X; M3 ?" `' V7 s6 a/ W7 M1 P
方法相同,区别在于服务的启动命令是
9 W" ?1 J. F# c6 aservice vsftpd restart
6 |6 c' `8 b. i* ?8 Lservice vsftpd status( u! \% M; q- L% h4 @
|
|