安全的FTP服务器 vsftpd简介
vsftpd 是一个 unix 类操作系统上运行的服务器的名字,它可以运行在诸如 linux, bsd, solaris, hp-ux 以及 irix 上面。它支持很多其他的 ftp 服务器不支持的特征。比如:
非常高的安全性需求
带宽限制
良好的可伸缩性
创建虚拟用户的可能性
ipv6支持
中等偏上的性能
分配虚拟 ip 的可能性
高速
vsftpd 的名字代表"very secure ftp daemon", 安全是它的开发者 chris evans 考虑的首要问题之一。在这个 ftp 服务器设计开发的最开始的时候,高安全性就是一个目标。
一个例子就是 vsftpd 是在 chroot 模式下工作的,chroot 模式就是为程序(这里就是 vsftpd 了)单独指定一个新的目录,它也就不能访问那个目录之外的程序和文件了 --- 所以这也称为“被锁上的”。一个可能被潜在的攻击者破坏的 ftp 服务器将被从系统的其他部分独立开来,从而避免了更大的损失。
由于有了如此多的特性,其中 ftp 服务的安全性应该是最重要的,vsftpd 比其他 ftp 服务器更加优越。wu-ftpd http://www.wu-ftpd.org/ 在这里可以被视作一个反面的例子,因为它在过去的几年中出现了太多的安全缺陷。
附录1:什么是ftp
ftp transfer protocol 件传输协议的缩写,在rfc 959中具体说明。
ftp会话时包含了两个通道,一个叫控制通道,一个叫数据通道。
控制通道:控制通道是和ftp服务器进行沟通的通道,连接ftp,发送ftp指令都是通过控制通道来完成的。
数据通道:数据通道是和ftp服务器进行文件传输或者列表的通道。
ftp协议中,控制连接均有客户端发起,而数据连接有两种工作方式:port方式和pasv方式
port模式(主动方式)
ftp 客户端首先和ftp server的tcp 21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送port命令。 port命令包含了客户端用什么端口(一个大于1024的端口)接收数据。在传送数据的时候,服务器端通过自己的tcp 20端口发送数据。 ftp server必须和客户端建立一个新的连接用来传送数据。
pasv模式(被动方式)
在建立控制通道的时候和port模式类似,当客户端通过这个通道发送pasv 命令的时候,ftp server打开一个位于1024和5000之间的随机端口并且通知客户端在这个端口上传送数据的请求,然后ftp server 将通过这个端口进行数据的传送,这个时候ftp server不再需要建立一个新的和客户端之间的连接传送数据。
如果从c/s模型这个角度来说,port对于服务器来说是outbound,而pasv模式对于服务器是inbound,这一点请特别注意,尤其是在使用防火墙的企业里,这一点非常关键,如果设置错了,那么客户将无法连接。
附录2:ftp用户管理解说
ftp服务器对用户的管理,在默认的情况下是根据 /etc/passwd及/etc/group 来进行的,所以我们一定要了解linux系统用户和用户组的管理,用户和用户组的管理是一切应用的的基础,有的弟兄不想去了解基础的东西,就想一步成架好各种服务器,事实证明这种学习方法是最不明智的;虽然在您可能在几分钟启动了ftp服务器,但遇到问题时,您不一定能知道是哪里出错;所以基础还是极为重要的;
推荐文章: 《linux 用户(user)和用户组(group)管理概述》
匿名ftp 用户的理解
当我们访问各大ftp*问时,可能我们不去想我们以什么身份登录的,如果他的ftp允许匿名登录的话;比如我们在浏览器上打入;
ftp://mirrors.kernel.org
或
ftp://ftp:ftp@mirrors.kernel.org
我们会发现上面的两行最终都能访问,而且显示的结果也完全一样,最终都跳到 ftp://mirrors.kernel.org 地址;那我们访问这个ftp时,是不是有用户和密码呢?是的,也是需要在的,只是在服务器端允许匿名访问,而匿名访问的用户名和密码都是ftp,只是我们因为匿名访问,没有感觉到他有用户名和密码罢了。第二个地址就是以ftp用户,密码也是ftp来访问 ftp://mirrors.kernel.org;
如果我们以ftp命令连接 mirrors.kernel.org 时,我们会发现需要输入用户ftp,密码ftp才能访问;
在ftp服务器中,匿名用户的用户名和密码都是ftp ;这个用户可以在您的操作系统中的 /etc/passwd 中能找得到;可能有类似下面的一行;
ftp:x:14:50:ftp user:/var/ftp:/sbin/nologin
说明:
/etc/passwd 是系统用户的配置文件;/etc/group是系统用户组配置文件,您可以通过 《linux 用户(user)和用户组(group)管理概述》 及其相关文档中了解一些用户管理的一些基础知识;
在ftp用户这行中,我们看到七个字段,每个字段写字段之间用:号分割;
ftp 是用户名
x 是密码字段,是隐藏的;
14 是用户的uid字段,可以自己来设定,不要和其它用户的uid相同,否则会造成系统安全问题;
50 用用户组的gid,可以自己设定,不要和其它用户组共用ftp的gid,否则会造成系统全全问题;
ftp user 是用户说明字段;
/var/ftp 是ftp用户的家目录,可以自己来定义;
/sbin/nologin 这是用户登录shell ,这个也是可以定义的,/sbin/nologin 表示不能登录系统;系统虚拟帐号(也被称为伪用户)一般都是这么设置。比如我们把ftp用户的/sbin/nologin 改为 /bin/bash ,这样ftp用户通过本地或者远程工具ssh或telnet以真实用户身份登录到系统。这样做对系统来说是不安全的;如果您认为一个用户没有太大的必要登录到系统,就可以只给他ftp帐号的权限,也就是说只给他ftp的权限,而不要把他的shell设置成 /bin/bash 等;
关于ftp用户组的理解
我们查看 /etc/group 的时候,会发现类似这样一条;
ftp:x:50:
/etc/group 是用户组的管理配置文件,上面这行表示用户组ftp,x是密码段,50是gid;我们对照在/etc/passwd中的ftp那行得知ftp用户是属于ftp用户组的,因为ftp用户那行中的gid和ftp用户组的gid是相同的。
匿名ftp用户和ftp用户组是否可以删除
在一般情况下是不能把/etc/passwd和/etc/group 中有把ftp用户和用户组的行删除的,因为ftp服务器是需要他们来对ftp用户实现管理,在默认的情况下。
虽然不能删除,但对/etc/passwd及/etc/group中的ftp用户及ftp用户组的一些相关的东西是能修改的;比如我们可以把ftp用户的家目录改掉,也可以把ftp用户的uid改掉 ... ... 前提是你对用户管理有所了解。系统用户管理是一切应用基础之一,可能初学linux的弟兄并不了解用户管理的重要性,但慢慢您就会发现这个道理。