RHEL6基础四十六之RHEL文件服务器VSFTP简介

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服务:

1
2
3
4
5
6
7
8
9
10
11
12
[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端口开放:

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
[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服务启动:

1
2
3
4
5
6
7
8
9
10
[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服务配置文件说明:

1
2
3
4
5
[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主配置文件,

1
2
3
4
5
[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

匿名用户的下载目录

/etc/logrotate.d/vsftpd.log

vsftpd的日志文件

ftpusers不受任何配制项的影响,它总是有效,它是一个黑名单!该文件存放的是一个禁止访问FTP的用户列表,通常为了安全考虑,管理员不希望一些拥有过大权限的帐号(比如root)登入FTP,以免通过该帐号从FTP上传或下载一些危险位置上的文件从而对系统造成损坏。

user_list则是和vsftpd.conf中的userlist_enable和userlist_deny两个配置项紧密相关的,它可以有效,也可以无效,有效时它可以是一个黑名单,也可以是一个白名单!

ftpusers和user_list没有任何关系,ftpusers文件总是生效,user_list则取决于userlist_enable和userlist_deny两项配置。


主配置文件/etc/vsftpd/vsftpd.conf里的各项参数作用文件里都有注释说明:

1
2
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=YES

是否允许匿名登录FTP服务器,默认设置为YES即允许,用户可使用用户名ftp或者anonymous登陆,密码为空,如不允许匿名访问则设置为NO

1
2
# Uncomment this to allow local users to log in.
local_enable=YES
是否允许本地用户(即linux系统中的用户帐号)登录FTP服务器,默认设置为YES允许,本地用户登录后默认只能访问自己的主目录,且具有读写权限,而不是vsftpd的主目录/var/ftp/,而匿名用户登录后进入匿名用户的下载目录/var/ftp/pub,若只允许匿名用户访问,前面加上#注释掉即可阻止本地用户访问FTP服务器
1
2
# Uncomment this to enable any form of FTP write command.
write_enable=YES

是否允许本地用户对FTP服务器文件具有写权限,默认设置为YES允许,这项设置只是一个开关,要使匿名用户或系统用户具有写入权限,还得进行其它的设置。

1
2
3
# 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,也可根据个人喜好将其设置为其他值

1
2
3
4
# 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。

1
2
3
# Uncomment this if you want the anonymous FTP user to be able to create
# new directories.
#anon_mkdir_write_enable=YES

是否允许匿名用户创建新文件夹,默认不启用

1
2
# You may fully customise the login banner string:
ftpd_banner=Welcome to blah FTP service.

登录FTP服务器时显示的欢迎信息,如有需要,可在更改目录欢迎信息的目录下创建名为.message的文件,并写入欢迎信息保存后

1
dirmessage_enable=YES

当切换目录时,显示该目录下.message隐藏文件的内容。默认情况下有message_file=.message

1
banner_file=/etc/vsftpd/banner_file

登录服务器成功后显示/etc/vsftpd/banner_file的信息。

1
banner_fail=/etc/vsftpd/banner_fail

登录服务器失败后显示/etc/vsftpd/banner_fail的信息。


1
2
3
4
# Activate directory messages - messages given to remote users when they
# go into a certain directory.
dirmessage_enable=YES
message_file=.message

是否激活目录欢迎信息功能,当用户用CMD模式首次访问服务器上某个目录时,FTP服务器将显示欢迎信息,默认情况下,欢迎信息是通过家目录下的.message文件获得的,此文件保存自定义的欢迎信息直接vim .message,由用户自己建立.FTP信息默认的就是.message,所以可以不加 message_file= 来指定


如果设置了ftp_banner=的值,登录服务器将覆盖vsftpd默认的连接后的信息。l如果同时设置了ftp_banner=和banner_file=,那么banner_file将覆盖ftp_banner=的值

1
2
3
# The target log file can be vsftpd_log_file or xferlog_file.
# This depends on setting xferlog_std_format parameter
xferlog_enable=YES
是否让系统自动维护上传和下载的日志文件,默认情况该日志文件为/var/log/vsftpd.log,也可以通过xferlog_file选项对其进行设定,默认值为NO
1
2
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES
是否设定FTP服务器将启用FTP数据端口的连接请求,ftp-data数据传输,21为连接控制端口
1
2
3
4
5
# 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:任何人

1
2
3
# 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

设定系统维护记录FTP服务器上传和下载情况的日志文件,/var/log/vsftpd.log是默认的,也可以另设其它
1
2
3
# 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
是否以标准xferlog的格式书写传输日志文件,默认为/var/log/xferlog,也可以通过xferlog_file选项对其进行设定
1
2
# You may change the default value for timing out an idle session.
#idle_session_timeout=600

设置数据传输中断间隔时间,此语句表示空闲的用户会话中断时间为600秒,即当数据传输结束后,用户连接FTP服务器的时间不应超过600秒。可以根据实际情况对该值进行修改

1
2
# You may change the default value for timing out a data connection.
#data_connection_timeout=120

设置数据连接超时时间,该语句表示数据连接超时时间为120秒,可根据实际情况对其个修改

1
2
3
# 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

1
2
3
4
# 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
是否识别异步ABOR请求,如果FTP client会下达“async ABOR”这个指令时,这个设定才需要启用,而一般此设定并不安全,所以通常将其取消
1
2
3
# ASCII mangling is a horrible feature of the protocol.
#ascii_upload_enable=YES
#ascii_download_enable=YES
是否以ASCII方式传输数据。默认情况下,服务器会忽略ASCII方式的请求,启用此选项将允许服务器以ASCII方式传输数据,不过,这样可能会导致由"SIZE /big/file"方式引起的DoS攻击
1
2
3
# You may specify a file of disallowed anonymous e-mail addresses. Apparently
# useful for combatting certain DoS attacks.
#deny_email_enable=YES
黑名单设置。如果很讨厌某些email address,就可以使用此设定来取消他的登录权限,可以将某些特殊的email address抵挡住。
1
#banned_email_file=/etc/vsftpd/banned_emails

当deny_email_enable=YES时,可以利用这个设定项来规定哪些邮件地址不可登录vsftpd服务器,此文件需用户自己创建,一行一个email address即可

1
2
3
4
5
6
7
# 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里的用户会被限制在家目录,而其他用户不受此限制

1
#ls_recurse_enable=YES

是否允许用户使用ls –R递归列表比较占用系统资源,以防止远程用户造成过量的I/O

1
dirlist_enable=YES

是否允许用户使用dir、ls 之类得列目录命令。

1
download_enable=YES

是否允许用户下载文件

1
write_enable=YES

是否允许用户上传(包括本地用户、匿名用户上传的前提条件)

1
deny_file={*.exe,*.dll}

设置不允许传输的文件类型{}包括上传下载。




1
listen=YES

是否允许监听。如果设置为YES,则vsftpd将以独立模式运行,由vsftpd自己监听和处理IPv4端口的连接请求

1
2
pasv_min_port=30001
pasv_max_port=31000

设置被动连接时客户端连接时的端口范围,传输数据的端口范围就在30001到31000 这个范围内传送

1
#listen_ipv6=YES

设定是否支持IPV6。如要同时监听IPv4和IPv6端口,则必须运行两套vsftpd,采用两套配置文件,同时确保其中有一个监听选项是被注释掉的

1
pam_service_name=vsftpd

设置PAM外挂模块提供的认证服务所使用的配置文件名,即/etc/pam.d/vsftpd文件,此文件中file=/etc/vsftpd/ftpusers字段,说明了PAM模块能抵挡的帐号内容来自文件/etc/vsftpd/ftpusers中

1
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通,但无法连接


1
use_localtime=YES

是否使用本地时间?默认使用GMT时间,文件时间比中国晚8个小时,建议设置为YES


1
accept_timeout=60

设置在空闲多长时间后自动断开链接

1
connect_timeout=60

设置重新连接最大激活时间,断开链接后多长时间重新链接

1
max_clients=200

指明服务器总的客户并发连接数为200

1
max_per_ip=3

指明每个客户机的最大连接数为3

1
2
pasv-min-prot=protnumber
pasv-max-prot=protnumber

定义最大与最小端口,为0表示任意端口;为客户端连接指明端口

1
listen_address=ip address

设置ftp服务来监听的地址,客户端可以用哪个地址来连接

1
listen_port=21

设置FTP工作的端口号,默认的为21,如需要修改FTP服务器的端口号,应尽量大于4000

1
2
3
userlist_enable=YES
userlist_deny=YES
userlist_file=/etc/vsftpd/user_list

userlist_enable和userlist_deny两个选项联合起来针对的是:本地全体用户(除去ftpusers中的用户,这个文件中的用户始终是被禁止登陆的)和出现在user_list文件中的用户以及不在在user_list文件中的用户这三类用户集合进行的设置。

若userlist_enable项设为YES,则只允许user_list文件中的用户允许登录FTP服务器,文件中不包含的用户不能登陆,

userlist_enable项设置为NO,则不允许usrlist_file文件中的用户登录FTP服务器,

而如果同时设置了userlist_deny=YES,则user_list文件是个黑名单,其中的用户将不允许登录FTP服务器,甚至连输入密码提示信息都没有,而userlist_deny=NO,user_list文件是个白名单,其中的用户将允许登录FTP服务器,当且仅当userlist_enable=YES时,userlist_deny项的配置才有效,user_list文件才会被使用。当userlist_enable=NO时,无论userlist_deny项为何值都是无效的,本地全体用户(除去ftpusers中的用户)都可以登入FTP。



决定禁止还是只允许由userlist_file指定文件中的用户登录FTP服务器。此选项在userlist_enable选项启动后才生效。YES为默认值,禁止文件中的用户登录,同时也不向这些用户发出输入密码的提示。NO表示只允许在文件中的用户登录FTP服务器

1
local_root=/home/ftp

定义登录帐号的主目录, 若没有指定,每一个用户则进入到个人用户主目录,对匿名用户无效

1
anon_max_rate=30000

匿名用户的最大传输速度,单位是Byts/s

1
local_max_rate=50000

本地用户的最大传输速度,单位是Byts/s

1
download_enable=YES

是否允许下载


FTPS配置参数

1
ssl_enable=YES

指定vsftpd支持加密协议

1
2
3
ssl_sslv2=YES
ssl_sslv3=YES 
ssl_tlsv1=YES

指定vsftpd支持安全套接字层v2,v3,tls加密方式v1

1
force_local_logins_ssl=YES

强制本地用户和虚拟用户 ssl 加密登录

1
force_local_data_ssl=YES
1
rsa_cert_file=/etc/vsftpd/.sslkey/vsftp.pem

指定证书存放位置

1
allow_anon_ssl=YES

允许匿名用户ssl加密登录





本文转自 justin_peng 51CTO博客,原文链接:http://blog.51cto.com/ityunwei2017/1345689,如需转载请自行联系原作者

上一篇:C#模拟MSN窗体抖动


下一篇:【Linux】Ubuntu13.10搭建gitlab报错信息及解决