A、简介
FTP
文件传输协议(File TransferProtocol)是一种在网络上使用TCP/IP协议从另一个系统上下载文件或者向另一个系统上传文件的方法。文件传输协议既是客户端/服务器协议(FTP)的名称,又是调用该协议的客户端实用工具(ftp)的名称。
VSFTPD
vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序。特点是小巧轻快,安全易用。
vsftpd 的名字代表"very secure FTP daemon"。在这个 FTP 服务器设计开发的最开始的时候,高安全性就是一个目标。
目前在开源操作系统中常用的FTPD套件主要还有ProFTPD、PureFTPd和wuftpd等。
B、安装
B.1、CentOS下安装
1.先查看系统是否已经安装了vsftpd
rpm -qa |grep vsftpd
2.先root下
if [ ! -f /etc/yum.repos.d/cobbler-config.repo ] ; then
ver=$(head -1 /etc/issue|awk'{print $7}')
wget http://update.winupon.com/cobbler/ks_mirror/rhel-${ver}.repo \
-O/etc/yum.repos.d/rhel-${ver}.repo
fi
3.安装
yum -y install vsftpd
4.设置vsftpd开机启动
chkconfig vsftpd on
5.重启服务
service vsftpd restart
6.查看ftp端口21是否打开
netstat -ant
B.2、SlackWare下安装
1.下载vsftpd安装包
从官网(http://vsftpd.beasts.org/)下载安装文件vsftpd-2.3.2.tar.gz
2.下载vsftpd安装包
tar zxvf vsftpd-2.3.2.tar.gz
cd vsftpd-2.3.2
make
make install
3.启动vsftpd
vsftpd &
vsftpd /etc/vsftpd.conf & //自定义配置文件
C、配置文件
配置文件vsftpd.conf,CentOS在/etc/vsftpd/目录下,SlackWare在/etc/目录下。
C.1、监听地址与控制端口
l listen_address=192.168.1.113
此参数在VSFTPD使用单独(standalone)模式下有效。此参数定义了在主机的哪个IP地址
上监听FTP请求,即在哪个IP地址上提供FTP服务。对于只有一个IP地址的主机,不需要
使用此参数。对于多址主机,不设置此参数,则监听所有IP地址。默认值为无。
l listen_port=21
指定FTP服务器监听的端口号(控制端口),默认值为21。
C.2、FTP模式与数据端口
FTP 分为两类,PORT FTP和PASV FTP,PORT FTP是一般形式的FTP。这两种FTP在建立控制连接时操作是一样的,都是由客户端首先和FTP服务器的控制端口(默认值为21)建立控制链接,并通过此链接进行传输操作指令。它们的区别在于使用数据传输端口(ftp-data)的方式。PORT FTP由FTP服务器指定数据传输所使用的端口,默认值为20。PASV FTP由FTP客户端决定数据传输的端口。PASV FTP这种做法,主要是考虑到存在防火墙的环境下,由客户端与服务器进行沟通(客户端向服务器发出数据传输请求中包含了数据传输端口),决定两者之间的数据传输端口更为方便一些。
l port_enable=YES|NO
如果你要在数据连接时取消PORT模式时,设此选项为NO。默认值为YES。
l connect_from_port_20=YES|NO
控制以PORT模式进行数据传输时是否使用20端口(ftp-data)。YES使用,NO不使用。默
认值为NO,但RHL自带的vsftpd.conf文件中此参数设为YES。
l port_promiscuous=YES|NO
默认值为NO。为YES时,取消PORT安全检查。该检查确保外出的数据只能连接到客户端
上。小心打开此选项。
l pasv_enable=YES|NO
YES,允许数据传输时使用PASV模式。NO,不允许使用PASV模式。默认值为YES。
l pasv_min_port=port number
l pasv_max_port=port number
设定在PASV模式下,建立数据传输所可以使用port范围的下界和上界,0 表示任意。默认值为0。把端口范围设在比较高的一段范围内,比如50000-60000,将有助于安全性的提高。
l pasv_promiscuous=YES|NO
此选项激活时,将关闭PASV模式的安全检查。该检查确保数据连接和控制连接是来自同一个IP地址。小心打开此选项。此选项唯一合理的用法是存在于由安全隧道方案构成的组织中。默认值为NO。
l pasv_address=
此选项为一个数字IP地址,作为PASV命令的响应。默认值为none,即地址是从呼入的连接套接字(incoming connectd socket)中获取。
C.3、ASCII模式
默认情况下,VSFTPD是禁止使用ASCII传输模式。即使FTP客户端使用asc命令,指明要使用ASCII模式,但是,VSFTPD表面上接受了asc命令,而在实际传输文件时,还是使用二进制方式。下面选项控制VSFTPD是否使用ASCII传输模式。
l ascii_upload_enable=YES|NO
控制是否允许使用ascii模式上传文件,YES允许,NO不允许,默认为NO。
l ascii_download_enable=YES|NO
控制是否允许使用ascii模式下载文件,YES允许,NO不允许,默认为NO。
C.4、超时选项
l idle_session_timeout=600
用户会话空闲后10分钟断开,空闲(发呆)用户会话的超时时间,若是超出这时间没有
数据的传送或是指令的输入,则会强迫断线。单位为秒,默认值为300。
l data_connection_timeout=120
将数据连接空闲2分钟断开,空闲的数据连接的超时时间。默认值为300 秒。
l accept_timeout=60
接受建立联机的超时设定,单位为秒。默认值为60。
l connect_timeout=30
响应PORT方式的数据联机的超时设定,单位为秒。默认值为60。以上两个选项针对客户端的,将使客户端空闲1分钟后自动中断连接,并在中断1分钟后自动激活连接。
C.5、负载控制
l max_clients=100
此参数在VSFTPD使用单独(standalone)模式下有效。此参数定义了FTP服务器最大的并发连接数,当超过此连接数时,服务器拒绝客户端连接。默认值为0,表示不限最大连接数。
l max_per_ip=10
此参数在VSFTPD使用单独(standalone)模式下有效。此参数定义每个IP地址最大的并发连接数目。超过这个数目将会拒绝连接。此选项的设置将影响到象网际快车这类的多进程下载软件。默认值为0,表示不限制。
l anon_max_rate=1000000
设定匿名用户的最大数据传输速度value,以Bytes/s为单位。默认无。
l local_max_rate=1000000
设定用户的最大数据传输速度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 之间。当然,若是线路带宽不足时,速率自然会低于此限制。
C.6、匿名用户
l anonymous_enable=YES
控制是否允许匿名用户登录,YES允许,NO不允许,默认值为YES。
l ftp_username=ftp
匿名用户所使用的系统用户名。默认下,此参数在配置文件中不出现,值为ftp。
l no_anon_password=YES|NO
控制匿名用户登入时是否需要密码,YES不需要,NO需要。默认值为NO。
l deny_email_enable=YES|NO
此参数默认值为NO。当值为YES时,拒绝使用banned_email_file参数指定文件中所列出的e-mail地址进行登录的匿名用户。即,当匿名用户使用banned_email_file文件中所列出的e-mail进行登录时,被拒绝。显然,这对于阻击某些Dos攻击有效。当此参数生效时,需追加banned_email_file参数
l banned_email_file=/etc/vsftpd/banned_emails
指定包含被拒绝的e-mail地址的文件,默认文件为/etc/vsftpd.banned_emails。
l anon_root=/var/ftp/
设定匿名用户的根目录,即匿名用户登入后,被定位到此目录下。主配置文件中默认无此项,默认值为/var/ftp/。
l anon_world_readable_only=YES|NO
控制是否只允许匿名用户下载可阅读文档。YES,只允许匿名用户下载可阅读的文件。NO,允许匿名用户浏览整个服务器的文件系统。默认值为YES。
l anon_upload_enable=YES|NO
控制是否允许匿名用户上传文件,YES允许,NO不允许,默认是不设值,即为NO。除了这个参数外,匿名用户要能上传文件,还需要两个条件:一,write_enable参数为YES;二,在文件系统上,FTP匿名用户对某个目录有写权限。
l anon_mkdir_write_enable=YES|NO
控制是否允许匿名用户创建新目录,YES允许,NO不允许,默认是不设值,即为NO。当然在文件系统上,FTP匿名用户必需对新目录的上层目录拥有写权限。
l anon_other_write_enable=YES|NO
控制匿名用户是否拥有除了上传和新建目录之外的其他权限,如删除、更名等。YES拥有,NO不拥有,默认值为NO。
l chown_uploads=YES|NO
是否修改匿名用户所上传文件的所有权。YES,匿名用户所上传的文件的所有权将改为另外一个不同的用户所有,用户由chown_username参数指定。此选项默认值为NO。
l chown_username=whoever
指定拥有匿名用户上传文件所有权的用户。此参数与chown_uploads联用。不推荐使用root用户。
C.7、本地用户
在使用FTP服务的用户中,除了匿名用户外,还有一类在FTP服务器所属主机上拥有账号的用户。VSFTPD中称此类用户为本地用户(local users),等同于其他FTP服务器中的real用户。
l local_enable=YES|NO
控制vsftpd所在的系统的用户是否可以登录vsftpd。默认值为YES。
l local_root=
定义所有本地用户的根目录。当本地用户登入时,将被更换到此目录下。默认值为无。
l 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。默认值为无。
C.8、虚拟用户
l guest_enable=YES|NO
若是启动这项功能,所有的非匿名登入者都视为guest。默认值为关闭。
l guest_username=ftp
定义VSFTPD的guest用户在系统中的用户名。默认值为ftp。
C.9、用户登录控制
l pam_service_name=vsftpd
指出VSFTPD进行PAM认证时所使用的PAM配置文件名,默认值是vsftpd,默认PAM配置文件是/etc/pam.d/vsftpd。
l userlist_enable=YES|NO
此选项被激活后,VSFTPD将读取userlist_file参数所指定的文件中的用户列表。当列表中的用户登录FTP服务器时,该用户在提示输入密码之前就被禁止了。即该用户名输入后,VSFTPD查到该用户名在列表,VSFTPD就直接禁止掉该用户,不会再进行询问密码等后续步聚。默认值为NO。
l userlist_file=/etc/vsftpd/user_list
指出userlist_enable选项生效后,被读取的包含用户列表的文件。默认值是/etc/vsftpd/user_list。
l userlist_deny=YES|NO
决定禁止还是只允许由userlist_file指定文件中的用户登录FTP服务器。此选项在
userlist_enable 选项启动后才生效。YES,默认值,禁止文件中的用户登录,同时也不向这些用户发出输入口令的提示。NO,只允许在文件中的用户登录FTP服务器。
l tcp_wrappers=YES|NO
在VSFTPD中使用TCP_Wrappers远程访问控制机制,默认值为YES。
C.10、目录访问控制
l chroot_list_enable=YES|NO
锁定某些用户在自家目录中。即当这些用户登录后,不可以转到系统的其他目录,只能在自家目录(及其子目录)下。具体的用户在chroot_list_file参数所指定的文件中列出。默认值为NO。如果激活,你应该提供一个在登录时被chroot()限定在其主目录下的本地用户列表。如果chroot_local_user选项设置为 YES,则意思稍微不同,在这种情况下,这个列表则变成了不受chroot()限制的用户列表。默认情况下,包含这个用户列表的文件是/etc/vsftpd/chroot_list,但是你可以通过chroot_list_file选项来更改它。
l chroot_list_file=/etc/vsftpd/chroot_list
指出被锁定在自家目录中的用户的列表文件。文件格式为一行一用户。通常该文件
是/etc/vsftpd/chroot_list。此选项默认不设置。
l chroot_local_user=YES|NO
将本地用户锁定在自家目录中。当此项被激活时,chroot_list_enable和chroot_local_users参数的作用将发生变化,chroot_list_file所指定文件中的用户将不被锁定在自家目录。本参数被激活后,可能带来安全上的冲突,特别是当用户拥有上传、 shell访问等权限时。因此,只有在确实了解的情况下,才可以打开此参数。默认值为NO。如果设置为YES,本地用户将被chroot()限定在其主目录下(默认)。警告:这个选项牵连到安全性,尤其在用户拥有上传权限或者使用 shell权限的情况下。只有在你知道自己在做什么时才启用它。要知道这些安全相关性不是vsftpd所特有的,它们适用于所有提供chroot()限定本地用户机制的FTP守护进程。
l passwd_chroot_enable
当此选项激活时,与chroot_local_user选项配合,chroot()容器的位置可以在每个用户的基础上指定。每个用户的容器来源于/etc/passwd中每个用户的自家目录字段。默认值为NO。
l chroot_list_file=/etc/vsftpd/chroot_list
C.11、文件操作控制
l hide_ids=YES|NO
是否隐藏文件的所有者和组信息。YES,当用户使用"ls -al"之类的指令时,在目录列表中所有文件的拥有者和组信息都显示为ftp。默认值为NO。
l ls_recurse_enable=YES|NO
YES,允许使用"ls -R" 指令。这个选项有一个小的安全风险,因为在一个大型FTP站点的根目录下使用"ls-R"会消耗大量系统资源。默认值为NO。
l write_enable=YES|NO
控制是否允许使用任何可以修改文件系统的FTP的指令,比如STOR、DELE、RNFR、RNTO、MKD、RMD、APPE 以及SITE。默认值为NO,不过自带的简单配置文件中打开了该选项。
l secure_chroot_dir=
这选项指向一个空目录,并且ftp用户对此目录无写权限。当vsftpd不需要访问文件系统时,这个目录将被作为一个安全的容器,用户将被限制在此目录中。默认目录为/usr/share/empty。
C.12、新增文件权限设定
umask是unix操作系统的概念,umask决定目录和文件被创建时得到的初始权限umask = 022 时,新建的目录 权限是755(777-022=755),文件的权限是644(666-022=644)umask= 077 时,新建的目录 权限是700,文件的权限时 600vsftpd的local_umask和anon_umask借鉴了它默认情况下vsftp上传之后文件的权限是600,目录权限是700想要修改上传之后文件的权限,有两种情况如果使用vsftp的是本地用户则要修改配置文件中的 local_umask 的值如果使用vsftp的是虚拟用户则要修改配置文件中的 anon_umask 的值
l anon_umask=
匿名用户新增文件的umask 数值。默认值为077。
l file_open_mode=
上传档案的权限,与chmod 所使用的数值相同。如果希望上传的文件可以执行,设此值
为0777。默认值为0666。
l local_umask=
本地用户新增档案时的umask 数值。默认值为077。不过,其他大多数的FTP服务器都是使用022。如果您的用户希望的话,可以修改为022。在自带的配置文件中此项就设为了022。
C.13、提示信息
lftpd_banner=loginbannerstring
此参数定义了loginbannerstring(登录欢迎语字符串)。用户可以自行修改。预设值为无。当ftpd_banner设置后,将取代系统原来的欢迎词。
lbanner_file=/directory/vsftpd_banner_file
此项指定一个文本文件,当使用者登入时,会显示此该文件的内容,通常为欢迎话语或是说明。默认值为无。与ftpd_banner相比,banner_file是文本文件的形式,而ftpd_banner是字串格式。banner_file选项将取代ftpd_banner选项。
ldirmessage_enable=YES|MO
控制是否启用目录提示信息功能。YES启用,NO不启用,默认值为YES。此功能启用后,当用户进入某一个目录时,会检查该目录下是否有message_file选项所指定的文档,若是有,则会出现此文档的内容,通常这个档案会放置欢迎话语,或是对该目录的说明。
lmessage_file=
此选项,仅在dirmessage_enable选项激活方生效。默认值为.message。
C.14日志设置
lxferlog_enable=YES|NO
控制是否启用一个日志文件,用于详细记录上传和下载。该日志文件由xferlog_file选项指定。默认值为NO,但简单配置文件中激活此选项。
lxferlog_file=
这个选项设定记录传输日志的文件名。默认值为/var/log/vsftpd.log。
lxferlog_std_format=YES|NO
控制日志文件是否使用xferlog的标准格式,如同wu-ftpd一样。使用xferlog格式,可以重新使用已经存在的传输统计生成器。然而,默认的日志格式更为可读性。默认值为NO,但自带的配置文件中激活了此选项。
llog_ftp_protocol=YES|NO
当此选项激活后,所有的FTP请求和响应都被记录到日志中。提供此选项时,xferlog_std_format不能被激活。这个选项有助于调试。默认值为NO。
C.15、其他设置
l listen=YES
是否运行于standalone模式。YES表示运行于standlone模式,NO表示运行于inetd模式。
l listen_ipv6=YES
是否运行成IPv6模式。YES表示运行一个Ipv6 socket代替IPv4 socket。默认为IPv4。
lsetproctitle_enable=YES|NO
YES,VSFTPD将在系统进程列表中显示每个会话(session)的状态。也就是说,进程报告将显示每个vsftpd会话在做什么(挂起、下载等),如用ps-ef|grepftp。出于安全的目的,可以考虑将此选项关闭。NO,进程报告只显示一个vsftpd进程在运行。默认值为NO。
ltext_userdb_names=YES|No
当使用者登入后使用ls-al之类指令时,目录列表的用户和组信息域,默认是出现拥有者的UID,而不是该档案拥有者的名称。若是希望出现拥有者的名称,则将此功能开启。默认值为NO。
lcheck_shell=YES|NO
此选项仅对不使用PAM方式的VSFTPD生效。当此选项关闭后,当本地用户登录时,VSFTPD不会检查/etc/shells文件以寻找一个有效的用户shell。默认为YES。
lnopriv_user=
指定一个用户,当VSFTPD不想要什么权限时,使用此用户身份。这用户最好是一个专用的用户,而不是用户nobody。在大多数的机器上,nobody用户被用于大量重要的事情。默认值为nobody。
lpam_service_name=
指明VSFTPD使用用PAM验证服务时的PAM配置文件名。默认值为ftp
l chown_uploads=YES
若设置为YES,则导致匿名用户上传的文件的所有者为root(或者chown_username指定的另一个用户)。
l chown_username
和chown_uploads配合使用
l async_abor_enable=YES
如果启用,一个特殊的FTP命令“async ABOR”将被启用。因安全原因不推荐启用。可能那些比较旧的FTP终端会使用这项功能。
D、实例
D.1、最简单的一个匿名ftp配置
##匿名ftp根目录在/var/ftp/
anonymous_enable=YES
#开启匿名登陆
write_enable=YES
anon_upload_enable=YES
#开启匿名上传
anon_mkdir_write_enable=YES
#匿名用户建文件夹权限
ftp_username=ftp
#匿名用户上传的文件权限为ftp
anon_root=/var/ftp/
#匿名用户根目录
ftpd_banner=Welcome to blah FTP service.
#欢迎信息
listen=YES
D.2、用户登录
anonymous_enable=NO
local_enable=YES
#允许本地用户访问
#chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd/chroot_list
# 只有/etc/vsftpd/chroot_list中的用户才可登录
listen=YES
pam_service_name=vsftpd
E、常见问题解决方法
E.1、不可上传文件
设置selinux无效
setenforce 0
如果永久无效则
vi /etc/sysconfig/selinux
SELINUX=enforcing
↓改成
SELINUX=disabled