在企业级的应用中,越来越多的企业应用开源的vsftpd软件来搭建自己的文件共享服务,优点是速度快且节省开支。然而,企业用户行为难以预料,配置稍有不当则会使该服务成为一个安全风险点,导致带宽恶意占用、用户FTP服务密码泄露等。本文将以实例为大家介绍vsftpd的安全设置方法。

  1、vsftpd简介

  vsftpd是一个基于GPL发布的类UNIX类操作系统上运行的服务器的名字(表明它也是一种守护进程),可以运行在诸如Linux、BSD、Solaris、HP-UX及Irix上,是当前很多Linux发行套件的最新版本提供的默认FTP服务器。该服务器支持很多其他传统的FTP服务器不支持的功能,主要有如下几个显著特点:1)非常高的安全性;2)带宽限制功能;3)良好的扩展性;4)支持创建虚拟用户;5)支持IPv6;6)支持虚拟IP;7)高速、稳定。总体来说,vsftpd是Linux系统中继Wu-ftpd之后又一款优秀的、使用普遍的FTP服务器,

  2、vsftpd快速安装

  目前在主流的Linux发行版本中,如Red Hat Enterprise Linux(RHEL)、Fedora或CentOS系统上,安装vsftp很简单,这里使用CentOS作为演示来介绍。

  首先,需要登录开源分站点将vsftp的安装包下载回来(RHEL版本的操作与其相同),如下命令所示:

  #wget  htt://ftp.cica.es/CentOS/5/updates/i386/RPMS/vsftpd-2.0.5-16.el5_4.1.i386.rpm

  接着,使用rpm命令安装所需软件包:

  #rpm -ivh vsftpd-2.0.5-16.el5_4.1.i386.rpm

  值得注意的是:在运行vsftpd之前,需要确定系统的SELinux已经支持FTP读写或者SELinux为关闭状态。否则,vsftpd将无法正常运行。

  3、vsftpd快速配置

  首先,配置vsftpd需要修改vsftpd的主配置文件/etc/vsftpd/vsftpd.conf,并设定默认的匿名用户根目录:/var/ftp/。图1为安装完成后的vsftpd.conf。默认情况下匿名用户的访问是被允许的,图中的anonymous_enable=YES。

图1

  如果在配置文件末尾加上anon_upload_enable=YES和anon_mkdir_write_enable=YES。那将允许匿名用户上传文件并可以创建目录。如图2:

图2

  接着,需要切换到/var/ftp目录下建立新的文件夹xiaowang,如下命令:

  #cd /var/ftp
  #mkdir /var/ftp/xiaowang

  然后,使用如下命令启动vsftpd服务即可:

  #service vsftpd start

  其中那个pub文件夹是vsftp安装完自带的,我们暂时不用理会。

  值得注意的是:如果在命令行模式下输入ntsysv命令调出系统的面板,并在vsftpd前选上星号,并回车确认,即可以让vsftp开机启动。

  4、实例剖析安全设置

  (1)用户访问权限管理

  前面所看到的是非常简单的vsftp使用过程,基本上没做什么安全上的配置,接下来通过实例配置来介绍常规的vsftpd安全管理应该如何进行。

  为了安全起见,一个安全的vsftp服务器肯定不允许匿名登录,更不用说匿名上传和匿名删除服务器中的相关文件。那么,就需要如下一些步骤来进行用户管理,从而保证其安全。

  1)修改默认配置文件

  需要修改/etc/vsftpd/vsftpd.conf,修改为anonymous_enable=NO,如图3:

 图3

  2)使用nologin禁止FTP帐户登录Linux服务器

  目前大多数使用vsftpd的企业用户都知道这么一种默认情况: vsftp的用户可以使用本地系统帐号。也就是说。如果在这个Linux系统中有一个叫xiaowang的普通用户的话,那这个xiaowang帐号是可以登录vsftp的。初看起来,这没有什么问题,但是,通过分析我们不难得知:如果xiaowang这个FTP帐号信息被人非法获得的话,对方将可以用这个帐号远程ssh登录Linux服务器执行多种命令。这是一个较大的安全隐患。所以企业系统管理员在新建FTP用户时,需要用到nologin。

  假设这里添加一个不允许本地登录的帐号xiaowang,执行如下命令:

  #useradd -s /sbin/nologin xiaowang

  然后再用passwd命令设置密码,这样,就保证了FTP帐号将只能传输文件无法本地登录。即使帐户被丢失,黑客拿到FTP帐号也顶多只能访问FTP服务,而不可能登录到Linux服务器本地,进行更多的非法操作。

  在《实例剖析开源系统中vsftpd的安全设置方法(二)》中,我们将介绍如何使用chroot控制用户访问权限,如何限制恶意占有带宽的用户等内容。

【TechTarget中国原创】在《实例剖析开源系统中vsftpd的安全设置方法(一)》中,我们介绍到了用户访问权限管理中的使用nologin禁止FTP帐户登录Linux服务器,下面我们继续介绍如何安全配置开源系统中vsftpd。

  3)使用chroot控制用户访问权限

  假设FTP用户根目录在/ftproot/game,那我们就要在配置文件中添加local_root=/ftproot/game。然后激活chroot,编辑添加chroot_list_enable=YES,把允许访问FTP的用户加到/etc/vsftpd/chroot_list这个文件中去,即:chroot_list_file=/etc/vsftpd/chroot_list。修改后的配置文件如图4:

 图4

  值得注意的是:这里所介绍的/etc/vsftpd/chroot_list文件系统默认是没有的,需要手工创建,命令如下:

  #touch /etc/vsftpd/chroot_list
  #echo xiaowang > /etc/vsftpd/chroot_list
  #echo xiaowang1 >> /etc/vsftpd/chroot_list

  上述命令添加了两个用户,分别是xiaowang和xiaowang1。重新启动vsftpd服务即可。

  这个时候再从客户端来访问一下FTP服务器,发现需要输入用户名密码。如图5:

 图5

  下面进一步使用WinSCP这个传输工具来看看上传下载的情况如何。如图6:

 图6

  可以看到,本地的文件都传输到服务器上去了。如图7:


图7

  以上需要说明一点的是:必须先确定FTP根目录没有权限问题,否则将会出现如下问题(见图8)。如果出现该问题,可以使用chmod 757 /ftproot/game这个命令来设定权限。

 图8

  (2)如何限制恶意占有带宽的用户

  如果所在公司或单位服务器性能够强,带宽够多,带宽限制这方面的需求可能不是特别地突出。然而,如果下载量特别大,人也特别多,就有必要进行一下安全的设置。

  在vsftp中,匿名用户和本地用户的速度限制是分开的。前者是anon_max_rate,后者是local_max_rate。 它们的单位都是byte(字节)。

  如果让匿名用户和本地的用户都以最高100KB的速度下载,所以这个数字应该是1024x100=102400。在vsftpd.conf文件末尾中加入下面的两行即可:

  anon_max_rate=102400
  local_max_rate=102400

  然后重启vsftpd服务即可。

  另外,还可以限制FTP的最大连接数和每个IP的最大连接数。这两个参数分别是Max_clients和Max_per_ip。和上面一样,也只需要在vsftpd.conf文件末尾添加参数即可,如下设成了最大连接数100,每个IP的最大连接数5个:

  max_clients=100
  max_per_ip=5

  (3)如何防止FTP密码被恶意嗅探

  由于vsftpd发送的数据是以明文方式传输,尤其是密码容易被恶意的嗅探(Sniffering)到,所以企业通常会采用SSL(Secure Sockets Layer,安全套接字层)技术,配置使得vsftpd支持SSL加密传输,以此来抵御恶意嗅探攻击。

  SSL是一种国际标准的加密及身份认证通信协议,用户采用的浏览器就支持此协议。SSL最初是由美国Netscape公司研究出来的,后来成为了Internet网上安全通讯与交易的标准。比如,当IE浏览器需要通过不可靠的互联网,与服务器安全地连接时,我们通常可以看到SSL技术被使用于其中。同样,这类技术也可以灵活地运用到邮件服务或FTP服务中去。SSL协议使用通讯双方的客户证书以及CA根证书,允许客户/服务器应用以一种不能被偷听的方式通讯,在通讯双方间建立起了一条安全的、可信任的通讯通道。它具备以下基本特征:信息保密性、信息完整性、相互鉴定。该协议主要使用Hash编码、加密技术。

  使用SSL技术,依赖于另外一个软件:OpenSSL,它是一个可以自由使用的SSL实现,首先需要安装这个软件。用户可以从网站http://www.openssl.org/source/上下载Linux下OpenSSL的稳定版本,比如:openssl-0.9.8e-7.el5.i686.rpm,然后执行命令生成密钥:

  # openssl req –new –x509 –nodes –out vsftpd.pem –keyout vsftpd.pem

  接着,把生成的vsftpd.pem复制到/usr/share/ssl/certs的目录中:

  #cp vsftpd.pem /usr/share/ssl/certs/vsftpd.pem

  然后,修改/etc/vsftpd/vsftpd.conf文件。在末尾添加SSL相关配置。如图9:

 图9

  保存后重启vsftpd服务。下面就可以用客户端来尝试进行SSL加密连接了。这里使用的客户端是Core FTP,选择SSL加密登录后,会出现如下提示,如图10:

 图10

  选择Accept之后我们即可登入远程的ftp服务器。如图11:

图11

  若使用不支持SSL的客户端工具访问时有可能会出现:530 Non-anonymous sessions must use encryption.的错误提示。所以提醒用户尽量选择flashfxp或CoreFtp这类的多功能客户端。

  到这里为止,采用SSL机制保护下的vsftpd就算配置完成了。其中DES-CBC3-SHA是默认的加密方式,用户可以修改“ssl_ciphers=xxx”的方式来选择想要的加密方式。关于vsftpd对SSL的支持选项设置,可以参见表1。

主要选项

功能

ssl_enable

是否启用 SSL,默认为no

allow_anon_ssl

是否允许匿名用户使用SSL,默认为no

rsa_cert_file

rsa证书的位置

dsa_cert_file

dsa证书的位置

force_local_logins_ssl

非匿名用户登陆时是否加密,默认为yes

force_local_data_ssl

非匿名用户传输数据时是否加密,默认为yes

force_anon_logins_ssl

匿名用户登录时是否加密,默认为no

force_anon_data_ssl

匿名用户数据传输时是否加密,默认为no

ssl_sslv2

是否激活sslv2加密,默认no

ssl_sslv3

是否激活sslv3加密,默认no

ssl_tlsv1

是否激活tls v1加密,默认yes

ssl_ciphers

默认是DES-CBC3-SHA

表1

前两部分文章(http://www.2cto.com/Article/201112/114141.html)详细的介绍了如何进行sftpd的安全设置方法,最后我们总结一下vsftpd的配置清单。
  (4)一个完整的vsftpd高级配置清单
  为了使用户更加清晰地了解vsftpd的安全配置方法,下面给出一个完整的vsftpd高级配置清单及其注释,供用户在实际的配置中参考使用。
  Part I:基本登录和权限配置部分
  Anonymous_enable=yes(允许匿名登录)
  Dirmessage_enable=yes (切换目录时,显示目录下.message的内容)
  Local_umask=022(FTP上本地的文件权限,默认是077)
  Connect_form_port_20=yes (启用FTP数据端口的数据连接)
  Xferlog_enable=yes (激活上传和下传的日志)
  Xferlog_std_format=yes(使用标准的日志格式)
  Ftpd_banner=XXXXX (欢迎信息)
  Pam_service_name=vsftpd (验证方式)*
  Listen=yes (独立的VSFTPD服务器)*
  Anon_upload_enable=yes(开放上传权限)
  Anon_mkdir_write_enable=yes (可创建目录的同时可以在此目录中上传文件)
  Write_enable=yes(开放本地用户写的权限)
  Anon_other_write_enable=yes(匿名帐号可以有删除的权限)
  Anon_world_readable_only=no(放开匿名用户浏览权限)
  Ascii_upload_enable=yes(启用上传的ASCII传输方式)
  Ascii_download_enable=yes(启用下载的ASCII传输方式)
  Part II:FTP连接控制部分
  Banner_file=/var/vsftpd_banner_file(用户连接后欢迎信息使用的是此文件中的相关信息)
  Idle_session_timeout=600(秒) (用户会话空闲后10分钟)
  Data_connection_timeout=120(秒) (将数据连接空闲2分钟断)
  Accept_timeout=60(秒) (将客户端空闲1分钟后断)
  Connect_timeout=60(秒) (中断1分钟后又重新连接)
  Local_max_rate=50000(bite) (本地用户传输率50K)
  Anon_max_rate=30000(bite) (匿名用户传输率30K)
  Pasv_min_port=50000
  Pasv_max_port=60000(将客户端的数据连接端口改在50000—60000之间)
  Max_clients=200 (FTP的最大连接数)
  Max_per_ip=4 (每IP的最大连接数)
  Listen_port=5555 (从5555端口进行数据连接)
  Part III:本地帐户权限控制部分
  Local_enble=yes (本地帐户能够登录)
  Write_enable=no (本地帐户登录后无权删除和修改文件)
  Userlist_enable=yes (在指定的文件中的用户不可以访问)
  Userlist_deny=yes
  Userlist_file=/指定的路径/vsftpd.user_list
  Banner_fail=/路径/文件名 (连接失败时显示文件中的内容)
  Ls_recurse_enable=no
  Async_abor_enable=yes
  One_process_model=yes
  Listen_address=10.2.2.2 (将虚拟服务绑定到某端口)
  Part III:虚拟用户权限控制部分
  Guest_enable=yes (虚拟用户可以登录)
  Guest_username=所设的用户名 (将虚拟用户映射为本地用户)
  User_config_dir=/任意指定的路径/为用户策略自己所建的文件夹
(指定不同虚拟用户配置文件的路径)
  Part IV:其他配置部分
  Chown_uploads=yes (改变上传文件的所有者为root)
  Chown_username=root
  Deny_email_enable=yes (是否允许禁止匿名用户使用某些邮件地址)
  Banned_email_file=//任意指定的路径/xx/
  Pasv_enable=yes (服务器端用被动模式)
  User_config_dir=/任意指定的路径//任意文件目录 (指定虚拟用户存放配置文件的路径)

【TechTarget中国原创】

VSFTP基线安全的更多相关文章

  1. VSFTP安全加固

    这几天在公司需要做基线安全,一直都没有经验,所以在网上找了一些,做来参考学习. vsftp配置详解 这里是对vsftp配置文件的详细解释,主要参考了<RedHat8.0网络服务>一书中&l ...

  2. Centos6.5中安装和配置vsftp详细总结

    一.vsftp安装篇 #查看是否安装:rpm -qa|grep vsftpd#卸载vsftpdrpm -e vsftpd-2.2.2-11.el6_3.1x86_64 --nodeps# 安装vsft ...

  3. asp.net core 简单部署之FTP配置(CentOS 7.0安装配置Vsftp服务器)

    配置过程原文地址:http://www.osyunwei.com/archives/9006.html 坑和结果 正确的跟着这个内容走,是靠谱的. 我自己给自己踩了个坑,请参照文章的朋友注意第七条:七 ...

  4. vsftp简单学习思考

    FTP的全称是File Transfer Protocol(文件传输协议),就是专门用来传输文件的协议.它工作在OSI模型的第七层,即是应用层,使用TCP传输而不是UDP这样FTP客户端和服务器建立连 ...

  5. CentOS 7.0安装配置Vsftp服务器

    一.配置防火墙,开启FTP服务器需要的端口 CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙. 1.关闭firewall: systemctl stop fi ...

  6. SQL Server基线算法(同比和环比)

    基线介绍 基线为历史数据统计而成的数据,具有参考价值,并利用基线数据与当前值的对比,通过一定的报警机制,形成实时监控架构.SQL Server计数器采用同比和环比两种方式. 同比:可以计算未来一周的基 ...

  7. 大数据系列(4)——Hadoop集群VSFTP和SecureCRT安装配置

    前言 经过前三篇文章的介绍,已经通过VMware安装了Hadoop的集群环境,当然,我相信安装的过程肯定遇到或多或少的问题,这些都需要自己解决,解决的过程就是学习的过程,本篇的来介绍几个Hadoop环 ...

  8. Centos安装vsftp服务

    1.安装vsftp yum install vsftpd 2.开启vsftp服务,设置开机自启 service vsftpd restart chkconfig vsftpd on 停止vsftpd: ...

  9. Linux系统Vsftp 传文件出现 553 Could Not Create File错误的解决方法

    解决方法: 登录出现了这个错误提示:553 Could not create file SELinux设置如下 查看SELinux设置 [root@localhost ~]# getsebool -a ...

随机推荐

  1. Entity Framework 无法对没有主键的视图映射实体的解决办法

    我们在使用Entity Framework的时候经常会把数据库中的某一个视图映射为EF的实体,但是如果数据库视图中的列没有包含表的主键列,EF会报出警告说视图没有主键,导致视图映射为实体失败,错误如下 ...

  2. NOIP201405生活大爆炸版石头剪刀布

    NOIP201405生活大爆炸版石头剪刀布 试题描述 石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头.如果两个人出拳一 样,则不分胜负.在<生活大爆炸>第二季第 8 集中出现了 ...

  3. 转:redis常用命令

    一 Redis介绍 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发 ...

  4. 在使用Myeclipse时,用Tomcat添加部署项目的时候报错,或启动tomcat报错

    the selected server is enabled,but is not configured properly.deployment to it will not be permitted ...

  5. 虚拟机 本地 本机 双启动 运行 vhd local Dual Boot

    在使用虚拟机的过程中, 可能会遇到虚拟机的运行要求过高, 电脑力不从心的情况. 为了让虚拟机使用更多电脑资源, 可以让虚拟机以本地双系统的方式,访问本地计算机资源. 打开磁盘管理,在磁盘上右键,选择 ...

  6. 利用python进行数据分析 (学习笔记)

    第一章:准备工作 1.重要的Python库 (1)NumPy:Python科学计算的基础包.功能有:

  7. require()与 require_once()、 include与include_once()

  8. C#:只运行一个程序

    一.通过系统事件 1.实现如下: using System; using System.Collections.Generic; using System.Linq; using System.Tex ...

  9. apache支持中文域名绑定,apache支持中文域名绑定,教你怎样让apache支持中文域名绑定

    摘要:apache支持中文域名绑定,apache支持中文域名绑定,教你怎样让apache支持中文域名绑定,根据本人实际经验,叫你如何让apache支持中文域名绑定,绝对管用的让apache支持中文域名 ...

  10. 关于hibernate对应关系之后取值的问题

    hibernate对应关系之后取值,比如一对一关系,取不到值,需要检查PO类中是否生成了getter及setter方法.