[134期]VSFTP服务的日常应用及疑难问题解析

企业动态
本期门诊主要内容就是讨论VSFTP在实际使用环境中遇到的各种问题,以及如何与整体网络环境融合,服务器和数据安全等问题。希望本次门诊能让大家充分利用VSFTP的性能,降低VSFTP服务器的安全风险,解决大家平时遇到的疑难问题。

VSFTP是一个基于GPL发布的类Unix系统上使用的FTP服务器软件,它的全称是Very Secure FTP ,从此名称可以看出来,编制者的初衷是代码的安全。安全性是编写VSFTP的初衷,除了这与生俱来的安全特性以外,高速与高稳定性也是VSFTP的两个重要特点。在速度方面,使用ASCII代码的模式下载数据时,VSFTP的速度是Wu-FTP的两倍,如果Linux主机使用2.4.*的内核,在千兆以太网上的下载速度可达86MB/S。在稳定方面,VSFTP就更加的出色,VSFTP在单机(非集群)上支持4000个以上的并发用户同时连接,根据Red Hat的Ftp服务器(ftp.redhat.com)的数据,VSFTP服务器可以支持15000个并发用户

VSFTP集合了高效易配置易管理、高安全性为一身,市场应用十分广范,很多国际性的大公司和自由开源组织在使用,如:Red Hat, Suse,Debian,OpenBSD。

本期门诊主要内容就是讨论VSFTP在实际使用环境中遇到的各种问题,以及如何与整体网络环境融合,服务器和数据安全等问题。希望本次门诊能让大家充分利用VSFTP的性能,降低VSFTP服务器的安全风险,解决大家平时遇到的疑难问题。

技术门诊是51CTO社区品牌栏目,每周邀请一位客座专家,为广大技术网友解答疑问。从热门技术到前沿知识,从技术答疑到职业规划。每期一个主题,站在最新最热的技术前沿为你引航!

本期技术门诊我们邀请到微软最有价值专家(MVP),高级讲师宋杨、王旭忠两位专家。以linux下vsftp为讨论点,和大家讨论交流vsftp配置管理中遇到的问题及相应的解决方案。

姓  名:宋杨

擅长领域:服务器,网络

微软最有价值专家(MVP),网络技术高级讲师。熟悉Windows / Linux服务搭建,广域网技术,Voip,Cisco / 华为网络技术。多年大型企业网站建设及系统集成经验。擅长ERP、CRM系统部署,曾长期致力于汽车服务行业的信息化解决方案。有着丰富的微软及 Sap公司系统产品实施及部署经验。项目经验:成功整合过Windows、IBM、SAP、腾讯E、用友、绍兴卓越软件,北京易车等知名国内外信息化系统。一汽大众大SAP系列行业项目,华晨金杯售后服务信息化项目,郑州日产ERP /CRM项目、上汽奇瑞ERP项目等。

姓  名:王旭忠

擅长领域:Linux/Windows服务器,Exchang,SQL server,Oracle,各种防火墙

linux服务高级讲师。有三年基于unix平台的操作系统定制,三年ISP大型网络规划设计项目经验。曾担任高新项目部技术主管,参与Coventive XLinux 操作系统网络部分软件开发及整合,参与公司网络部分案例的软硬件方案设计及实施,参与MNARA旗下Kebi.co.kr(韩国最大论坛)邮件系统提供网站建设。

查看本期门诊精彩实录:http://doctor.51cto.com/develop-147.html

参与最新技术门诊:http://doctor.51cto.com/

精选本期网友提问与专家解答,以供网友学习参考。

Q:请问VSFTP与MYSQL结合,用MYSQL增加与管理访问虚拟的用户,配置过程应如何操作?

A:主要配置如下:
1.设置VSFTPd配置文件
  在vsftpd.conf文件中,加入以下选项:
  guest_enable=YES
  guest_username=vuser
    修改的pam_service_name=ftp
2.mysqladmin -u root password 'passw0rd'
  mysql -u root -p'passw0rd'
  mysql>create database vuser;
  mysql>use vuser;
  mysql>create table users(name char(16) binary,passwd char(16) binary);
  mysql>quit
3.设置MySQL的PAM验证
  mysql进行pam验证的开源项目(http://sourceforge.net/projects/pam-mysql/)。首先从网站下载它的程序包pam_myql-0.5.tar.gz,复制到/root目录中。在编译安装之前,要确保mysql-devel的RPM包已经安装在你的机器上,如果没有请从RHL安装光盘中安装该包。然后,执行以下命令:
  [root@hpe45 root]#tar xvzf pam_mysql-0.5.tar.gz
  [root@hpe45 root]#cd pam_mysql
  [root@hpe45 pam_mysql]#make
  [root@hpe45 pam_mysql]#make install
  make install这一步可能会出现错误,那只好手动将该目录下生成的pam_mysql.so复制到/lib/security目录下。
  接下来,我们要设置VSFTPd的PAM验证文件。打开/etc/pam.d/ftp文件,加入以下内容:
  auth required pam_mysql.so user=root passwd=passw0rd host=localhost db=vuser table=users
usercolumn=name passwdcolumn=passwd crypt=2
  account required pam_mysql.so user=root passwd=passw0rd host=localhost db=vuser
table=users usercolumn=name passwdcolumn=passwd crypt=2
  上面涉及到的参数,只要对应前面数据库的设置就可以明白它们的含义。这里需要说明的是crypt参数。crypt表示口令字段中口令的加密方式:crypt=0,口令以明文方式(不加密)保存在数据库中;crypt=1,口令使用UNIX系统的DES加密方式加密后保存在数据库中;crypt=2,口令经过MySQL的password()函数加密后保存。
5.其余配置可以和虚拟用户配置一样,就是使用pam-mysql来进行虚拟用户的用户添加。比较简单。

Q:老师好!我在使用service vsftpd stop命令时无法关闭ftp服务,显示如下信息:
Shutting down vsftpd: [FAILED]
查看状态信息如下:
# service vsftpd status
vsftpd dead but subsys locked
请问应该如何解决?
问题补充:删除文件/var/lock/subsys/vsftpd 能把服务停止,但是再次启动vsftpd服务后的状态还是:vsftpd dead but subsys locked
A:首先用命令netstat -tlunp|grep 21检查有没有其他的FTP SERVER工作,结果如下:
再看grep -i ftp /etc/xinetd.d/*结果如下:
修改/etc/xinetd.d/gssftp这个文件,disable = no改成disable = yes。然后,重启xinetd,service xinetd restart,再重启动vsftpd, service vsftpd restart

Q:两位专家:如何设置vsftpd使之可以将特定用户限制在特定的目录内?

A:方法1:adduser -d 目录 用户名  ,在/etc/vsftpd/vsftpd.conf中加入chroot_local_user=YES (禁锢所有用户的/目录为属主目录)。
方法2: adduser -d 目录 用户名   修改/etc/vsftpd/vsftpd.conf中的chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list (vsftpd.chroot_list文件内写入的用户就限禁锢用户的/目录为属主目录),vi /etc/vsftpd.chroot_list 加入你要限制的用户的用户名称即可。

Q:专家好!我新增一位使用者 test 加目录 test 。使用cuteftp可以连上,也可以上传及下载文档,但是对 /var/ftp/pub反而是可以下载却无法上传,此folder权限设为777. 我使用RPM裝FC5中的VSFTP 。谢谢专家了!

A:修改vsftpd.conf,匿名用户创建文件 anon_upload_enable=YES ,匿名用户创建目录 anon_mkdir_write_enable=YES,是否允许匿名用户登录后执行其他操作(删除重命名等)anon_other_write_enable=YES  
注意:/var/ftp不能出现other为w,否则ftp匿名无法登陆。

Q:我想请问专家:在vsftpd中怎么限制IP地址。比如只要某个IP或IP段访问我的FTP,应该怎么配置,是在vsftp.conf中配置还是另外哪个配置文件里?请专家帮我一下。

A:使用Vsftpd+tcp_wrappers控制主机和用户访问tcp-wrappers的执行顺序:
先执行hosts.allow,如果hosts.allow里面有名单,则允许名单内的机子访问;否则,则向下寻找hosts.deny,如果hosts.deny里面有名单,则拒绝名单内的机子访问,如果也没有(即allow和deny里面都没有名单)则允许该主机访问。在主机(192.168.1.102)上配置vsftpd服务,使得除了192.168.1.100以外允许192.168.1.0/24网段的其他主机访问此FTP服务。
  编辑/etc/hosts.allow
  vsftpd:192.168.1.100:DENY
  vsftpd:192.168.1.
  重启vsftpd,可达到目的

   编辑/etc/hosts.deny
   vsftpd:192.168.1.100
   编辑/etc/hosts.allow
   vsftpd:192.168.1.

Q:宋老师,王老师:
linux配置vsftpd服务,配好之后root无法登陆。本地测试显示如下:
[root@viv ~]# ftp 127.0.0.1
Connected to 127.0.0.1.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (127.0.0.1:root): root
530 Permission denied.
Login failed.
远程登陆同样报错:
530 Permission denied.
Login failed.
还有一个问题:为什么我的本地账户都无法登陆了,均显示错误:530 login incorrect。希望老师帮帮忙,谢谢啦!

A: root用户默认是被禁止登陆vsftpd的服务器的。方法1.去掉/etc/vsftpd.ftpusers里面的root用户。修改vsftpd.conf里面userlist_enable=YES,userlist_deny=NO,重启服务即可。方法2.去掉/etc/vsftpd.ftpusers里面的root用户。去掉/etc/vsftpd.user_list里面的root用户。登录即可。

Q:老师,在做vsftp的时候,为什么一定要关了selinux,设置成disabled,除了不设置,还有其他的办法吗?还有关于selinux能不能详细的说一下呢?  谢谢了!
附:setsebool -P ftp_home_dir 1 这个命令就可以不用关了selinux了么?

A:这常常是因为SELinux不允许vsftpd线程访问用户主目录造成的。解决方法为:
使用root用户登录,然后执行以下命令来赋予权限:
setsebool -P ftp_home_dir 1
然后重启vsftpd服务:
service vsftpd restart
使用用户登录即可
SELinux(Security-Enhanced Linux) 是美国国家安全局(NAS)对于强制访问控制的实现,是 Linux上最杰出的新安全子系统。NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。说下概念吧。SELinux牵扯的东西很多。这次不详细说了,什么时候可以做个SELinux的门诊再说。

Q:我不想让vsftp默认路径是 pub,怎么让默认路径改为根目录 /  ?最好能指导我怎么修改配置文件的办法。vsftpd.conf中间有句话chroot_list_file=/etc/vsftpd.chroot_list是不是修改这个?谢谢老师了!

A:在vsftpd.conf中加anon_root=/var/www,另外检查下权限然后 重起 vsftpd
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list (vsftpd.chroot_list文件内写入的用户就禁锢用户的/目录为属主目录)

Q:感觉VSFTP配置起来还是挺简单的,再深入一点不知道还能实现什么功能?

A:vsftpd大家用的也只是平常的东西,深入功能很多的:
1.证书支持
2.虚拟用户和数据库的结合实现数万及更多用户访问及统计等
3.用户详细权限设置
4.支持大量数据访问的调优
5.数据流量的控制

Q:请问老师vsftp在配置过程中如何能做到:
1、只能上传。不能下载、删除、重命名。
2、只能下载。不能上传、删除、重命名。
3、只能上传、删除、重命名。不能下载。
4、只能下载、删除、重命名。不能上传。
以下是我关于这四个问题的文章,请老师指点:
http://xudeqiang.blog.51cto.com/224075/170040

A:你只写了办法挺独到的,其实用虚拟用户来做比较常用一些。那样更加好控制用户

Q:VSFTP需要的硬件配置如何?和Windows server 2003的文件服务器来说,两者的优点分别是?

A: 王老师:vsftpd根据linux所使用的版本来定的。最低要求cpu 66Hz以上,内存16M以上就可以了。windows文件服务器比较适合于局域网内部使用,ftp服务对interne和局域网内使用都可以,而且ftp比windows文件服务器有更多的控制,比如每用户流量限制等

A:宋老师:主要是看你的应用,vsftp灵活性强,所以在局域网环境和互联网中都可以应用。换句话说:看你的用户数量和使用场景来选择物理服务器的配置,ftp服务关心的硬件只有三个CPU(处理效率)、内存(增加ftp业务的应付处理性能)、硬盘(存储空间),最低配置王老师已经给了,我省了 嘎嘎。高配服务器,建议不要配置太大的内存,多了反而浪费。我重点说说应用场景好了:
windows server 2003 的文件服务器主要应用场景是小型局域网(广播域越小,效率越高),他是基于SMB实现的,通过端口445实现数据连接。在局域网内20台以下PC的应用场景中是比较可观的,但,PC一旦过多就会大大降低应用效率,因为SMB的数据连接是采用广播定位服务器的方式工作的,我们很熟悉的netbios协议就是这样通过139端口定位服务器的。所以局域网内PC越多(主要是对文件服务器的访问越频繁)广播就越多,从而应用效率降低。(补充:也有的公司,使用VPN在互联网访问远程分支机构的文件服务器,这样的应用也是可以的。)而ftp则是单播实现的,所以对局域内通讯没有太大的影响。而且在pc台数过多的情况下可以正常应付大量的业务访问。所以在比较大规模的企业应用场景,多选择FTP作为实现文件服务的手段,而兼高效、廉价、安全、易管理配置于一身的VSFTP就更适合了。互联网就更不用说了。很多软件公司checkin的时候都是使用FTP+安全验证机制来实现的。

Q:vsftp 客户端是win xp,如何解决客户端乱码问题?

A: 修改linux编码为xp的编码就好了,方法如下
1.修改/etc/sysconfig/i18n内容为
LANG="zh_CN.GB2312"
SUPPORTED="zh_CN.GB2312"
2.执行
export LANG=zh_CN.GB2312
export LC_ALL=zh_CN.GB2312

Q:老师您好,我想请教一下,我前两天做了个试验,通过机器A的VMWARE进行虚拟Linux,开启SAMBA和VSFTP,然后又在机器B的VMWARE上光盘BOOT启动linux askmethod,通过FTP方式安装,总是无法安装成功。但在机器C直接安装就没有问题,并且在B/C机器上测试FTP功能也正常。不知道是不是FTP不支持双VMWARE呢还是有其他的原因,麻烦老师了!注:SAMBA和VSFTP的设置都是最基础的那种,没有权限,允许匿名登陆也可以实体登陆。

A:你最好检查一下你的vmware的B到A的网络配置,要是服务器有问题,C是无法安装的。

Q:老师好,我想问的是VSFTP的权限问题,怎么限制用户具体上传文件的大小,怎么限制根据下载上传的次数,适当的给予一定的权限的提升?谢谢老师!

A:解答第一个问题:用户上传的文件大小和空间存放大小可以使用Quota进行处理。解答第二个问题:修改vsftpd.conf配置文件中的xferlog_enable=YES (打开流量日志功能)xferlog_file=/var/log/vsftpd.log (日志文件存放地点),分析vsftpd.log文件中某文件的用户下载次数,上传次数进行程序控制即可。比如发现日志出现a用户下载xxx.rar文件出现3次,则xxx.rar文件权限为000。

Q:看专家的解答真的很细心,很耐心。我想请教一个问题,我的vsftpd使用的是anonymous_enable=NO,使用的用户的登录,当时每次登陆都会等很久,大概10秒左右。于是我去抓包分析原因,发现client端会先使用匿名用户登录一次,被拒绝以后,才使用输入的ID,这个是怎么回事?想了很多办法,没有解决,我就没管他了,但是后来自己又好了。相当郁闷啊。能请专家分析下原因吗?

A:其实这个问题是您所使用的客户端软件中存在缓存或者记录造成的,与服务器没有关系的。

Q:老师:为什么通过VSFTP上传文件后,文件内容的头部都会被添加进去一些代码,而且有什么上传到服务器上的文件大小和这个文件在我本机的大小是不一样的,差的很多。

A: 在传输文件的时候分为文本方式和ASCII方式,如果一个二进制文件(.exe)所使用的是默认文本方式就会被加东西的,你需要选择为ASCII方式即可。

Q:还有一个问题是关于下载的线程和速度的限制。在公网上分享资源,比如一个游戏客户端,这种情况线程和速度应该如何限制,我意思是一个ip给多少线程多少带宽为宜。

A: 一般每ip 5个线程,带宽64K。

Q:接11楼问题:当我们修改/etc/sysconfig/i18n 这个文件。比如原来是zh_CN.UTF-8 修改成 zh_CN.GB2312,这个时候 客户端问题没有了!可是在服务器上我们执行service XXX restart 的时候提示都是乱码 如何处理呢(我在Gnome环境)?

A:选择GNOME环境的登录语言为zh_CN.GB2312就好了

Q:现在vsftpd不知怎么可以做每个用户的磁盘配额。老师指点下。

A: 使用Quota来进行限制。第一步 让分区支持Quota(包含boot目录的分区不要做,出错)
[root@linux ~]# vi /etc/fstab
LABEL=/ / ext3 defaults 1 1
LABEL=/disk1 /disk1 ext3 defaults 1 2
LABEL=/disk2 /disk2 ext3 defaults,usrquota,grpquota 1 2
/dev/hda3 swap swap defaults 0 0
注意到我们所需要设定的那个/disk2的那一行,在第四字段多了usrquota,grpquota注意,在『defaults,usrquota,grpquota』之间都没有空格!
第二步 重启,让修改生效
第三步 生成quota支持文件
[root@linux ~]# quotacheck -avug
quotacheck: Scanning /dev/hdb1 [/disk2] done
quotacheck: Checked 3 directories and 4 files
[root@linux ~]# ll /disk2
-rw------- 1 root root 6144 Sep 6 11:44 aquota.group
-rw------- 1 root root 6144 Sep 6 11:44 aquota.user
第四步 配置用户或组限制
edquota -u quser1
Disk quotas for user quser1 (uid 502):
Filesystem blocks soft hard inodes soft hard
/dev/hdb1 0 45000 50000 0 0 0
再次强调的是,因为我的/disk2里面并没有任何数据存在,所以,在上面这个表格当中,blocks与inodes才会都是0,如果您是使用/home来进行quota设定的,那么blocks/inodes肯定不会是0,这里要特别留意的。好了,上面特殊字体的部分就是我们的设定了,分别是45000及50000,那个单位是KBytes啦,转成MBytes应该是要除以1024才对,不过,简单算一下就好了,不用太介意!^_^。然后将quser1的设定直接复制给quser2吧!
edquota -p quser1 quser2
接下来要来设定宽限时间,还是使用edquota!
[root@linux ~]# edq!ota -t
Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
Filesystem Block grace period Inode grace period
/dev/hdb1 1days 7days
将时间改为1天(原本是7days改成1days),好了!查询一下是否真的有设定进去呢?使用quota -v来查询:
[root@linux ~]# quota -vu quser1 quser2
Disk quotas for user quser1 (uid 502):
Filesystem blocks quota limit grace files quota limit grace
/dev/hdb1 0 45000 50000 0 0 0
Disk quotas for user quser2 (uid 503):
Filesystem blocks quota limit grace files quota limit grace
/dev/hdb1 0 45000 50000 0 0 0
特别注意到,由于我们的使用者尚未超过45MB,所以grace(宽限时间)就不会出现啦!这样很够清楚了吧?!
编辑群组可使用的空间:
[root@linux ~]# edquota -g qgroup
Disk quotas for group qgroup (gid 502):
Filesystem blocks soft hard inodes soft hard
/dev/hdb1 0 80000 90000 0 0 0
[root@linux ~]# quota -vg qgroup
Disk quotas for group qgroup (gid 502):
Filesystem blocks quota limit grace files quota limit grace
/dev/hdb1 0 80000 90000 0 0 0
这样就设定好了group的quota!同样的,因为整个群组的总使用量还没有到达80000KBytes,当然那个grace就不会有任何信息显示了!但这个地方倒是有很多朋友问到一个小问题,那就是『为什么我两个用户quser1、quser2的设定值在soft与hard分别是45/50MB,但为何你的group总量(hard)设定仅有90MB呢?』,也就是说,当某个用户用了50MB的量,那另一个不就最多可以使用到40MB而已。

Q:听说Vsftp 不能限制用户每次上传下载的文件的大小,有什么方法补救呢?

A:vsftpd没有这个功能。可以用ulimit来限制,rh系和debian的可以修改这个文件:  
  /etc/security/limits.conf    
  增加一行类似的:  
ftpuser1   hard   fsize   XXXXXXX      
  这样就增加了ftpuser1的文件限制。    

Q:王老师,您好!您有博客吗?我看你做网络规划和方案设计,能否介绍点网站服务器方案设计或者规范设计及实施的案例。期待!!!

A:您可以随时关注51cto网站和我的博客makewong.blog.51cto.com

更多精彩技术门诊请访问:http://doctor.51cto.com

【编辑推荐】

  1. [技术门诊第132期] 实战乃王道:C/C++开发常见bug解析
  2. [技术门诊第133期] 保障企业核心机密——与专家对话内网安全

责任编辑:佚名 来源: 51CTO
相关推荐

2009-12-25 10:59:08

WPF Timer

2011-08-03 13:25:19

布线系统规划

2010-01-26 10:13:45

学习C++

2009-12-24 18:03:35

WPF线程渲染

2017-04-18 22:50:10

OSPF疑难问题

2011-05-06 14:05:22

打印机照片打印

2012-05-04 09:18:46

2009-12-23 08:53:56

Windows 7远程协助

2011-04-01 14:05:09

SQL数据库

2011-04-26 16:39:30

照片打印机

2010-08-20 11:22:48

DB2性能调优

2010-03-09 12:23:30

Python编码

2010-08-13 14:40:14

DB2性能调优

2010-04-28 09:21:05

2009-06-18 08:46:56

微软Windows 7操作系统

2010-07-05 14:41:21

SQL Server数

2023-05-29 18:33:30

得物H5容器

2010-08-20 14:15:08

DB2性能调优

2016-03-22 15:05:00

定性移动数据开源

2012-05-14 11:48:18

MSinfo32Windows Ser
点赞
收藏

51CTO技术栈公众号