CentOS7.0 配置 vsftpd

参考 我见过最好的vsftpd配置教程

常用命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 启动ftp服务
service vsftpd start
// 查看ftp服务状态
service vsftpd status
// 重启ftp服务
service vsftpd restart
// 关闭ftp服务
service vsftpd stop
// 虚拟用户列表
vi /etc/vsftpd/virtusers
// 生成虚拟用户数据文件
db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
// 定制虚拟用户相关设置
cp /etc/vsftpd/vconf/vconf.tmp /etc/vsftpd/vconf/虚拟用户账号名

安装

1
2
3
4
5
6
// 安装Vsftpd服务相关部件
# yum install vsftpd*
// 安装PAM服务相关部件
# yum install pam*
// 安装DB4部件包, 用来支持文件数据库
# yum install db4*

创建账户

1
2
3
4
// 建立Vsftpd服务的宿主用户
# useradd vsftpd -s /sbin/nologin
// 建立Vsftpd虚拟宿主用户
# useradd overlord -s /sbin/nologin

配置文件

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
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
// 编辑前先备份配置文件
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.backup
// 建立Vsftpd的日志文件,并更该属主为Vsftpd的服务宿主用户
touch /var/log/vsftpd.log
chown vsftpd.vsftpd /var/log/vsftpd.log
// 建立虚拟用户配置文件存放路径
mkdir /etc/vsftpd/vconf/
// 建立chroot_list用户访问权限列表
touch /etc/vsftpd/chroot_list
// 编辑配置文件
vi /etc/vsftpd/vsftpd.conf
//---------------------------------
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
// 设定开启目录标语功能
ferlog_enable=YES
// 设定开启日志记录功能
connect_from_port_20=NO
// 禁止使用20端口进行数据连接
pasv_enable=YES
// 使用PASV工作模式
pasv_min_port=19000
// 在PASV工作模式下,数据连接可以使用的端口范围的最小端口,0 表示任意端口。默认值为0。
pasv_max_port=19500
// 在PASV工作模式下,数据连接可以使用的端口范围的最大端口,0 表示任意端口。默认值为0。
chown_uploads=NO
// 设定禁止上传文件更改宿主
xferlog_file=/var/log/vsftpd.log
// 设定Vsftpd的服务日志保存路径。注意,该文件默认不存在。必须要手动touch出来,并且由于这里更改了Vsftpd的服务宿主用户为手动建立的Vsftpd。必须注意给与该用户对日志的写入权限,否则服务将启动失败。
xferlog_std_format=YES
// 设定日志使用标准的记录格式。
nopriv_user=vsftpd
// 设定支撑Vsftpd服务的宿主用户为手动建立的Vsftpd用户
async_abor_enable=YES
// 设定支持异步传输功能
ascii_upload_enable=YES
ascii_download_enable=YES
// 设定支持ASCII模式的上传和下载功能
ftpd_banner=This Vsftp server supports virtual users ^_^
// 设定Vsftpd的登陆标语
ls_recurse_enable=NO
// 禁止用户登陆FTP后使用"ls -R"的命令。该命令会对服务器性能造成巨大开销。如果该项被允许,那么挡多用户同时使用该命令时将会对该服务器造成威胁。
listen=YES
listen_ipv6=NO
// 设定该Vsftpd服务工作在StandAlone模式下。顺便展开说明一下,所谓StandAlone模式就是该服务拥有自己的守护进程支持,在ps -A命令下我们将可用看到vsftpd的守护进程名。如果不想工作在StandAlone模式下,则可以选择SuperDaemon模式,在该模式下 vsftpd将没有自己的守护进程,而是由超级守护进程Xinetd全权代理,与此同时,Vsftp服务的许多功能将得不到实现。
pam_service_name=vsftpd
// 设定PAM服务下Vsftpd的验证配置文件名。因此,PAM验证将参考/etc/pam.d/下的vsftpd文件配置。
userlist_enable=YES
// 设定userlist_file中的用户将不得使用FTP
tcp_wrappers=YES
// 设定支持TCP Wrappers
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
allow_writeable_chroot=YES
// chroot_list文件中列出的用户,可以切换到其他目录;未在文件中列出的用户,不能切换到其他目录
**关于Vsftpd虚拟用户支持的重要配置项目**
guest_enable=YES
// 设定启用虚拟用户功能
guest_username=overlord
// 指定虚拟用户的宿主用户
virtual_use_local_privs=YES
// 设定虚拟用户的权限符合他们的宿主用户
user_config_dir=/etc/vsftpd/vconf
// 设定虚拟用户个人Vsftp的配置文件存放路径。这个被指定的目录里,将存放每个Vsftp虚拟用户个性的配置文件,注意: 这些配置文件名必须和虚拟用户名相同。
// ---------------------------------

制作虚拟用户数据库文件

1
2
3
4
5
6
7
8
9
10
11
// 建立虚拟用户名单文件(记录vsftpd虚拟用户的用户名和口令的数据文件)
# touch /etc/vsftpd/virtusers
// 编辑虚拟用户名单文件(格式:一行用户名,一行口令)
# vi /etc/vsftpd/virtusers
// 生成虚拟用户数据文件
# db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
// 查看生成的虚拟用户数据文件
## ll /etc/vsftpd/virtusers.db
//---------------------------------
-rw-r--r-- 1 root root 12288 Sep 16 03:51 /etc/vsftpd/virtusers.db
//---------------------------------

特别注意: 以后再要添加虚拟用户的时候,只需要按照“一行用户名,一行口令”的格式将新用户名和口令添加进虚拟用户名单文件,然后再执行一遍db_load -T -t hash -f 虚拟用户名单文件 虚拟用户数据库文件.db的命令使其生效才可以

设定PAM验证文件,并指定虚拟用户数据库文件进行读取

1
2
3
4
5
6
7
8
9
10
// 编辑前做好备份
# cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.backup
// 编辑Vsftpd的PAM验证配置文件
# vi /etc/pam.d/vsftpd
//---------------------------------
#%PAM-1.0
auth sufficient pam_userdb.so db=/etc/vsftpd/virtusers
account sufficient pam_userdb.so db=/etc/vsftpd/virtusers
#使用tab分隔
//---------------------------------

以上两条是手动添加的,内容是对虚拟用户的安全和帐户权限进行验证。

这里的auth是指对用户的用户名口令进行验证。 这里的accout是指对用户的帐户有哪些权限哪些限制进行验证。

其后的sufficient表示充分条件,也就是说,一旦在这里通过了验证,那么也就不用经过下面剩下的验证步骤了。相反,如果没有通过的话,也不会被系统立即挡之门外,因为sufficient的失败不决定整个验证的失败,意味着用户还必须将经历剩下来的验证审核。 再后面的pam_userdb.so表示该条审核将调用pam_userdb.so这个库函数进行。

最后的db=/etc/vsftpd/virtusers则指定了验证库函数将到这个指定的数据库中调用数据进行验证

虚拟用户的配置

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
// 规划好虚拟用户的主路径
# mkdir /var/www/html/
// 建立测试用户的FTP用户目录
# mkdir /var/www/html/kanecruise/
// 建立虚拟用户配置文件模版
# vi /etc/vsftpd/vconf/vconf.tmp
//---------------------------------
local_root=/opt/vsftp/virtuser
// 指定虚拟用户的具体主路径。
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配置文件经过简化后保存作为虚拟用户配置文件的模版。
这里并不需要指定太多的配置内容,主要的框架和限制交由 Vsftpd的主配置文件vsftpd.conf来定义。
而在这里作为虚拟用户的配置文件模版只需要留一些和用户流量控制,访问方式控制的配置项目就可以了。
这里的关键项是local_root这个配置,用来指定这个虚拟用户的FTP主路径。

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

1
2
3
4
5
6
7
// 更改虚拟用户的主目录的属主为虚拟宿主用户
# chown -R overlord.overlord /var/www/html/
// 检查权限
ll /var/www/html/
//---------------------------------
drwxr-xr-x 2 overlord overlord 4096 Sep 16 05:14 kanecruise
//---------------------------------

创建测试用户的具体配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 从虚拟用户模版配置文件复制
# cp /etc/vsftpd/vconf/vconf.tmp /etc/vsftpd/vconf/kanecruise
// 针对具体用户进行定制
# vi /etc/vsftpd/vconf/kanecruise
//---------------------------------
local_root=/var/www/html/kanecruise
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
//---------------------------------

Done! 启动服务 service vsftpd start