VSFTP介绍:
linux 系统下常用的FTP 是vsftp, 即Very Security File Transfer Protocol.是一种在GPL许可下开放源代码、安全、快速、稳定的FTP服务器,能够高效地处理大量的并发连接,所有服务里面只有vsftpd没有依耐关系.还有一个是proftp(Profession ftp)。
VSFTP端口和协议:
控制连接:标准端口为21/tcp,用于发送FTP命令信息。
数据连接:标准端口为20/tcp,用于上传、下载数据。
VSFTP数据链接模式:
主动模式(PORT模式):client 先连接服务器的 21端口(命令端口),然后client开放一个大于1024的端口A等待服务器的20端口连接,21号端口的链接建立以后,服务器就用20去连接client开放的A端口。如果client端有个防火墙,服务器的20端口就连接不进入,导致会连接失败.
被动模式(PASV模式):client开启大于1024的B端口连接服务器的21(命令端口),同时开启B+1端口,当21号端口连接成功后,client会发送PASV命令,通知服务器自己处于被动模式,服务器收到这个消息后就会开放一个大于1024的端口C通知client,client接到通知后就会用B+1来连接服务器的C端口.
从C/S模型来说,PORT对于服务器来说是OUTBOUND,而PASV模式对于服务器是INBOUND.一般我们使用的是主动模式
VSFTP数据传输模式:
文本模式:ASCII模式,以文本序列传输数据。
二进制模式:Binary模式,以二进制序列(比特流)传输数据。
ASCII模式一般只用于纯文本文件传输,而Binary模式更适合传输程序、图片等文件。尤其是对于可执行文件,如果把可执行文件以文本模式传输,则下载下来的文件将无法正常使用。在rhel6中默认采用二进制模式,在rhel6以前的版本中默认采用文本模式,为了提高可靠性,rhel6不再支持文本模式。
VSFTP用户类型:
匿名用户:不需要用户名,密码访问服务端。
本地用户:需要帐户名和密码才能访问。且这个帐户名和密码都是在你linux系统里面已经有的用户。帐号名称、密码等信息保存在passwd、shadow文件中。
虚拟用户:同样需要用户名和密码才能登录。但是和上面的区别就是,这个用户名和密码,在你linux系统中是没有的(没有该用户帐号),使用独立的帐号/密码数据文件
安装VSFTP服务:
[root@justin ~]# rpm -qa|grep vsftpd [root@justin ~]# mount /dev/cdrom /mnt/cdrom/ mount: block device /dev/sr0is write-protected, mounting read-only [root@justin ~]# find /mnt/cdrom/Packages/ -name *vsftp* /mnt/cdrom/Packages/vsftpd-2.2.2-11.el6.i686.rpm [root@justin ~]# rpm -ivh /mnt/cdrom/Packages/vsftpd-2.2.2-11.el6.i686.rpm warning: /mnt/cdrom/Packages/vsftpd-2.2.2-11.el6.i686.rpm: Header V3 RSA/SHA256Signature, key ID fd431d51: NOKEY Preparing... ########################################### [100%] 1:vsftpd ########################################### [100%] [root@justin ~]# rpm -qa|grep vsftpd vsftpd-2.2.2-11.el6.i686 [root@justin ~]#
VSFTP端口开放:
[root@justin ~]# iptables -L Chain INPUT (policy ACCEPT) target prot opt sourcedestination Chain FORWARD (policy ACCEPT) target prot opt sourcedestination Chain OUTPUT (policy ACCEPT) target prot opt sourcedestination [root@justin ~]# iptables -I INPUT -p tcp --dport 20 -j ACCEPT [root@justin ~]# /sbin/iptables -I INPUT -p tcp --dport 21 -j ACCEPT [root@justin ~]# iptables -L Chain INPUT (policy ACCEPT) target prot opt sourcedestination ACCEPT tcp -- anywhere anywhere tcp dpt:ftp ACCEPT tcp -- anywhere anywhere tcp dpt:ftp-data Chain FORWARD (policy ACCEPT) target prot opt sourcedestination Chain OUTPUT (policy ACCEPT) target prot opt sourcedestination [root@justin ~]# iptables -nL Chain INPUT (policy ACCEPT) target prot opt sourcedestination ACCEPT tcp -- 0.0.0.0/00.0.0.0/0tcp dpt:21 ACCEPT tcp -- 0.0.0.0/00.0.0.0/0tcp dpt:20 Chain FORWARD (policy ACCEPT) target prot opt sourcedestination Chain OUTPUT (policy ACCEPT) target prot opt sourcedestination [root@justin ~]# service iptables save iptables:将防火墙规则保存到 /etc/sysconfig/iptables: [确定] [root@justin ~]# sestatus SELinux status: disabled [root@justin ~]# service iptables restart iptables:清除防火墙规则: [确定] iptables:将链设置为政策 ACCEPT:nat filter [确定] iptables:正在卸载模块: [确定] iptables:应用防火墙规则: [确定] [root@justin ~]#
VSFTP服务启动:
[root@justin ~]# /etc/init.d/vsftpd status vsftpd 已停 [root@justin ~]# service vsftpd start 为 vsftpd 启动 vsftpd: [确定] [root@justin ~]# /etc/init.d/vsftpd status vsftpd (pid 2293) 正在运行... [root@justin ~]# chkconfig --level 35 vsftpd on [root@justin ~]# chkconfig --list|grep vsftpd vsftpd 0:关闭 1:关闭 2:关闭 3:启用 4:关闭 5:启用 6:关闭 [root@justin ~]#
VSFTP服务配置文件说明:
[root@justin logrotate.d]# cd [root@justin ~]# cd /etc/vsftpd/ [root@justin vsftpd]# ls ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh [root@justin vsftpd]#
/etc/vsftpd是vsftpd服务配置文件存放目录,
ftpusers:用户控制文件,在这个文件里面的用户,默认是不可以使用vsftpd服务的
user_list:默认功能和第一个一样,但是通过配置,我们可以让只有在这个文件里的用户才能使用vsftpd服务,这样新加入的用户就不会自动拥有vsftp的使用权,这样可以让vsftpd服务器更加安全
vsftpd_conf_migrate.sh:vsftpd操作的一些变量和设置,这个不用管的
vsftpd.conf:vsftpd主配置文件,
[root@justin vsftpd]# cat /etc/passwd|grep ftp ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin [root@justin vsftpd]# ll -d /var/ftp/ drwxr-xr-x 3 root root 4096 12月 24 10:05 /var/ftp/ [root@justin vsftpd]#
安装好FTP后会生成一个用户ftp,ftp为匿名用户登陆用户名,其家目录不在/home下而是/var/ftp,目录权限为755,注意这个权限不能改变
其他配置文件:
配置文件名
|
功能
|
/usr/sbin/vsftpd
|
vsftpd的主程序 |
/etc/rc.d/init.d/vsftpd
|
启动脚本
|
/etc/pam.d/vsftpd
|
PAM认证文件
|
/etc/vsftpd.ftpusers
|
禁止使用vsftpd的用户列表文件
|
/etc/vsftpd.user_list
|
禁止或允许使用vsftpd的用户列表文件
|
/var/ftp
|
匿名用户主目录
|
/var/ftp/pub
|
匿名用户的下载目录
|
/e
tc/logrotate.d/vsftpd.l
og
|
vsftpd的日志文件
|
主配置文件/etc/vsftpd/vsftpd.conf里的各项参数作用文件里都有注释说明:
# Allow anonymous FTP? (Beware - allowed by default if you comment this out). anonymous_enable=YES
是否允许匿名登录FTP服务器,默认设置为YES即允许,用户可使用用户名ftp或者anonymous登陆,密码为空,如不允许匿名访问则设置为NO
# Uncomment this to allow local users to log in. local_enable=YES
# Uncomment this to enable any form of FTP write command. write_enable=YES
是否允许本地用户对FTP服务器文件具有写权限,默认设置为YES允许,这项设置只是一个开关,要使匿名用户或系统用户具有写入权限,还得进行其它的设置。
# Default umask for local users is 077. You may wish to change this to 022, # if your users expect that (022 is used by most other ftpd's) local_umask=022
本地用户默认掩码为077,你可以设置本地用户的文件掩码为缺省022,也可根据个人喜好将其设置为其他值
# Uncomment this to allow the anonymous FTP user to upload files. This only # has an effect if the above global write enable is activated. Also, you will # obviously need to create a directory writable by the FTP user. #anon_upload_enable=YES
是否允许匿名用户上传文件,默认为YES,开启该项须设置全局的write_enable=YES。
# Uncomment this if you want the anonymous FTP user to be able to create # new directories. #anon_mkdir_write_enable=YES
是否允许匿名用户创建新文件夹,默认不启用
# Activate directory messages - messages given to remote users when they # go into a certain directory. dirmessage_enable=YES
# The target log file can be vsftpd_log_file or xferlog_file. # This depends on setting xferlog_std_format parameter xferlog_enable=YES
# Make sure PORT transfer connections originate from port 20 (ftp-data). connect_from_port_20=YES
# If you want, you can arrange for uploaded anonymous files to be owned by # a different user. Note! Using "root" for uploaded files is not # recommended! #chown_uploads=YES #chown_username=whoever
设定是否允许改变上传文件的属主,与下面设置想要改变的上传文件的属主配合使用,如果需要,则输入一个系统用户名,可以把上传的文件都改成root属主,不推荐使用root用户上传文件,whoever:任何人
# The name of log file when xferlog_enable=YES and xferlog_std_format=YES # WARNING - changing this filename affects /etc/logrotate.d/vsftpd.log #xferlog_file=/var/log/xferlog
# Switches between logging into vsftpd_log_file and xferlog_file files. # NO writes to vsftpd_log_file, YES to xferlog_file xferlog_std_format=YES
# You may change the default value for timing out an idle session. #idle_session_timeout=600
设置数据传输中断间隔时间,此语句表示空闲的用户会话中断时间为600秒,即当数据传输结束后,用户连接FTP服务器的时间不应超过600秒。可以根据实际情况对该值进行修改
# You may change the default value for timing out a data connection. #data_connection_timeout=120
设置数据连接超时时间,该语句表示数据连接超时时间为120秒,可根据实际情况对其个修改
# It is recommended that you define on your system a unique user which the # ftp server can use as a totally isolated and unprivileged user. #nopriv_user=ftpsecure
运行vsftpd需要的非特权系统用户,缺省是nobody
# Enable this and the server will recognise asynchronous ABOR requests. Not # recommended for security (the code is non-trivial). Not enabling it, # however, may confuse older FTP clients. #async_abor_enable=YES
# ASCII mangling is a horrible feature of the protocol. #ascii_upload_enable=YES #ascii_download_enable=YES
# You may fully customise the login banner string: #ftpd_banner=Welcome to blah FTP service.
# You may specify a file of disallowed anonymous e-mail addresses. Apparently # useful for combatting certain DoS attacks. #deny_email_enable=YES
#banned_email_file=/etc/vsftpd/banned_emails
当deny_email_enable=YES时,可以利用这个设定项来规定哪些邮件地址不可登录vsftpd服务器,此文件需用户自己创建,一行一个email address即可
# You may specify an explicit list of local users to chroot() to their home # directory. If chroot_local_user is YES, then this list becomes a list of # users to NOT chroot(). #chroot_local_user=YES #chroot_list_enable=YES # (default follows) #chroot_list_file=/etc/vsftpd/chroot_list
chroot_local_user 将每个本地用户放置到chroot监牢中,限制所有的本地用户在自己的家目录;
chroot_list_enable 将选中的本地用户放入到chroot监牢中。若这个值设置为YES,则检查本地用户是否列在文件/etc/vsftpd/chroot_ list中或者由chroot_list_file指定的另一个文件中。当该用户位于这个列表中,并且chroot_local_user=NO时,该用户将被放入到以他的主目录为根的chroot监牢中。此时只有列在/etc/vsftpd/chroot_list中的用户才会被放入到chroot监牢中。如果该用户位于这个列表中,并且chroot_local_user=YES,那么该用户就不会放入到chroot监牢中。未列在/etc/vsftpd/chroot_list中的用户将会被放入到chroot监牢中。
简单说:chroot_local_user开启就是限制本地所有用户只能在自己的家目录里,此时chroot_list_enable开启的话chroot_list里的用户排除在外不受此限制可以随意切换到有权限的目录;而chroot_local_user关闭chroot_list_enable开启的话时只有chroot_list里的用户会被限制在家目录,而其他用户不受此限制
#ls_recurse_enable=YES
是否允许递归查询。默认为关闭,以防止远程用户造成过量的I/O
listen=YES
#listen_ipv6=YES
设定是否支持IPV6。如要同时监听IPv4和IPv6端口,则必须运行两套vsftpd,采用两套配置文件,同时确保其中有一个监听选项是被注释掉的
pam_service_name=vsftpd
设置PAM外挂模块提供的认证服务所使用的配置文件名,即/etc/pam.d/vsftpd文件,此文件中file=/etc/vsftpd/ftpusers字段,说明了PAM模块能抵挡的帐号内容来自文件/etc/vsftpd/ftpusers中
userlist_enable=YES
tcp_wrappers=YES
是否使用tcp_wrappers作为主机访问控制方式。tcp_wrappers可以实现linux系统中网络服务的基于主机地址的访问控制,在/etc目录中的hosts.allow和hosts.deny两个文件用于设置tcp_wrappers的访问控制,前者设置允许访问记录,后者设置拒绝访问记录。如想限制某些主机对FTP服务器192.168.57.2的匿名访问,编缉/etc/hosts.allow文件,如在下面增加两行命令:vsftpd:192.168.57.1:DENY 和vsftpd:192.168.57.9:DENY。表明限制IP为192.168.57.1/192.168.57.9主机访问IP为192.168.57.2的FTP服务器,此时FTP服务器虽可以PING通,但无法连接
accept_timeout=60
设置在空闲多长时间后自动断开链接
connect_timeout=60
设置重新连接最大激活时间,断开链接后多长时间重新链接
max_clients=200
指明服务器总的客户并发连接数为200
max_per_ip=3
指明每个客户机的最大连接数为3
pasv-min-prot=protnumber pasv-max-prot=protnumber
定义最大与最小端口,为0表示任意端口;为客户端连接指明端口
listen_address=ip address
设置ftp服务来监听的地址,客户端可以用哪个地址来连接
listen_port=21
设置FTP工作的端口号,默认的为21,如需要修改FTP服务器的端口号,应尽量大于4000
userlist_deny=YES userlist_file=/etc/vsftpd/user_list
决定禁止还是只允许由userlist_file指定文件中的用户登录FTP服务器。此选项在userlist_enable选项启动后才生效。YES为默认值,禁止文件中的用户登录,同时也不向这些用户发出输入密码的提示。NO表示只允许在文件中的用户登录FTP服务器
local_root=/home/ftp
定义登录帐号的主目录, 若没有指定,每一个用户则进入到个人用户主目录,对匿名用户无效
anon_max_rate=30000
匿名用户的最大传输速度,单位是Byts/s
local_max_rate=50000
本地用户的最大传输速度,单位是Byts/s
download_enable=YES
是否允许下载
####################################
Linux交流QQ群:333212786
####################################