系统环境 centos7.3 版本
ftp 根目录 : /data/ftp
ftp 配置文件目录:/etc/vsftpd
ftp 虚拟用户权限配置文件目录:/etc/vsftpd/vuser_config
实现目标:
1,匿名用户可以登录,但是不能访问虚拟用户的宿主目录,只能访问共享目录
2,虚拟用户对自己的宿主目录有任何权限,且只能在自己宿主目录中操作
1,安装vsftpd和db_load加密工具
1
2
3
4
5
6
|
#要关闭selinux 和防火墙或者开启允许的端口,不然访问会有问题
sed
-
i
's/SELINUX=enforcing/SELINUX=disabled/'
/
etc
/
selinux
/
config
#修改配置文件
setenforce
0
#临时关闭
systemctl
stop
firewalld
.service
#关闭防火墙
yum
install
vsftpd
db4
-
utils
-
y
|
2,创建本地用户[用于映射虚拟用户]
1
2
3
4
5
6
7
|
#建立ftp用户目录
mkdir
-
p
/
data
/
ftp
#创建用户
useradd
-
d
/
data
/
ftp
vuser
-
s
/
sbin
/
nologin
更改权限和主组权限
chmod
755
/
data
/
ftp
chown
vuser
.root
/
data
/
ftp
|
3,创建虚拟用户[用户和密码]文件
1
2
3
4
5
|
vim
/
etc
/
vsftpd
/
vuser
-
list
jin
[用户名
]
123456
[密码
]
jinc
[用户名
]
123123
[密码
]
|
4,加密用户密码文件生成数据库文件
1
2
3
4
|
cd
/
etc
/
vsftpd
/
db_load
-
T
-
t
hash
-
f
.
/
vuser
-
list
.
/
vuser
-
list
.db
chmod
600
vuser
-
list
.db
|
5,创建PAM认证文件
1
2
3
4
|
vim
/
etc
/
pam
.d
/
vuser
.vu
auth
required
/
lib64
/
security
/
pam_userdb
.so
db
=
/
etc
/
vsftpd
/
vuser
-
list
#注意64位系统写/lib64这个路径,32位系统要写成/lib,下同!
account
required
/
lib64
/
security
/
pam_userdb
.so
db
=
/
etc
/
vsftpd
/
vuser
-
list
|
6,修改配置文件
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
|
vim
/
etc
/
vsftpd
/
vsftpd
.conf
#允许匿名用户访问
anonymous_enable
=
yes
local_enable
=
YES
write_enable
=
YES
local_umask
=
022
dirmessage_enable
=
YES
xferlog_enable
=
YES
connect_from_port_20
=
YES
xferlog_file
=
/
var
/
log
/
xferlog
xferlog_std_format
=
YES
listen
=
NO
listen_ipv6
=
YES
#修改ftp默认目录到/data/ftp下面
chroot_local_user
=
YES
local_root
=
/
data
/
ftp
anon_root
=
/
data
/
ftp
#pam认证文件
pam_service_name
=
vuser
.vu
#虚拟用户权限配置目录
user_config_dir
=
/
etc
/
vsftpd
/
vuser_config
userlist_enable
=
YES
tcp_wrappers
=
YES
allow_writeable_chroot
=
YES
one_process_model
=
NO
#开启虚拟用户
guest_enable
=
YES
guest_username
=
vuser
重启
vsftpd服务
systemctl
restart
vsftpd
.service
|
7,创建虚拟用户[权限]配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
cd
/
etc
/
vsftpd
/
vuser_config
vim
jin
[有所有权限
]
local_root
=
/
data
/
ftp
/
jin
#设置登录后禁锢的目录
write_enable
=
yes
#开放写权限
anon_world_readable_only
=
no
#开放下载权限
anon_upload_enable
=
yes
#开放上传权限
anon_mkdir_write_enable
=
yes
#开放创建目录的权限
anon_other_write_enable
=
yes
#开放删除和重命名的权限
vim
jinc
[只有上传下载的权限
]
local_root
=
/
data
/
ftp
/
jinc
anon_upload_enable
=
yes
anon_world_readable_only
=
no
|
8,更改虚拟用户目录权限
1
2
3
|
#如果不更改的话,匿名用户是可以访问到的
chmod
700
jin
chmod
700
jinc
|
9,访问测试:[先在用户文件夹中建个测试的文件夹或文件,方便识别]
匿名访问
登录jin 用户访问:
登录jinc 用户访问:
错误1:226 Transfer done (but failed to open directory)
解决:selinux 和防火墙导致
错误2:500 OOPS: vsftpd: refusing to run with writable root inside chroot()
解决:配置文件中加入 allow_writeable_chroot=YES 针对标准vsftpd(standonly)模式, 然后重启ftp