|
|
楼主 |
发表于 2022-5-14 09:05:45
|
显示全部楼层
3.使用系统用户访问 FTP 服务器
; E8 @* `8 l( L5 U. M! M: w9 C5 C3.1.修改配置文件并重启服务
- @% G8 G1 }0 v2 | w3 tvim /etc/vsftpd/vsftpd.conf
5 b3 p: Y8 f4 ]-------------------------------: b8 w) k1 c* t
anonymous_enable=NO
0 t" p! M6 w, o( x4 |local_enable=YES+ M$ S& g( \+ t* t& b5 m1 C
write_enable=YES2 {& A* V( q5 d$ a
local_umask=022
5 J9 U' a/ G2 Y8 g1 gchroot_local_user=YES% x& [% S* K2 A, o" K7 N' a
userlist_enable=YES& R) [# ?' b0 s/ d% O, J( B
userlist_deny=NO
! O3 b* I2 f% C- Q# ~& @* tuserlist_file=/etc/vsftpd/user_list9 I! @7 N- {2 H7 W. G9 M6 C8 m( Z
pam_service_name=vsftpd7 ]/ Z+ W' ?0 g! D1 F
tcp_wrappers= YES4 ]; ?5 k( W5 W }9 |
-------------------------------
, F$ O6 T; ~( h) U! n3 Isystemctl restart vsftpd
6 Y0 \6 C* a0 fsystemctl status vsftpd/ l. l$ H# _( ] M% ]
配置注解:- L: c: h6 @" w5 O$ z9 {
anonymous_enable=NO # 修改,禁止匿名用户登录, ~8 K2 ^* S$ ]2 S
local_enable=YES # 默认启用,允许本地用户登录,虚拟用户需要映射到本地用户才可以使用; z, E L# e) \
write_enable=YES # 默认启用,本地用户开放写权限
" R+ R. V2 {5 ?0 [4 {3 f( g$ u#local_umask=022 # 注释掉,本地用户创建的文件的权限反码022,创建的文件为644
% W) C( j, E: n( I) G( n0 [chroot_local_user=YES # 默认启用,将本地用户锁定在自己的家目录中
: {* @7 r% \- [( f/ ^5 cuserlist_enable=YES # 是否启用用户控制列表,默认启用' U, b4 P% A" P
userlist_deny=NO # 指定用户控制列表的作用,默认为 YES,表示该文件内的用户列表禁止登录FTP服务器,这里修改为 NO,作为授权访问的用户列表使用
$ k l' r/ G8 wuserlist_file=/etc/vsftpd/user_list # 指定用户控制列表的文件名3 A" | q6 T/ V2 k0 d
anon_umask=022 # 增加,匿名用户新增文件的umask数值。默认值为077,需要修改为022,否则上传后的文件为600. Q' F9 B) B( a- _' K" _ T3 I/ b; m
dirmessage_enable=YES # 设置切换到目录时显 示message 隐含文件的内容
1 ]. o, D( G+ Qxferlog_enable= YES # 激活上传和下载日志* q' A$ @# n7 `3 B) o4 p7 E. m
connect_from_port_20= YES # 启用FTP数据端口连接
2 N9 T0 b- S5 ]1 U/ R( T7 kpam_service_name=vsftpd # 设置PAM认证服务的配置文件名称, 该文件存放在/etc/pam.d目录下
7 x* y8 q5 B R! f3 H1 `3 d+ Llisten= YES # 是否使用独占启动方式' m& c9 [2 W+ n* J @9 h
tcp_wrappers= YES # 使用防火墙! I; G" e0 n1 S5 a2 K5 I
#file_open_mode=0755
. ]& ?. Z) x r/ f2 ^pasv_min_port=50000 # 被动模式下的最小端口
) [2 Y& e1 i9 n1 o3 k9 rpasv_max_port=60000 # 被动模式下的最大端口7 S2 ^' Q1 r+ D/ R! }3 R( l3 ^; U# f0 i
# 设置连接服务器后的欢迎信息
4 w$ P* }9 o2 Q, Q# |& yftpd_banner=welcome to ftp service./ } s9 r" y6 b
banner_file=/etc/vsftpd/vsftpd_banner_file
5 l+ G% l0 h7 @5 l% [7 N5 `7 }9 m配置建议:$ `! a& S1 f% H! r' m# n* Q
userlist_deny=NO ,这里设置为NO,做为允许登陆的用户列表,可以手动指定允许登录 ftp 的用户,比较实用,如果设置为YES,作为禁止登录 ftp 的用户列表,与 ftpusers 功能重复,没有必要. K- \! p8 {+ u7 Q8 d
vsftpd 的配置文件列表' M7 z/ N4 @6 W. t' {- a7 B$ t
/etc/vsftpd/vsftpd.conf # 主配置文件
* x8 c9 a4 Z0 }8 _. x0 C9 l d. ^/etc/vsftpd/ftpusers # FTP限制访问的用户,里面是一些系统用户,默认不允许访问,防止被入侵,一般不需要修改
" x7 Y7 d2 O3 I; I) @/etc/vsftpd/user_list # 授权用户列表,可以控制哪些用户可以访问或者禁止访问,我一般配置为允许访问 ftp 的用户列表$ a0 @( h0 h, ]
特别注意:, T6 |; f- m1 E: F: A) o
1)vsftpd.conf 文件中每个选项设置为一行,格式为“option=value”,“=”号两边不能留空白符
! ^4 k, E6 F% c3.2.创建测试用的本地用户; L( v9 N( G& F( Q9 O
useradd zhaoshuai
' d+ a, H/ s* J. P: _4 r' Apasswd zhaoshuai
/ X' G$ Y7 F; p V8 M4 e# J创建测试用的文件和目录
3 m* w8 ?) y" E: U# S1 _0 D* H. @[root@srv05-CT75 vsftpd]# touch /home/zhaoshuai/aaa.txt% d7 S" A% z6 W! l2 J5 M
[root@srv05-CT75 vsftpd]# mkdir -p /home/zhaoshuai/bbb
; v5 p8 f3 h1 A( N: u[root@srv05-CT75 vsftpd]# ll /home/zhaoshuai/ * K/ ~# g3 N3 _+ {+ E
total 4
7 A" k9 I( J: N2 p" |4 }( b& L; F6 U-rw-r--r-- 1 root root 0 Jun 19 02:18 aaa.txt
: b. W% k* u; xdrwxr-xr-x 2 root root 4096 Jun 19 02:18 bbb7 `; L- ]5 D/ M! O0 e2 [2 J* f3 q
3.3.修改授权的本地用户列表
1 y% C6 m: H/ e4 X; pftpusers 禁止登录 ftp 服务器的用户列表,一般是系统用户不需要修改,可以增加; X/ _$ W2 V; C. A
vim /etc/vsftpd/ftpusers
' o# y" P. b4 h; ^* ]9 O-------------------------------1 r! V! f$ ~# B' u5 G. [& L
root
% Q' J! l9 X# cbin
9 d8 i+ F1 q7 tdaemon! O" K( T: A O6 ?
adm
. g' O$ m& H+ b6 B, w1 Plp h4 j9 `4 s+ X8 q1 ~& a
sync' S2 C5 H0 h; C+ O& k6 n7 G3 z5 c
shutdown7 f" x9 U" A* S1 |* M1 z; G
halt
7 P F5 q+ Y1 q+ G) B Q% |mail$ d9 Q i3 T d- b% X5 l
news( }; }% ^# Y( ^/ H R; x; y
uucp
! D/ K" D% t; p% joperator
- P* h- Z8 `5 b- {, Tgames% J# K# @: f* m5 y
nobody
0 Y; ` H# I% u$ }) S3 h- |-------------------------------0 W# i0 Y+ v x; J
user_list 允许登陆 ftp 服务器的用户列表4 U- I/ ]* G0 ?8 U( F( T8 z
vim /etc/vsftpd/user_list
) F& V6 v! e& }: c* b-------------------------------6 J3 P; V# m( R
zhaoshuai1 Y+ U5 A6 A3 \) }7 E$ H+ B: i
-------------------------------, f6 Z9 S9 z3 a8 x) \) A
备注:以上两个文件修改完不需要重启 vsftpd 服务
$ q& ]6 v7 F1 J8 m# }5 X3.4.使用本地用户登陆测试; F7 S( K. r; p$ U
ftp 127.0.0.1
: T7 j3 |6 w q1 b8 l. Z实例演示:5 H$ ~, r( z7 C( d
[root@srv05-CT75 pam.d]# ftp 127.0.0.1 ! X! k! U. E7 \& S: `2 K
Connected to 127.0.0.1 (127.0.0.1).0 \; U5 R% a; I3 ]( C
220 (vsFTPd 3.0.2) M/ S! t2 q! t2 [
Name (127.0.0.1:root): zhaoshuai' h' z3 ~! J) v8 Q" @! h1 O
331 Please specify the password.6 N4 J+ z+ M" {2 P
Password:6 c# Q2 \$ |: c
230 Login successful.
) R6 I4 I3 z( C% URemote system type is UNIX.0 z+ t/ |! A$ }1 o' X
Using binary mode to transfer files./ ~2 H) J8 A4 z! K# d. S
ftp> " l. P# m. ? F- R- E) R
ftp> 2 H5 e& |8 @" s) ^9 g! g
ftp> ls" H9 m1 W x3 Z: Q0 @6 q* x) Q
227 Entering Passive Mode (127,0,0,1,94,91).
- b, z# c; I: m0 R& m150 Here comes the directory listing.
0 ?+ U# H" P4 E7 x4 e7 G-rw-r--r-- 1 0 0 0 Jun 18 18:18 aaa.txt
7 D1 E9 Z# N& F5 k( V4 Y. ddrwxr-xr-x 2 0 0 4096 Jun 18 18:18 bbb* h$ Q9 g' [% w, o0 Y5 Y- M) L D" D
226 Directory send OK.
- w5 s% R" K6 `" m0 w; U, Vftp> exit
. x$ e/ W' K. e* E6 U221 Goodbye.3 y9 Q, L j0 A: u) y8 M
如果要使用 xftp 等图形工具,需要选择主动模式' p) B. ?" n2 X x
对于阿里云,青云等云平台的虚拟机,需要考虑安全组:允许20,21端口的接入请求
" Y; N! e0 r2 T" h8 x4 ?8 ]: L- W# q阿里云配置nat网关的端口转发可以通过公网连接,或者直接绑定EIP,青云需要直接绑定EIP进行公网连接4 o2 v% L) }$ y. [4 p- I
阿里云和青云都无法通过负载均衡的端口转发提供ftp服务的访问,因为经过了他们内部的路由转发,无法直接找到对应的主机,总之ftp需要直连服务器才行8 U! H9 ?# m# P& Y- ]; F y$ Y. K5 H
回到顶部2 ` E, ?. k4 ~9 u1 V, H; H5 s
4.使用虚拟用户访问 FTP 服务器. B$ l- A, G- z6 _* w& S) q; N
ftp配置为匿名访问显然是不安全也不便于管理的,另外,单纯使用系统用户的 ftp 也较难管理,通常情况下是使用一个系统用户作为ftp用户登陆ftp服务器的代理用户进行管理
1 |$ b9 t" z6 S% Y* g+ x4.1.修改vsftpd.conf 文件,重启服务0 k U1 J( _2 m/ G0 ?9 {2 m# E! c! \
cd /etc/vsftpd/* |5 S2 q. y; T- n9 t
vim vsftpd.conf ; K3 s i2 \; R2 O7 v" T c2 @6 k
---------------------------------------- k, f5 z" q$ N* s! i5 G
anonymous_enable=NO- `, G+ F" Y3 t) {4 K6 Q5 |
local_enable=YES( e! _) D, w* ]/ ^' t k+ k
write_enable=YES7 Y& y, \/ T+ _ j* ~
#local_umask=022/ `" w- o( m* s' B, k
chroot_local_user=YES& H3 {% r% O q6 U: q4 x
userlist_enable=YES
8 k* B5 ^8 H2 i6 @8 Q7 Luserlist_deny=NO: K, a# A$ K. u& [( z
userlist_file=/etc/vsftpd/user_list
# C! a1 i( ]9 q. R+ z& U& l* ^; H- O" B* uchroot_local_user=YES
% t! |# P' D* k) _- z" G4 f# made for virtual user
* k! }$ S \- E. p! ?guest_enable=YES, H' v. v$ _1 c) H, `) B& b& x! i
guest_username=ftpvuser
+ C0 w! b) G. I; M0 K# wpam_service_name=/etc/pam.d/ftpvuser.pam
3 V s: t E# }7 B. x# R8 Xuser_config_dir=/etc/vsftpd/vuser.d" M# _& ]4 f0 N8 i5 C# }' h
anon_umask=022
% A. Q8 i. O: X& v' d-------------------------------------
. {6 ^% w6 N1 T) vsystemctl restart vsftpd
7 r) Q9 k, o2 T/ v: J+ hsystemctl status vsftpd) c+ B2 S% X2 V3 v4 N9 ?) J
配置注解:
5 b5 x/ n* m) [+ t- mguest_enable=YES # 增加,启用虚拟用户模式8 d- K- B9 |" P3 c0 W O7 ]
guest_username=ftpvuser # 增加,配置虚拟用户映射到的本地用户名
4 v0 z3 x4 y3 A7 K2 }pam_service_name=/etc/pam.d/ftpvuser.pam # 修改,配置虚拟用户的认证方式
# w1 f- Z* H# J0 @+ r5 h( puser_config_dir=/etc/vsftpd/vuser.d # 增加,虚拟用户的配置文件目录" R& P- [1 X4 [: @2 N/ ?$ r& w. ]
注意:4 i4 [ q* C8 T! r& z7 |
1)除了主配置文件外,还可以给特定用户设定个人配置文件" K; v/ k& Y) c7 C
2)虚拟用户默认可以读写,访问时映射为本地用户,所以需要启用对本地用户的控制
F% I% C& F* o$ e6 T# j2 r) Y" f3)实际的访问权限可由用户独立的配置文件进行单独控制 F @% S$ o6 e
4.2.设置 ftp 虚拟用户的验证授权方式1 V' w5 @' W/ Q* P! \6 O$ {
1)创建虚拟用户的秘钥文件" z9 D, d- m& [; _ r
mkdir -p /etc/vsftpd/vuser.d' @5 B5 h' _1 u" f, O
cd /etc/vsftpd/vuser.d6 X2 U( Q7 M) r2 `# y0 y( j! ~" ?# y
touch vuser.list
k) d( ] g$ T) G% G9 h2)加密虚拟用户的秘钥文件
% v$ Z2 E2 m- _# 使用 db_load 工具生成加密文件$ u$ d# U a, d z' G; K
yum install db4-utils -y
8 f8 a7 i" ^ Mdb_load -T -t hash -f vuser.list vuser.db
4 d4 W8 c* z. ^0 K0 g- Z/ Hfile vuser.list
" W' t' W/ ]% i3 Lfile vuser.db
! ] G: ?* ]& B* I c2 J3 G% z# 为了安全,修改虚拟用户文件的访问权限' h% }6 i: H$ w+ ]9 Y
chmod 600 /etc/vsftpd/vuser.*
, P2 R7 g0 S: q; p4 n6 Zll /etc/vsftpd/vuser.*' |. X, \% k' U8 z9 J% Z& C
3)创建虚拟用户的授权认证文件
6 m9 @7 \/ A2 rcd /etc/pam.d/
% i) N8 }; s1 H, x# g+ }4 B ?/ d! ]* vmv vsftpd vsftpd.ori # 备份原有的ftp的pam认证文件
/ Y. H9 P3 s% Dvim ftpvuser.pam # 创建新的ftp虚拟用户认证文件
/ N9 |# L( b4 g( }$ d3 j) y' I% n-----------------------------------
1 V& c- J( @7 E" c2 H9 Y) `#%PAM-1.00 t: r/ H/ O8 X5 e# W2 C; }" d6 S
auth required pam_userdb.so db=/etc/vsftpd/vuser.d/vuser! W9 L& e1 L# r; Y3 L% G
account required pam_userdb.so db=/etc/vsftpd/vuser.d/vuser
" y/ q" E6 U: F& M3 P-----------------------------------: R1 h6 h* R/ ^- ?
注意:db=/etc/vsftpd/vuser.d/vuser 不可以加.db的扩展名,否则认证不成功
2 U: d) Q" V% w G4.3.实例演示:配置一个虚拟用户; a' L+ p# S0 j2 Q" ?
1)创建 ftp 虚拟用户 test1 的数据目录和秘钥文件
! g7 j; [* |0 ~8 Qmkdir -p /data/ftpdata/zhaoshuai5 e* Q6 b, F1 w2 N* I
touch /data/ftpdata/zhaoshuai/ccc.txt # 创建测试文件
. [* @6 D$ j3 C- Umkdir -p /data/ftpdata/zhaoshuai/ddd
2 _ v3 X5 Y5 T* d8 O" t! p4 @chown -R ftpvuser.ftpvuser /data/ftpdata; s; n: C h9 ?! U l+ i
chmod 755 /data/ftpdata/
7 r/ @7 Q, C4 q& B; ~ls -lhd /data/ftpdata/6 d0 k; j" R2 X6 C$ N
ls -lh /data/ftpdata/* x( N, V4 H2 h: ^0 b! X4 |1 H
2)把该虚拟用户 test1 添加到 user_list 文件中* c+ \. g. ?) K5 v8 I# G5 z( J
vim /etc/vsftpd/user_list ~$ l4 T! m h
---------------------% O6 |# `. ?. a& f* D% s0 x
zhaoshuai- X" ]# D1 c' V) d* G* K4 B
----------------------
# T) t' p2 O w1 y& w" G备注:4 r" t$ b: C" r2 I
1)注释掉其他本地用户认证的内容,因为启用了 guest_enable 后,本地用户将失效,所有非匿名用户变成虚拟用户2 N% q9 o, g: ^8 l! i' v
2)因为需要授权访问的用户比较少,所以user_list设置为可以访问ftp服务的用户( f1 g A* H( t7 K. ^' A# E' T
3)创建或修改虚拟用户秘钥信息0 _/ S# d6 e" K, B' c: D& p
cd /etc/vsftpd/vuser.d
: n+ b8 A3 F; ~1 }vim vuser.list, R; [% U1 K( l' M; z9 t: K
--------------------0 D3 Q& g- a3 `6 y* E2 f. S
zhaoshuai! z, ^2 d3 e) }' a( C3 u/ k( M
zhaoshuai # 这里的密码和系统用户 zhaoshuai 的密码不同用以区分- B" O9 d: v% g* o* A( {8 F
--------------------; _9 U7 N9 a. c+ Z
db_load -T -t hash -f vuser.list vuser.db
6 ~+ S/ I$ f$ @: o. `" ?) j. B, {" O该文件的格式为:一行用户名一行密码
: n) o: u8 o: H6 O4 R4)为用户创建授权配置文件(文件名必须为虚拟用户名)
$ m: I6 e: t" j6 z$ xcd /etc/vsftpd/vuser.d, }' N2 k5 p2 U. z3 e, @
vim zhaoshuai
# P6 G3 {4 U/ \9 O5 X6 X C! g" l---------------------------
: T* T) o: J$ U! T# 指定宿主目录,配置访问权限
8 m& }5 c) ~$ X6 M' Q6 Flocal_root=/data/ftpdata/zhaoshuai # 虚拟用户的宿主目录
$ f R+ Q0 r9 ^, w7 ]& fwrite_enable=YES* F5 `% F2 P1 B3 l* u6 W U7 o; L
anon_upload_enable=YES # 上传
2 z7 d' B% d( j9 [& h' g5 banon_mkdir_write_enable=YES # 创建目录写权限/ E$ ~2 u) _- M) T3 U
anon_other_write_enable=YES # 其他写入权限
8 Y( i7 i6 Y& K3 B' g4 o8 |) J---------------------------
7 A+ u% @ a+ J6 g$ p5)配置完成刷新配置信息4 f( x3 R3 \' f! `$ l5 ~
systemctl restart vsftpd* u& o1 d1 Q1 c. ?; v/ f. o
systemctl status vsftpd
. l- y( b; Y% C$ b6)登陆测试4 m# B% q" i$ f+ C' D+ g
[root@srv05-CT75 vuser.d]# ftp 127.0.0.1
: ^* c' d! n1 o8 eConnected to 127.0.0.1 (127.0.0.1).
% e* n4 u4 s$ @3 d' N2 i7 w1 e220 (vsFTPd 3.0.2)5 A5 [9 l4 J/ u6 m
Name (127.0.0.1:root): zhaoshuai W' [! _/ r. n0 G/ S
331 Please specify the password.0 u" N8 G& A4 \8 Y
Password: # 在这里使用系统用户zhaoshuai的密码无法登陆2 M& h$ K0 | Y3 f! S: v
530 Login incorrect.
$ N+ M7 b; l7 [7 Y& h' {) n; pLogin failed.
' S! N# C' b$ x/ G2 _ftp> exit
2 e& X; r' B- @. y' g; j& ?6 z# ^221 Goodbye.
" `. h+ g) O% ?4 f! g! s! U3 I[root@srv05-CT75 vuser.d]# ftp 127.0.0.11 C; g t' A6 Y9 Q; \
Connected to 127.0.0.1 (127.0.0.1).7 a/ Q9 x9 x/ V) P
220 (vsFTPd 3.0.2), t$ P; m& X8 }4 [5 J
Name (127.0.0.1:root): zhaoshuai
C$ m6 Z# x6 h1 f331 Please specify the password.
; W x: q8 @3 U! p7 WPassword: # 使用虚拟用户zhaoshuai的密码可以正常登录3 o6 `& z, j: E7 i+ i
230 Login successful.- t' L i8 N9 g) {
Remote system type is UNIX.$ Z# l* m% X7 {+ n* G0 y/ p/ d
Using binary mode to transfer files.
) i: V- z1 M! |( ~! v1 Lftp>
7 r% u E; }" dftp> ls # 可以查看到上面创建的测试文件7 s8 S% m F. D$ T4 q9 a
227 Entering Passive Mode (127,0,0,1,226,175).
" Y. m9 a7 E. I- c# F7 H5 E! j150 Here comes the directory listing.# r' o; d" h, n. O
drwxr-xr-x 3 1000 1000 4096 Jun 12 07:59 ccc.txt
2 }# Q- a* P. O' r( Hdrwxr-xr-x 6 1000 1000 4096 Jun 12 07:45 ddd
9 m4 h% l: _+ D# h226 Directory send OK., E7 l/ t0 f( v" F# c5 y/ y
ftp> exit: J7 c) _9 ^4 J6 Z% _
221 Goodbye.* j& a( Z: A# f3 p
回到顶部5 v' n' T1 h7 ]$ @+ w( o
拓展1:ftp 的防火墙配置2 h. m o. P* r; Q
iptables -I INPUT -p tcp --dport 21 -j ACCEPT # FTP连接端口4 ~; A- E1 S2 ~2 j
iptables -I INPUT -p tcp --dport 33000:34000 -j ACCEPT # pasv模式下的随机端口5 j) C% M( G& H1 k
iptables-save >/etc/sysconfig/iptables # 保存防火墙配置2 z5 _, e& ~2 d- b! {% F5 b
systemctl restart iptables.service+ g5 I6 u2 S7 R0 C* {9 m, h, A6 M
systemctl restart vsftpd.service0 L- ^0 W/ c0 I6 ^2 [9 K2 o& v
回到顶部
$ E' h! F- f- X. a3 D拓展2:CentOS6安装vsftpd7 [7 [& J" s0 D+ v/ v0 n# b2 _
方法相同,区别在于服务的启动命令是
+ K7 B9 c% {' D' p1 T% I: `8 J2 T' ~service vsftpd restart+ q( d0 l) m# ^* S M0 A
service vsftpd status0 j! b& A4 r0 z9 E1 T& C+ m
|
|