概述文件传输协议(FTP)的目的是在互联网上进行平台无关的数据传输,它基于一个客户机/服务器架构。RFC 959[1] 规定 FTP 将通过两个信道(端口)传输,一个传输数据(TCP 端口 20),另一个传输控制信息(TCP 端口 21)。在控制信道之上,双方(客户机和服务器)交换用于发起数据传输的命令。 一个 FTP 连接包含4个步骤: FTP 的连接控制使用 TCP (Transmission Control Protocol, 传输控制协议),它保障了数据的可靠传输。因此,FTP 在数据传输中不需要关心分组丢失和数据错误检测。因为 TCP 保障了每个分组都按照顺序的、没有错误的、无重复的到达。 FTP 中根据发送方式的不同分为有三种不同的传输类型,流(stream)模式以 end-of-file (EOF) 标志传输的结束,另两种传输模式以 end-of-record (EOR) 来标志传输的结束 - 流 (Stream)
- 块 (Block)
- 压缩 (Compressed)
另外还有两种不同的传输模式: ASCII 模式用于文本文件的传输,而二进制模式用于程序和类似的数据的传输。用户不需要选择特定的传输模式,现在所有的客户端都可以识别传输的文件的类型自动切换模式。 鉴权用的用户名和密码都是使用明文传输的,这是一个非常严重的安全隐患。这也是一些有关FTP的安全的考虑的出发点。1997 年10月,RFC2228[2] 终于发布了,它定义了 FTP 的安全性补充规范。 vsftpdvsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux, BSD, Solaris, HP-UX 以及 IRIX 上面。它支持很多其他的 FTP 服务器不支持的特征。比如: - 非常高的安全性需求
- 带宽限制
- 良好的可伸缩性
- 创建虚拟用户的可能性
- IPnG(译注:IPv6)支持
- 中等偏上的性能
- 分配虚拟 IP 的可能性
- 高速
vsftpd 的名字代表"very secure FTP daemon", 安全是它的开发者 Chris Evans 考虑的首要问题之一。在这个 FTP 服务器设计开发的最开始的时候,高安全性就是一个目标。 一个例子就是 vsftpd 是在 chroot 模式下工作的,chroot 模式就是为程序(这里就是 vsftpd 了)单独指定一个新的目录,它也就不能访问那个目录之外的程序和文件了 --- 所以这也称为“被锁上的”。一个可能被潜在的攻击者破坏的 FTP 服务器将被从系统的其他部分独立开来,从而避免了更大的损失。有关 chroot 的更多信息可以在下边的文章[3]中得到。如果您对于 vsftpd 的其他安全机制有兴趣,推荐阅读文章 [4]。 由于有了如此多的特性,其中 FTP 服务的安全性应该是最重要的,vsftpd 比其他 FTP 服务器更加优越。WU-FTPD[5] 在这里可以被视作一个反面的例子,因为它在过去的几年中出现了太多的安全缺陷。 安装vsftpd 守护程序的安装相当简单,在每个主要发行版中你都可以找到 vsftpd 的 RPM 包,很多情况下,它已经被装上了。如果没有的话,源代码可以在 [6] 找到,然后手工安装。 得到源代码并解开 tarball 后,进入新建的目录目录并运行 make。下面是必要的命令的示例: neo5k@phobos> tar xzvf vsftpd-x.x.x.tar.gz neo5k@phobos> cd vsftpd-x.x.x neo5k@phobos> make 这之前我们应该看看用户 "nobody" 和目录 "/usr/share/empty" 是否存在,如果需要的话我们就新建这个用户和这个目录。如果我们允许用户匿名访问,用户 "ftp" 和目录"/var/ftp" 也需要创建。这可以用如下两个命令完成: neo5k@phobos> mkdir /var/ftp neo5k@phobos> useradd -d /var/ftp ftp 由于安全原因,目录 "/var/ftp" 不应该属于用户 "ftp",也不应该有写权限。如果用户已经存在了的话,用下面的两个命令,我们可以改变目录的所有者并去掉其他用户的写权限: neo5k@phobos> chown root.root /var/ftp neo5k@phobos> chmod og-w /var/ftp 达到了所有的先决条件后,我们可以安装 vsftp-daemon 了: neo5k@phobos> make install 程序和 manpage 应该已经被拷贝到系统中的正确的位置了。如果出现了异常情况,麻烦一点的手工拷贝也可以完成这项工作。 neo5k@phobos> cp vsftpd /usr/sbin/vsftpd neo5k@phobos> cp vsftpd.conf.5 /usr/share/man/man5 neo5k@phobos> cp vsftpd.8 /usr/share/man/man8
现在我们的配置文件的例子还没有拷贝呢 --- 它会让我们的介绍更简单一些 --- 我们需要手工拷贝: neo5k@phobos> cp vsftpd.conf /etc 配置配置文件可以在"/etc/vsftpd.conf"找到。和大多数配置文件一样,vsftpd 的配置文件中以 # 开始注释。 # Comment line
一个配置的例子是这样的: # Anonymus FTP-access permitted? YES/NO anonymous_enable=NO # Permit anonymus upload? YES/NO anon_upload_enable=NO # Permission for anonymus users to make new directories? YES/NO anon_mkdir_write_enable=NO # Permission for anonymus users to do other write operations - like renaming or deleting? YES/NO anon_other_write_enable=NO # Log on by local users permitted? YES/NO local_enable=YES # Shall local users be locked into their home directory? YES/NO chroot_local_user=YES # Highest permitted data transfer rate in bytes per second for local logged on users. Default = 0 (unlimited) local_max_rate=7200 # General write permission? YES/NO write_enable=YES # Enable messages when changing directories? YES/NO dirmessage_enable=YES # Welcome banner at users logon. ftpd_banner="Welcome to neo5k's FTP service." # Activate logging? YES/NO xferlog_enable=YES # Logging of all FTP activities? YES/NO # Careful! This can generate large quantities of data. log_ftp_protocol=NO # Confirm connections are established on port 20 (ftp data) only.Linux联盟收集整理 |