from:
1)安装vsftpd
sudo apt-get install vsftpd
2)设置 vsftpd.conf文件
注意:设置之前请备份!!
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.old
.1.1、监听地址与控制端口
listen_address=ip address
此参数在VSFTPD使用单独(standalone)模式下有效.此参数定义了在主机的哪个IP地址上监听FTP请求,即在哪个IP地址上提供 FTP服务.对于只有一个IP地址的主机,不需要使用此参数.对于多址主机,不设置此参数,则监听所有IP地址.默认值为无.
listen_port=port_value
指定FTP服务器监听的端口号(控制端口),默认值为21.此选项在standalone模式下生效.
5.1.2、FTP模式与数据端口
port_enable=YES|NO
如果你要在数据连接时取消PORT模式时,设此选项为NO.默认值为YES.
connetc_from_port_20=YES|NO
控制以PORT模式进行数据传输时是否使用20端口(ftp-data).YES使用,NO不使用.默认值为NO,但RHL自带的vsftpd.conf文件中此参数设为YES.
ftp_data_port=port number
设定ftp数据传输端口(ftp-data)值.默认值为20.此参数用于PORT FTP模式.
port_promiscuous=YES|NO
默认值为NO.为YES时,取消PORT
安全检查.该检查确保外出的数据只能连接到客户端上.小心打开此选项.
pasv_enable=YES|NO
YES,允许数据传输时使用PASV模式.NO,不允许使用PASV模式.默认值为YES.
pasv_min_port=port number
pasv_max_port=port number
设定在PASV模式下,建立数据传输所可以使用port范围的下界和上界,0 表示任意.默认值为0.把端口范围设在比较高的一段范围内,比如50000-60000,将有助于安全性的提高.
pasv_promiscuous=YES|NO
此选项激活时,将关闭PASV模式的安全检查.该检查确保数据连接和控制连接是来自同一个IP地址.小心打开此选项.此选项唯一合理的用法是存在于由安全隧道方案构成的组织中.默认值为NO.
pasv_address=
此选项为一个数字IP地址,作为PASV命令的响应.默认值为none,即地址是从呼入的连接套接字(incoming connectd socket)中获取.
5.2.2 负载控制
max_clients=numerical value
此参数在VSFTPD使用单独(standalone)模式下有效.此参数定义了FTP服务器最大的并发连接数,当超过此连接数时,服务器拒绝客户端连接.默认值为0,表示不限最大连接数.
max_per_ip=numerical value
此参数在VSFTPD使用单独(standalone)模式下有效.此参数定义每个IP地址最大的并发连接数目.超过这个数目将会拒绝连接.此选项的设置将影响到象网际快车这类的多进程下载软件.默认值为0,表示不限制.
anon_max_rate=value
设定匿名用户的最大数据传输速度value,以Bytes/s为单位.默认无.
local_max_rate=value
设定用户的最大数据传输速度value,以Bytes/s为单位.默认无.此选项对所有的用户都生效.此外,也可以在用户个人配置文件中使用此选项,以指定特定用户可获得的最大数据传输速率.
步骤如下:
①在vsftpd.conf中指定用户个人配置文件所在的目录,如:
user_config_dir=/etc/vsftpd/userconf
②生成/etc/vsftpd/userconf目录.
③用户个人配置文件是在该目录下,与特定用户同名的文件,如:
/etc/vsftpd/userconf/xiaowang
④在用户的个人配置文件中设置local_max_rate参数,如:
local_max_rate=80000
以上步骤设定FTP用户xiaowang的最大数据传输速度为80KBytes/s.
VSFTPD 对于速度控制的变化范围大概在80%到120%之间.比如我们限制最高速度为100KBytes/s,但实际的速度可能在80KBytes/s 到120KBytes/s 之间.当然,若是线路带宽不足时,速率自然会低于此限制.
5.3 用户选项
VSFTPD的用户分为三类:匿名用户、本地用户(local user)以及虚拟用户(guest).
5.3.1、匿名用户
anonymous_enable=YES|NO
控制是否允许匿名用户登录,YES允许,NO不允许,默认值为YES.
ftp_username=
匿名用户所使用的系统用户名.默认下,此参数在配置文件中不出现,值为ftp.
no_anon_password=YES|NO
控制匿名用户登入时是否需要密码,YES不需要,NO需要.默认值为NO.
deny_email_enable=YES|NO
此
参数默认值为NO.当值为YES时,拒绝使用banned_email_file参数指定文件中所列出的e-mail地址进行登录的匿名用户.即,当匿名
用户使用banned_email_file文件中所列出的e-mail进行登录时,被拒绝.显然,这对于阻击某些Dos攻击有效.当此参数生效时,需追
加banned_email_file参数
banned_email_file=/etc/vsftpd.banned_emails
指定包含被拒绝的e-mail地址的文件,默认文件为/etc/vsftpd.banned_emails.
anon_root=
设定匿名用户的根目录,即匿名用户登入后,被定位到此目录下.主配置文件中默认无此项,默认值为/var/ftp/.
anon_world_readable_only=YES|NO
控制是否只允许匿名用户下载可阅读文档.YES,只允许匿名用户下载可阅读的文件.NO,允许匿名用户浏览整个服务器的文件系统.默认值为YES.
anon_upload_enable=YES|NO
控制是否允许匿名用户上传文件,YES允许,NO不允许,默认是不设值,即为NO.除了这个参数外,匿名用户要能上传文件,还需要两个条件:一,write_enable参数为YES;二,在文件系统上,FTP匿名用户对某个目录有写权限.
anon_mkdir_write_enable=YES|NO
控制是否允许匿名用户创建新目录,YES允许,NO不允许,默认是不设值,即为NO.当然在文件系统上,FTP匿名用户必需对新目录的上层目录拥有写权限.
anon_other_write_enable=YES|NO
控制匿名用户是否拥有除了上传和新建目录之外的其他权限,如删除、更名等.YES拥有,NO不拥有,默认值为NO.
chown_uploads=YES|NO
是否修改匿名用户所上传文件的所有权.YES,匿名用户所上传的文件的所有权将改为另外一个不同的用户所有,用户由chown_username参数指定.此选项默认值为NO.
chown_username=whoever
指定拥有匿名用户上传文件所有权的用户.此参数与chown_uploads联用.不推荐使用root用户.
5.3.2、本地用户
在使用FTP服务的用户中,除了匿名用户外,还有一类在FTP服务器所属主机上拥有账号的用户.VSFTPD中称此类用户为本地用户(local users),等同于其他FTP服务器中的real用户
local_enable=YES|NO
控制vsftpd所在的系统的用户是否可以登录vsftpd.默认值为YES.
local_root=
定义所有本地用户的根目录.当本地用户登入时,将被更换到此目录下.默认值为无.
user_config_dir=
定
义用户个人配置文件所在的目录.用户的个人配置文件为该目录下的同名文件.个人配置文件的格式与vsftpd.conf格式相同.例如定义
user_config_dir=/etc/vsftpd/userconf,并且主机上有用户xiaowang,lisi,那我们可以在
user_config_dir的目录新增名为xiaowang、lisi的两个文件.当用户lisi
登入时,VSFTPD则会读取user_config_dir下lisi这个文件中的设定值,应用于用户lisi.默认值为无.
5.3.3、虚拟用户
guest_enable=YES|NO
若是启动这项功能,所有的非匿名登入者都视为guest.默认值为关闭.
guest_username=
定义VSFTPD的guest用户在系统中的用户名.默认值为ftp.
5.4、安全措施
5.4.1、用户登录控制
pam_service_name=vsftpd
指出VSFTPD进行PAM认证时所使用的PAM配置文件名,默认值是vsftpd,默认PAM配置文件是/etc/pam.d/vsftpd.
/etc/vsftpd.ftpusers
VSFTPD禁止列在此文件中的用户登录FTP服务器.这个机制是在/etc/pam.d/vsftpd中默认设置的.
userlist_enable=YES|NO
此
选项被激活后,VSFTPD将读取userlist_file参数所指定的文件中的用户列表.当列表中的用户登录FTP服务器时,该用户在提示输入密码之
前就被禁止了.即该用户名输入后,VSFTPD查到该用户名在列表,VSFTPD就直接禁止掉该用户,不会再进行询问密码等后续步聚.默认值为 NO.
userlist_file=/etc/vsftpd.user_list
指出userlist_enable选项生效后,被读取的包含用户列表的文件.默认值是/etc/vsftpd.user_list.
userlist_deny=YES|NO
决
定禁止还是只允许由userlist_file指定文件中的用户登录FTP服务器.此选项在userlist_enable
选项启动后才生效.YES,默认值,禁止文件中的用户登录,同时也不向这些用户发出输入口令的提示.NO,只允许在文件中的用户登录FTP服务器.
tcp_wrappers=YES|NO
在VSFTPD中使用TCP_Wrappers远程访问控制机制,默认值为YES.
5.4.2、目录访问控制
chroot_list_enable=YES|NO
锁定某些用户在自家目录中.即当这些用户登录后,不可以转到系统的其他目录,只能在自家目录(及其子目录)下.具体的用户在chroot_list_file参数所指定的文件中列出.默认值为NO.
chroot_list_file=/etc/vsftpd/chroot_list
指出被锁定在自家目录中的用户的列表文件.文件格式为一行一用户.通常该文件是/etc/vsftpd/chroot_list.此选项默认不设置.
chroot_local_users=YES|NO
将
本地用户锁定在自家目录中.当此项被激活时,chroot_list_enable和chroot_local_users参数的作用将发生变
化,chroot_list_file所指定文件中的用户将不被锁定在自家目录.本参数被激活后,可能带来安全上的冲突,特别是当用户拥有上传、
shell访问等权限时.因此,只有在确实了解的情况下,才可以打开此参数.默认值为NO.
passwd_chroot_enable
当此选项激活时,与chroot_local_user选项配合,chroot()容器的位置可以在每个用户的基础上指定.每个用户的容器来源于/etc/passwd中每个用户的自家目录字段.默认值为NO.
5.4.3、文件好作控制
hide_ids=YES|NO
是否隐藏文件的所有者和组信息.YES,当用户使用"ls -al"之类的指令时,在目录列表中所有文件的拥有者和组信息都显示为ftp.默认值为NO.
ls_recurse_enable=YES|NO
YES,允许使用"ls -R" 指令.这个选项有一个小的安全风险,
在一个大型FTP站点的根目录下使用"ls -R"会消耗大量系统资源.默认值为NO.
write_enable=YES|NO
控制是否允许使用任何可以修改文件系统的FTP 的指令,比如STOR、DELE、RNFR、RNTO、MKD、RMD、APPE 以及SITE.默认值为NO,不过自带的简单配置文件中打开了该选项.
secure_chroot_dir=
这选项指向一个空目录,并且ftp用户对此目录无写权限.当vsftpd不需要访问文件系统时,这个目录将被作为一个安全的容器,用户将被限制在此目录中.默认目录为/usr/share/empty.
5.4.4、新增文件权限设定
anon_umask=
匿名用户新增文件的umask 数值.默认值为077.
file_open_mode=
上传档案的权限,与chmod 所使用的数值相同.如果希望上传的文件可以执行,设此值为0777.默认值为0666.
local_umask=
本地用户新增档案时的umask 数值.默认值为077.不过,其他大多数的FTP服务器都是使用022.如果您的用户希望的话,可以修改为022.在自带的配置文件中此项就设为了022.
5.5、提示信息
ftpd_banner=login banner string
此参数定义了login banner string(登录欢迎语字符串).用户可以自行修改.预设值为无.当ftpd_banner设置后,将取代系统原来的欢迎词.
banner_file=/directory/vsftpd_banner_file
此项指定一个文本文件,当使用者登入时,会显示此该文件的
内容,通常为欢迎话语或是说明.默认值为无.与ftpd_banner相比,banner_file是文本文件的形式,而ftpd_banner是字串格
式.banner_file选项将取代ftpd_banner选项.
dirmessage_enable=YES|MO
控制是否启用目录提示信息功能.YES启用,NO不启用,默认值为YES.此功能启用后,当用户进入某一个目录时,会检查该目录下是否有message_file选项所指定的文档,若是有,则会出现此文档的内容,通常这个档案会放置欢迎话语,或是对该目录的说明.
message_file=
此选项,仅在dirmessage_enable选项激活方生效.默认值为.message.
5.6、好志设置
xferlog_enable=YES|NO
控制是否启用一个好志文件,用于详细记录上传和下载.该好志文件由xferlog_file选项指定.默认值为NO,但简单配置文件中激活此选项.
xferlog_file=
这个选项设定记录传输好志的文件名.默认值为/var/log/vsftpd.log.
xferlog_std_format=YES|NO
控制好志文件是否使用xferlog的标准格式,如同wu-ftpd一样.使用xferlog格式,可以重新使用已经存在的传输统计生成器.然而,默认的好志格式更为可读性.默认值为NO,但自带的配置文件中激活了此选项.
log_ftp_protocol=YES|NO
当此选项激活后,所有的FTP请求和响应都被记录到好志中.提供此选项时,xferlog_std_format不能被激活.这个选项有助于调试.默认值为NO.
5.7、其他设置
setproctitle_enable=YES|NO
YES,VSFTPD
将在系统进程列表中显示每个会话(session)的状态.也就是说,进程报告将显示每个vsftpd会话在做什么(挂起、下载等),如用ps
-ef|grep ftp.出于安全的目的,可以考虑将此选项关闭.NO,进程报告只显示一个vsftpd进程在运行.默认值为NO.
text_userdb_names=YES|No
当使用者登入后使用ls -al 之类指令时,目录列表的用户和组信息域,默认是出现拥有者的UID,而不是该档案拥有者的名称.若是希望出现拥有者的名称,则将此功能开启.默认值为NO.
user_localtime=YES|NO
默认为NO.YES,VSFTPD显示目录列表时使用你本地时区的时间.默认是显示GMT时间.同样,由ftp命令“MDTM”返回的时间值也受此选项影响.
check_shell=YES|NO
此选项仅对不使用PAM方式的VSFTPD生效.当此选项关闭后,当本地用户登录时,VSFTPD不会检查/etc/shells文件以寻找一个有效的用户shell.默认为YES.
nopriv_user=
指定一个用户,当VSFTPD不想要什么权限时,使用此用户身份.这用户最好是一个专用的用户,而不是用户nobody.在大多数的机器上,nobody用户被用于大量重要的事情.默认值为nobody.
pam_service_name=
指明VSFTPD使用用PAM验证服务时的PAM配置文件名.默认值为ftp.
6、VSFTPD应用
本部分介绍VSFTPD的具体应用方法.
6.1、允许匿名用户上传文件
在vsftpd.conf文件中修改或增加以下选项:
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
然后创建供匿名用户上传文件的目录,并设定权限:
# mkdir /var/ftp/incoming
# chmod o w /var/ftp/incoming
匿名用户(ftp)上传文件,需要对incoming目录进行好作,而incoming为root所有,匿名用户(ftp)对于incoming来说是其他用户,
要加入其他用户(o)的写权限.
6.2、限制用户在自家目录
在默认配置中,本地用户可以切换到自家目录以外的目录进行浏览,并在权限范围内进行上传和下载,这无疑是个不安全因素.
我们可以设置chroot,让本地用户登录后只能访问自家目录,无法访问其他目录.相关的选项有三个:chroot_local_user、chroot_list_enable、chroot_list_file.限制用户在自家目录有两种做法:
1、限制所有的本地用户在自家目录
chroot_local_user=YES
这种做法,可能会带来一些安全性上的冲突.参见前面的chroot_local_user选项描述.
2、限制部分本地用户在自家目录
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
在/etc/vsftpd.chroot_list文件中加入要限制的本地用户名.注意一个用户名一行.
6.3、配置高安全级别的匿名FTP服务器
VSFTPD自带的简单配置文件已经自称是偏执狂了,这里看看能否更加偏执一些,.有些选项默认已经采用安全性的设置,这里就不再写出了.
#只允许匿名访问,不允许本地用户访问
anonymous_enable=YES
local_enable=NO
#使用ftpd_banner取代VSFTPD默认的欢迎词,免得泄漏相关信息
ftpd_banner=Welcome to this FTP Server
#只让匿名用户浏览可阅读的文件,不可以浏览整个系统
anon_world_readable_only=YES
#隐藏文件的所有者和组信息,匿名用户看到的文件的所有者和组全变为ftp
hide_ids=YES
#取消写权限
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
#使用单独模式,并指定监听的IP地址
listen_address=ip address
#对连接进行控制,还有超时时间,那就根据具体情况再说了.
connect_from_port_20=YES
pasv_min_port=50000
pasv_max_port=60000
#控制并发数,限定每个IP地址的并发数,这个嘛,根据用户自已定了.
max_clients=numerical value
max_per_ip=numerical value
#限定下载速度,具体限多大,就由用户自己定了,80KB/s,也很快了吧.
anon_max_rate=80000
#启用详细的好志记录格式
xferlog_enable=YES
6.4、基于IP地址的虚拟FTP服务器
假定服务器有两个IP地址,192.168.0.1和192.168.0.2.VSFTPD是建立在192.168.0.1上的,现在我们在192.168.0.2上再提供一个虚拟FTP服务器.如何在一台服务器上使用多个IP 地址,请参考相关文档.
1、创建虚拟FTP服务器的根目录.
mkdir -p /var/ftp2/pub
确保/var/ftp2和/var/ftp2/pub目录的拥有者和组均为root,掩码为755.
2、增加虚拟FTP服务器的匿名用户帐号.原先的FTP服务器使用系统用户ftp作为其匿名用户帐号.我们要增加一个ftp2用于虚拟FTP服务器.
useradd -d /var/ftp2 -M ftp2
3、创建虚拟FTP服务器的配置文件.复制原来的vsftpd.conf作为虚拟FTP服务器的配置文件,并修改相关参数.
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd2.conf
新添或修改以下参数:
listen=YES
listen_address=192.168.0.2
ftp_username=ftp2
注:
VSFTPD
默认是监听所有的IP地址,当我们设定基于IP的虚拟FTP服务器时,为防止原来的FTP服务器与虚拟FTP服务器发生监听上的冲突,原FTP服务器需要
指定监听的IP地址.在这里,原来的配置文件中就要设置listen_address=192.168.0.1.
4、启动虚拟FTP服务器.
/etc
/rc.d/init.d/vsftpd脚本在启动时,扫描/etc/vsftpd/目录下所有的*.conf文件,按照*.conf文件的先后,依次启
用vsftpd进程,每个vsftpd进程对应一个.conf文件.即,“ls /etc/vsftpd/”列表的次序与“ps -aux |grep
vsftpd”中的顺序一样.当然了,“ps -aux | grep
vsftpd”中也显示出vsftpd所使用的配置文件,从中也可以看哪个vsftpd进程对应哪个FTP服务器.如果没有列出配置文件,那就是默认的
vsftpd.conf,那么该进程也就是原来的FTP服务器进程.
第3步中虚拟FTP服务器的配置文件被命名为vsftpd2.conf文件,
我们可以用/etc/rc.d/init.d/vsftpd脚本同时启动或关闭原FTP服务器和新加的虚拟FTP服务器.
以下命令单独启动虚拟FTP服务器:
/usr/sbin/vsftpd /etc/vsftpd/vsftpd2.conf &
单独关闭虚拟FTP服务器,用“ps -aux | grep vsftpd”查出进程号,再用kill指令杀死虚拟FTP的进程.
6.4、基于IP地址的虚拟FTP服务器
假定服务器有两个IP地址,192.168.0.1和192.168.0.2.VSFTPD是建立在192.168.0.1上的,现在我们在192.168.0.2上再提供一个虚拟FTP服务器.如何在一台服务器上使用多个IP 地址,请参考相关文档.
1、创建虚拟FTP服务器的根目录.
mkdir -p /var/ftp2/pub
确保/var/ftp2和/var/ftp2/pub目录的拥有者和组均为root,掩码为755.
2、增加虚拟FTP服务器的匿名用户帐号.原先的FTP服务器使用系统用户ftp作为其匿名用户帐号.我们要增加一个ftp2用于虚拟FTP服务器.
useradd -d /var/ftp2 -M ftp2
3、创建虚拟FTP服务器的配置文件.复制原来的vsftpd.conf作为虚拟FTP服务器的配置文件,并修改相关参数.
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd2.conf
新添或修改以下参数:
listen=YES
listen_address=192.168.0.2
ftp_username=ftp2
注:
VSFTPD
默认是监听所有的IP地址,当我们设定基于IP的虚拟FTP服务器时,为防止原来的FTP服务器与虚拟FTP服务器发生监听上的冲突,原FTP服务器需要
指定监听的IP地址.在这里,原来的配置文件中就要设置listen_address=192.168.0.1.
4、启动虚拟FTP服务器.
/etc/rc.d/init.d/vsftpd脚本在启动时,扫描/etc/vsftpd/目录下所有的*.conf文件,按照*.conf文件的先
后,依次启用vsftpd进程,每个vsftpd进程对应一个.conf文件.即,“ls /etc/vsftpd/”列表的次序与“ps -aux
|grep vsftpd”中的顺序一样.当然了,“ps -aux | grep
vsftpd”中也显示出vsftpd所使用的配置文件,从中也可以看哪个vsftpd进程对应哪个FTP服务器.如果没有列出配置文件,那就是默认的
vsftpd.conf,那么该进程也就是原来的FTP服务器进程.
第3步中虚拟FTP服务器的配置文件被命名为vsftpd2.conf文件,
我们可以用/etc/rc.d/init.d/vsftpd脚本同时启动或关闭原FTP服务器和新加的虚拟FTP服务器.
以下命令单独启动虚拟FTP服务器:
/usr/sbin/vsftpd /etc/vsftpd/vsftpd2.conf &
单独关闭虚拟FTP服务器,用“ps -aux | grep vsftpd”查出进程号,再用kill指令杀死虚拟FTP的进程.