本人的Linux版本是Redhat Enterprise 5.0,刚开始从Vsftpd官方网站上下载最新版的2.3.2 和2.0.5,根据其文档中给的Example尝试安装和配置,但是经过几次尝试发现在配置Virtual user的方式时总是不成功,故从新选择Redhat Enterprise 5.0 光盘自带的vsftpd-2.0.5-10.e15.rpm.
Vsftpd的实现有三种方式:
n 匿名用户形式:在默认安装的情况下,系统只提供匿名用户访问;
n 本地用户形式:以/etc/passwd中的用户名为认证方式;
n 虚拟用户形式:支持将用户名和口令保存在数据库文件或数据库服务器中。相对于FTP的本地用户形式来说,虚拟用户只是FTP服务器的专有用户,虚拟用户只能访问FTP服务器所提供的资源,这大大增强系统本身的安全性。相对于匿名用户而言,虚拟用户需要用户名和密码才能获取FTP服务器中的文件,增加了对用户和下载的可管理性。对于需要提供下载服务,但又不希望所有人都可以匿名下载;既需要对下载用户进行管理,又考虑到主机安全和管理方便的FTP站点来说,虚拟用户是一种极好的解决方案。
vsftpd安装后的配置文件和路径说明如下:
/etc/vsftpd/vsftpd.conf |
vsftpd的主配置文件 |
/usr/sbin/vsftpd |
vsftpd的主程序 |
/etc/init.d/rc.d/vsftpd |
vsftpd的启动脚本 |
/etc/pam.d/vsftpd |
PAM认证文件(此文件中file=/etc/vsftpd/ftpusers字段,指明阻止访问的用户来自/etc/vsftpd/ftpusers文件中的用户) |
/etc/vsftpd/ftpusers |
禁止使用vsftpd的用户列表文件。记录不允许访问FTP服务器的用户名单,管理员可以把一些对系统安全有威胁的用户账号记录在此文件中,以免用户从FTP登录后获得大于上传下载操作的权利,而对系统造成损坏 |
/etc/vsftpd/user_list |
禁止或允许使用vsftpd的用户列表文件。这个文件中指定的用户缺省情况(即在/etc/vsftpd/vsftpd.conf中设置userlist_deny=YES)下也不能访问FTP服务器,在设置了userlist_deny=NO时,仅允许user_list中指定的用户访问FTP服务器。 |
/var/ftp |
1)匿名用户主目录;2)本地用户主目录为:/home/用户主目录,即登录后进入自己家目录。 |
/var/ftp/pub |
匿名用户的下载目录,此目录需赋权根chmod 1777 pub(1为特殊权限,使上载后无法删除)。 |
启动vsftpd服务
[root@localhost ~]# service vsftpd start
或
[root@localhost ~]# /etc/init.d/vsftpd start
停止vsftpd服务
[root@localhost ~]# service vsftpd stop
或
[root@localhost ~]# /etc/init.d/vsftpd stop
重新启动vsftpd
[root@localhost ~]# service vsftpd restart
或
[root@localhost ~]# /etc/init.d/vsftpd restart
查看vsftpd服务状态
[root@localhost ~]# /etc/init.d/vsftpd status
或
[root@localhost ~]# service vsftpd stauts
设置vsftpd服务开机自动加载
[root@localhost ~]# ntsysv
或
[root@localhost ~]# chkconfig –level 35 vsftpd on
匿名用户是名为anonymous或ftp的FTP用户,匿名FTP用户登录后将FTP服务器中的/var/ftp作为FTP根目录。匿名用户通常用于提供公共文件的下载,如架设公共软件下载的FTP服务器,所有人都可以使用匿名用户进行软件下载。
设置匿名用户访问、上传和下载文件。默认情况下,vsftpd安装后,启动vsftpd服务,匿名用户ftp(或anonymous)就可以匿名浏览、下载文件。
下面配置匿名用户可以上传文件。
匿名用户的主目录是/var/ftp。/var/ftp/pub目录是匿名用户上传、下载文件的目录。
设置以下行,去掉前面的#号
anonymous_enable=YES
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
这样,设置完后,匿名用户登录ftp后仍无法上传。这是由于/var/ftp/pub目录权限的问题。如下图所示,提示“553 Could not create file”。
[root@localhost ~]# chmod -R 777 /var/ftp/pub
重新启动vsftpd,这样,匿名用户就可以上传文件了。
本地用户账号是FTP服务器中的系统用户账号,使用FTP本地用户账号登录FTP服务器后,登录目录为本地用户的宿主目录。本地FTP用户账号通常和Web服务器一起提供虚拟主机服务,作为网页虚拟主机更新网页的途径。
添加本地用户tom及目录/home/tom,
[root@localhost ~]#useradd -d /home/tom tom
[root@localhost ~]#passwd foo
添加本地用户fred及目录/home/fred,
[root@localhost ~]#useradd -d /home/fred fred
[root@localhost ~]#passwd bar
[root@localhost ~]# vi /etc/vsftpd/vsftpd.conf
在上述匿名用户配置的基础上增加以下配置,去掉以下行的#号
local_enable=YES
local_umask=022
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
:x保存退出。
修改后的vsftpd.conf配置文件如下:
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
如果不允许匿名用户登录匿名用户的主目录,我们可以设置anonymous相关项为NO
anonymous_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anonymous_enable=YES |
开启匿名用户登录 |
local_enable=YES |
开启本地用户登录 |
write_enable=YES |
开启写权限以便上传 |
local_umask=022 |
设置上传后文件为user=rwx, group=, other= ,这样,用户上传文件后,是不能删除和修改了。因为用户属于group组。 解决方法是,设置local_umask=002。最终文件权限是777-文件夹掩码-local_umask掩码。 |
anon_upload_enable=YES |
开启匿名用户上传权限 |
chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list |
设定chroot配置,禁止chroot_list文件中的用户访问上一级目录; |
userlist_enable=YES |
这个选项如果是YES,那/etc/vsftpd/user_list中的用户将被禁止访问ftp。如果是NO,则只有user_list里面的用户才能访问ftp。 |
[root@localhost ~]# touch /etc/vsftpd/chroot_list
[root@localhost ~]# vi /etc/vsftpd/chroot_list
tom
fred
在chroot_list添加本地用户tom,fred,注意一行一个,重新启动vsftpd成功后,tom或者fred就可以访问ftp服务了。
如果只允许本地用户访问ftp,而不允许登录linux,我们按以下方式增加ftp用户。例如,bill用户只能访问ftp的/home/bill目录,而不能在linux登录。
[root@localhost ~]# useradd -d /home/bill -s /sbin/nologin bill
[root@localhost ~]# vi /etc/vsftpd/chroot_list
tom
fred
bill
虚拟用户账号是为了保证FTP服务器的安全性,由vsftpd服务器提供的非系统用户账号。虚拟用户FTP登录后将把指定的目录作为FTP根目录。虚拟用户与本地用户具有类似的功能,由于虚拟用户相对安全,因此正逐步替代本地用户账号。
由于虚拟用户账号具有较高的安全性,可以替代本地用户账号使用,下面是vsftpd虚拟用户账号设置的几个步骤:
a. 生成虚拟用户口令库文件
b. 配置生成Vsftpd的认证文件
c. 建立虚拟用户所要访问的目录并设置相应的权限
d. 建立配置文件
a).生成虚拟用户口令库文件,为了建立口令库文件,首先我们要在/etc/vsftpd/生成一个口令的logins.txt文本文件,
tom
foo
fred
bar
注意:logins.txt文件的奇数行为用户名,偶数行为口令。
b).接下来我们使用db_load 命令生成口令库文件。在此之前首先要确认db4-utils-4.3.29- 9.fc6.i386.rpm,db4-4.3.29-9.fc6.i386.rpm,两个软件包是被安装的。
c).执行db_load命令,生成虚拟口令库文件vsftpd_login.db文件,
[root@localhost ~]# db_load -T -t hash -f logins.txt /etc/vsftpd/vsftpd_login.db
d).编辑生成虚拟用户所需的PAM配置文件。
建立vsftpd虚拟用户所需的系统用户帐号,账号名为virtual,指定用户的宿主目录是/home/ftpsite,设置宿主目录的权限为700。
[root@localhost ~]# useradd -d /home/ftpsite virtual
[root@localhost ~]# chmod 700 /home/ftpsite/
这样vsftpd服务器中的所有虚拟用户账号登录后都将在/home/ftpsite目录中。
1).编辑vsftpd.conf文件,增加虚拟用户的配置项
编辑/etc/vsftpd/vsftpd.conf文件,在vsftpd.conf配置文件中添加虚拟用户的配置项,内容如下:
guest_enable=YES guest_username=virtual pam_service_name=vsftpd
2).重新启动vsftpd服务程序
3).测试vsftpd中的虚拟用户账号
测试vsftpd中的虚拟用户账号tom,密码foo,在测试前可以先在/home/ftpsite目录中建立测试文件,用于测试时进行下载,并设置该文件的属主和属组为virtual.
4).虚拟配置成功后的vsftpd.conf文件的配置
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
listen=YES
guest_enable=YES
guest_username=virtual
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
5). 编辑生成虚拟用户所需的PAM配置文件。
vi /etc/pam.d/vsftpd文件,插入以下两行
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
vsftpd服务器中的虚拟用户可以灵活的针对不同的用户账号设置不同的用户权限,配置的步骤如下:
1).设置主配置文件
在vsftpd.conf配置文件中添加user_config_dir配置项,并设置用户配置文件的保存目录。
user_config_dir=/etc/vsftpd_user_conf
在上面的配置实例中,设置在/etc/vsftpd_user_conf目录中保存虚拟用户的配置文件。
例如,在/etc/vsftpd.conf文件中,增加虚拟用户的配置项:
user_config_dir=/etc/vsftpd_user_conf
2).建立用户配置文件目录
使用mkdir命令建立虚拟用户配置文件的保存目录
[root@localhost ~]#mkdir /etc/vsftpd_user_conf
3).为虚拟用户建立单独的配置文件
在/etc/vsftpd_user_conf/目录中可以为每个虚拟用户建立独立的配置文件,配置文件名称和用户名相同。
例如,为用户jack建立配置文件jack ,并将anon_world_readable_only设置为NO,表示用户具有浏览和下载的权限。
[root@localhost ~]#vim /etc/vsftpd_user_conf/jack
anon_world_readable_only=NO
为用户tom建立配置文件tom,并设置该用户具有浏览,下载,上传,改名,删除文件,建立和删除的权限。
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
#cat tom
anon_world_readable_only=NO --表示用户可以浏览FTP目录和下载文件
anon_upload_enable=YES --表示用户可以上传文件
anon_mkdir_write_enable=YES --表示用户具有建立和删除目录的权利
anon_other_write_enable=YES --表示用户具有文件改名和删除文件的权限
通过对以上配置项的组合设置,vsftpd可以为每个虚拟用户配置不同的FTP权限,用户配置文件中没有的配置项将按照vsftpd.conf配置文件中的内容设置。
设置匿名用户的最大传输率为20Kbps,修改/etc/vsftpd/vsftpd.conf添加语句:anon_max_rate=20000
设置本地帐号最大传输率为1Mbps,修改/etc/vsftpd/vsftpd.conf添加语句:local_max_rate=1000000
例如设置服务器允许的最大并发数为99,而每个用户同一时段的最大并发线程数为5,修改/etc/vsftpd/vsftpd.conf添加两行语句:max_clients=99 和 max_per_ip=5.
默认FTP服务器端口号是21,出于安全目的,有时需修改默认端口号,修改/etc/vsftpd/vsftpd.conf,添加语句(例):listen_port=4449 该语句指定了修改后FTP服务器的端口号,应尽量大于4000,修改后访问。
#ftp 192.168.57.2 4449(需加上正确的端口号了,否则不能正常连接)
举例:
#mkdir –p /home/try 递归创建新目录
#groupadd try 新建组
#useradd –g try –d /home/try try1 新建用户try1并指定家目录和属组
#useradd –g try –d /home/try try2 新建用户try2并指定家目录和属组
#useradd –g try –d /home/try try3 新建用户try3并指定家目录和属组
#passwd try1 为新用户设密码
#passwd try2 为新用户设密码
#passwd try3 为新用户设密码
#chown try1 /home/try 设置目录属主为用户try1
#chown .try /home/try 设置目录属组为组try
#chmod 750 /home/try 设置目录访问权限try1为读,写,执行;try2,try3为读,执行
由于本地用户登录FTP服务器后进入自己主目录,而try1,try2 try3对主目录/home/try分配的权限不同,所以通过FTP访问的权限也不同,try1访问权限为:上传,下载,建目录 ;try2ty3访问权限为下载,浏览,不能建目录和上传。实现了群组中用户不同访问级别,加强了对FTP服务器的分级安全管理。
xferlog_enable=YES (表明FTP服务器记录上传下载的情况)
xferlog_std_format=YES (表明将记录的上传下载情况写在xferlog_file所指定的文件中,即xferlog_file选项指定的/var/log/xferlog文件中)
xferlog_file=/var/log/xferlog
dual_log_enable=YES (表明启用了双份日志,在用xferlog文件记录服务器上传下载情况的同时,vsftpd_log_file所指定的文件,即/var/log/vsftpd.log也将用来记录服务器的传输情况)
vsftpd_log_file=/var/log/vsftpd.log
vsftpdr的两个日志文件分析如下:
/var/log/xferlog 记录内容举例
Thu Sep 6 09:07:48 2007 7 192.168.57.1 4323279 /home/student/phpMyadmin-2.11.0-all-languages.tar.gz b – i r student ftp 0 * c
/var/log/vsftpd.log 记录内容举例
Tue Sep 11 14:59:03 2007 [pid 3460] CONNECT: Client “127.0.0.1”
Tue Sep 11 14:59:24 2007 [pid 3459] [ftp] OK LOGIN;Client “127.0.0.1” ,anon password ”?”
/var/log/xferlog日志文件中数据的分析和参数说明
记录数据 |
参数名称 |
参数说明 |
Thu Sep 6 09:07:48 2007 |
当前时间 |
当前服务器本地时间,格式为: DDD MMM dd hh:mm:ss YYY |
7 |
传输时间 |
传送文件所用时间,单位为秒 |
192.168.57.1 |
远程主机名称/IP |
远程主机名称/IP |
4323279 |
文件大小 |
传送文件的大小,单位为byte |
/home/student/phpMyadmin- 2.11.0-all-languages.tar.gz |
文件名 |
传输文件名,包括路径 |
b |
传输类型 |
传输方式的类型,包括两种: a以ASCII传输 b以二进制文件传输 |
– |
特殊处理标志 |
特殊处理的标志位,可能的值包括: _ 不做任何特殊处理 C 文件是压缩格式 U 文件是非压缩格式 T 文件是tar格式 |
i |
传输方向 |
文件传输方向,包括两种: o 从FTP服务器向客户端传输 i 从客户端向FTP服务器传输 |
r |
访问模式 |
用户访问模式,包括: a 匿名用户 g 来宾用户 r 真实用户,即系统中的用户 |
student |
用户名 |
用户名称 |
ftp |
服务名 |
所使用的服务名称,一般为FTP |
0 |
认证方式 |
认证方式,包括: 0 无 1 RFC931认证 |
* |
认证用户id |
认证用户的id,如果使用*,则表示无法获得该id |
c |
完成状态 |
传输的状态: c 表示传输已完成 i 表示传输示完成 |
通常在登录FTP服务器的用户不确定的情况下,应将FTP服务器设置为允许匿名账号登录的FTP服务器.
1).启用匿名帐号
anonymous_enable=YES
local_enable=YES
write_enable=YES
listen=YES
设置完成后,重启vsftd.将允许匿名账号和本地账号登录FTP服务器,同时允许匿名用户具有对FTP服务器文件的写权限,并且只能下载文件而不能上传,不允许匿名账号创建文件夹,匿名用户的口令为一个E-mail地址。
2).允许匿名账号上传文件
anon_upload_enable=YES
anon_mkdir_write_enable=YES
将#去掉即可,重启vsftpd.将允许匿名账号上传文件,也就是具有在FTP服务器的本地目录中新建文件和文件夹的功能.
3).仅允许匿名用户访问
#local_enable=YES
#write_enable=YES
在前面加上#,即限制本地账号访问,仅允许匿名用户访问.
4).禁止匿名访问,允许本地账号访问
anonymous_enable=NO
local_enable=YES
write_enable=YES
110 重新启动标记应答。
120 服务在多久时间内ready。
125 数据链路端口开启,准备传送。
150 文件状态正常,开启数据连接端口。
200 命令执行成功。
202 命令执行失败。
211 系统状态或是系统求助响应。
212 目录的状态。
213 文件的状态。
214 求助的讯息。
215 名称系统类型。
220 新的联机服务ready。
221 服务的控制连接端口关闭,可以注销。
225 数据连结开启,但无传输动作。
226 关闭数据连接端口,请求的文件操作成功。
227 进入passive mode。
230 使用者登入。
250 请求的文件操作完成。
257 显示目前的路径名称。
331 用户名称正确,需要密码。
332 登入时需要账号信息。
350 请求的操作需要进一部的命令。
421 无法提供服务,关闭控制连结。
425 无法开启数据链路。
426 关闭联机,终止传输。
450 请求的操作未执行。
451 命令终止:有本地的错误。
452 未执行命令:磁盘空间不足。
500 格式错误,无法识别命令。
501 参数语法错误。
502 命令执行失败。
503 命令顺序错误。
504 命令所接的参数不正确。
530 未登入。
532 储存文件需要账户登入。
550 未执行请求的操作。
551 请求的命令终止,类型未知。
552 请求的文件终止,储存位溢出。
553 未执行请求的的命令,名称不正确。