基于虚拟用户方式的vsftp高级设置(基础篇)

日期:2015年04月07日 作者: 分类:运维 浏览:5199

实验环境:

系统:CentOS 6.5 32位

SELinux:关闭

iptables:关闭

安装方式:yum

说明:由于本教程只为了演示vsftpd,故未开户SELinux和iptables,关于开启SELinux和iptables的vsftpd配置教程会在后续教程中给出。

Vsftpd的三种用户形式

1、匿名用户形式:在默认安装的情况下,系统只提供匿名用户访问

2、本地用户形式:以/etc/passwd中的用户名为认证方式

3、虚拟用户形式:支持将用户名和口令保存在数据库文件或数据库服务器中。相对于FTP的本地用户形式来说,虚拟用户只是FTP服务器的专有用户,虚拟用户只能访问FTP服务器所提供的资源,这大大增强系统本身的安全性。相对于匿名用户而言,虚拟用户需要用户名和密码才能获取FTP服务器中的文件,增加了对用户和下载的可管理性。

对于需要提供下载服务,但又不希望所有人都可以匿名下载;既需要对下载用户进行管理,又考虑到主机安全和管理方便的FTP站点来说,虚拟用户是一种极好的解决方案。如果仅仅是需要简单的上传下载一些文件的话,不建议安装FTP服务器,通过SSH的sftp通道既方便又安全,客户端推荐 FileZilla FTP Client 。但如果是针对多个用户使用,且对权限等方面有较高的要求,则推荐采用支持虚拟用户的Vsftp服务器。

一、安装所需软件包

安装vsftpd软件包

1
yum -y install vsftpd

安装pam软件包

1
yum -y install pam pam-devel

安装DB4软件包

1
yum -y install db4 db4-devel

二、添加用于ftp的本地系统用户

2.1.建立虚拟宿主用户

1
useradd -d /var/ftp -m ftphost

2.2 修改配置文件:

2.2.1 备份vsftpd.conf

1
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak

2.2.2 编辑vsftpd.conf

1
vi /etc/vsftpd/vsftpd.conf

修改如下:

01
02
03
04
05
06
07
08
09
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
anonymous_enable=NO
# 设定不允许匿名访问
 
local_enable=YES
# 设定本地用户可以访问。注意:主要是为虚拟宿主用户,如果该项目设定为NO那么所有虚拟用户将无法访问。
 
write_enable=YES
# 设定可以进行写操作。
 
local_umask=022
# 设定上传后文件的权限掩码。
 
anon_upload_enable=NO
# 禁止匿名用户上传。
 
anon_mkdir_write_enable=NO
# 禁止匿名用户建立目录。
 
dirmessage_enable=YES
# 设定开启目录标语功能。
 
xferlog_enable=YES
# 设定开启日志记录功能。
 
connect_from_port_20=YES
# 设定端口20进行数据连接。
 
chown_uploads=NO
# 设定禁止上传文件更改宿主。
 
xferlog_std_format=YES
# 设定日志使用标准的记录格式。
 
idle_session_timeout=600
# 设定空闲连接超时时间,这里使用默认,单位秒。
 
data_connection_timeout=120
# 设定单次最大连续传输时间,这里使用默认。
# 将具体数值留给每个具体用户具体指定,当然如果不指定的话,还是使用这里的默认值120,单位秒。
 
async_abor_enable=YES
# 设定支持异步传输功能。
 
ascii_upload_enable=YES
ascii_download_enable=YES
# 设定支持ASCII模式的上传和下载功能。
 
ftpd_banner=This Vsftp server supports virtual users!
# 设定Vsftpd的登陆标语。
 
chroot_local_user=YES
# 禁止本地用户登出自己的FTP主目录
 
chroot_list_enable=YES
# 禁止用户登出自己的FTP主目录。
# (default follows)
 
chroot_list_file=/etc/vsftpd/chroot_list
# 在chroot_list文件中可设置部分特殊用户能够登出自己的FTP主目录
 
ls_recurse_enable=NO
# 禁止用户登陆FTP后使用"ls -R"的命令。该命令会对服务器性能造成巨大开销。
# 如果该项被允许,那么挡多用户同时使用该命令时将会对该服务器造成威胁。
 
listen=YES
# 设定该Vsftpd服务工作在StandAlone模式下。
 
pam_service_name=vsftpd
# 设定PAM服务下Vsftpd的验证配置文件名。因此,PAM验证将参考/etc/pam.d/下的vsftpd文件配置。
 
userlist_enable=YES
# 设定userlist_file中的用户将不得使用FTP。
 
tcp_wrappers=YES
# 设定支持TCP Wrappers。
# 以下是关于Vsftpd虚拟用户的重要配置项目,默认没有,需要自己手动添加配置。
 
guest_enable=YES
# 设定启用虚拟用户功能。
 
guest_username=ftphost
# 指定虚拟用户的宿主用户。
 
virtual_use_local_privs=YES
# 设定虚拟用户的权限符合他们的宿主用户。
 
user_config_dir=/etc/vsftpd/vconf
# 设定虚拟用户个人Vsftp的配置文件存放路径。
# 目录中将存放每个Vsftp虚拟用户的个性配置文件,配置文件名必须和虚拟用户名相同。

2.2.3 创建Vsftpd所需的文件

1
2
touch /etc/vsftpd/chroot_list
touch /etc/vsftpd/user_list

2.2.4 建立虚拟用户配置文件存放路径

1
mkdir /etc/vsftpd/vconf/

三、制作虚拟用户数据库文件

3.1 建立虚拟用户名单文件

1
touch /etc/vsftpd/virtusers

3.2 编辑虚拟用户名单文件

在其中加入用户的用户名和口令信息,格式很简单:“1行用户名,1行密码”。

vi /etc/vsftpd/virtusers

1
2
3
4
5
6
7
8
saber
123456
archer
123456
rider
123456
berserker
123456

3.3 生成虚拟用户数据文件:

根据操作系统版本不同可能为 db_load,db41_load或db42_load。

1
db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db

以后每次新增虚拟用户的时候,都需要执行3.2与3.3两个步骤

四、设定PAM验证文件

指定使用虚拟用户数据库文件进行用户验证

4.1 备份PAM验证配置文件

1
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak

4.2 编辑PAM验证配置文件

vi /etc/pam.d/vsftpd

01
02
03
04
05
06
07
08
09
10
11
#%PAM-1.0
auth       sufficient   pam_userdb.so   db=/etc/vsftpd/virtusers
account    sufficient   pam_userdb.so   db=/etc/vsftpd/virtusers
//这里选择sufficient而不是required的原因是,sufficient表示充分条件,可以让vsftpd同时支持虚拟用户和本地用户。
session    optional     pam_keyinit.so    force revoke
auth       required     pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth       required     pam_shells.so
auth       include      password-auth
account    include      password-auth
session    required     pam_loginuid.so
session    include      password-auth

五、虚拟用户的配置

5.1 建立虚拟用户的FTP用户目录,如:

1
mkdir /var/ftp/saber

5.2 建立虚拟用户配置文件模版

vi /etc/vsftpd/vconf/vconf.tmp

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
local_root=/var/ftp/virtusers
# 指定虚拟用户的具体主路径。
 
anonymous_enable=NO
# 设定不允许匿名用户访问。
 
write_enable=YES
# 设定允许写操作。
 
local_umask=022
# 设定上传文件权限掩码。
 
anon_upload_enable=NO
# 设定不允许匿名用户上传。
 
anon_mkdir_write_enable=NO
# 设定不允许匿名用户建立目录。
 
idle_session_timeout=600
# 设定空闲连接超时时间。
 
data_connection_timeout=120
# 设定单次连续传输最大时间。
 
max_clients=10
# 设定并发客户端访问个数。
 
max_per_ip=5
# 设定单个客户端的最大线程数,这个配置主要来照顾Flashget、迅雷等多线程下载软件。
 
local_max_rate=50000
# 设定该用户的最大传输速率,单位b/s。

这里将并不需要指定太多的配置内容,主要的框架和限制交由主配置文件vsftpd.conf来定义,即虚拟用户配置文件当中没有提到的配置项目将参考主配置文件中的设定。而在这里作为虚拟用户的配置文件模版只需要留一些和用户流量控制,访问方式控制的配置项目就可以了。这里的关键项是local_root这个配置,用来指定这个虚拟用户的FTP主路径。

5.3 更改虚拟用户的目录的属主为虚拟宿主用户

1
chown -R ftphost:ftphost /var/ftp

六、测试用户定制

6.1 从虚拟用户模版配置文件复制

1
cp /etc/vsftpd/vconf/vconf.tmp /etc/vsftpd/vconf/saber

6.2 针对具体用户进行定制

vi /etc/vsftpd/vconf/saber

01
02
03
04
05
06
07
08
09
10
11
local_root=/var/ftp/saber
anonymous_enable=NO
write_enable=YES
local_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO
idle_session_timeout=300
data_connection_timeout=90
max_clients=1
max_per_ip=1
local_max_rate=25000

七、启动与停止

启动:

1
service vsftpd start

停止

1
service vsftpd stop

重启

1
service vsftpd restart

注:本文参考网上诸多vsftpd的配置教程,并在服务器上一步步配置一步步编写而来。

标签:

除非注明,戊辰人博客文章均为原创,转载请以链接形式标明本文地址

本文地址:https://wanglu.info/2015/04/295.html