[LinuxFocus-icon]
<--  | 首页  | 站点地图  | 索引  | 搜索

新闻 | 过往期刊 | 链接 | 关于LF
This document is available in: English  ChineseGB  Deutsch  Italiano  Nederlands  Turkce  Polish  

[Photo of the Author]
by Mario M. Knopf
<netzmeister/at/neo5k/dot/org>

关于作者:

Mario 以忙于 Linux、网络和其它安全相关的话题为乐。在业余时间,他维护着两个网站:neo5k.orglinuxwallpapers.de.


目录:

 

vsftpd - Very Secure FTP Daemon 简介

vsftp

摘要:

这篇文章是"Very Secure FTP Daemon" 的基本介绍。首先,我会粗略地介绍 FTP 和 vsftpd。之后,我们将会学习 vsftp 守护程序(deamon)的安装、设置和启动参数。最后,我们还要进行一个小小的功能测试。

_________________ _________________ _________________

 

概述

文件传输协议(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) 来标志传输的结束

另外还有两种不同的传输模式:

ASCII 模式用于文本文件的传输,而二进制模式用于程序和类似的数据的传输。用户不需要选择特定的传输模式,现在所有的客户端都可以识别传输的文件的类型自动切换模式。

鉴权用的用户名和密码都是使用明文传输的,这是一个非常严重的安全隐患。这也是一些有关FTP的安全的考虑的出发点。1997 年10月,RFC2228[2] 终于发布了,它定义了 FTP 的安全性补充规范。

 

vsftpd

vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux, BSD, Solaris, HP-UX 以及 IRIX 上面。它支持很多其他的 FTP 服务器不支持的特征。比如:

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. YES/NO
connect_from_port_20=YES
 
# Timeout during idle sessions
idle_session_timeout=600
 
# Data connection timeout
data_connection_timeout=120
 
# Access through Pluggable Authentication Modules (PAM)
pam_service_name=vsftpd
 
# Standalone operation? YES/NO - depending on operation mode (inetd, xinetd, Standalone)
# The author's FTP service is being startet with xinetd, therefore the value here is NO.
listen=NO

 

开始 FTP 服务

vsftpd 可以工作在三种方式。使用 inetdxinetd,还有独立(standalone)工作模式。  

inetd

要让 FTP 服务通过 inetd 操作,我们要使用一个编辑器打开配置文件 "/etc/inetd.conf"

neo5k@phobos> vi /etc/inetd.conf

我们找到关于 FTP 业务的那行,并去掉 vsftpd 这项前面的注释符号。如果没有这么一项的话,我们就加上这项。之后我们要重新启动 inetd。这项应该是这样的:
# ftp   stream   tcp   nowait   root   /usr/sbin/tcpd   in.ftpd
ftp   stream   tcp   nowait   root   /usr/sbin/tcpd   vsftpd
 

xinetd

建议使用 xinetd 启动 vsftp daemon ,它比 inetd 更加现代。包括诸如请求记录、访问控制、将业务与网络接口绑定等改进。[7] 是一个非常不错的关于 xinetd 的介绍。修改之后,重启xinetd 是必要的。xinetd 的配置应该是这个样子的:
# vsftp daemon.
service ftp
{
     disable = no
     socket_type = stream
     wait = no
     user = root
     server = /usr/sbin/vsftpd
     per_source = 5
     instances = 200
     no_access = 192.168.1.3
     banner_fail = /etc/vsftpd.busy_banner
     log_on_success += PID HOST DURATION
     log_on_failure += HOST
     nice = 10
}
    
 

Standalone Operation

vsftp也可以工作在独立工作模式下。这样,我们需要再次打开 "/etc/vsftpd.conf" 做如下改动:

# Shall the vsftp daemon run in standalone operation? YES/NO
listen=YES

在这项设置之后,守护进程可以用如下方式启动

neo5k@phobos> /usr/sbin/vsftpd &

如果程序运行路径的设置是正确的,下面的命令就可以启动服务器了

neo5k@phobos> vsftpd &

对于后一种方式,我们可以这样看路径设置是否正确

neo5k@phobos> echo $PATH
/usr/sbin:/bin:/usr/bin:/sbin:/usr/X11R6/bin

在独立工作模式,我们必须保证 vsftp daemon 没有被inetdxinetd 启动。  

操作测试

在成功地安装和配置之后,我们可以第一次访问这个 FTP 服务器了。
neo5k@phobos> ftp phobos
Connected to phobos
220 "Welcome to neo5k's FTP service."
Name (phobos:neo5k): testuser
331 Please specify the password.
Password:
230 Login successful
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls -l
229 Entering Extended Passive Mode
150 Here comes the directory listing
drwxr-xr-x      11  500      100        400  May 07 16:22  docs
drwxr-xr-x       9  500      100        464  Feb 01 23:05  hlds
drwxr-xr-x      39  500      100       4168  May 10 09:15  projects
226 Directory send OK.
ftp>
 

结论

我们注意到,vsftp daemon 的安装和配置都很简单,但它提供了很多特性和很高的安全性。

当然,这个介绍仅仅是对 vsftpd 提供的环境的一瞥,这个 FTP 服务器还提供了大量的可供设置的选项。如果你想要更进一步研究 vsftpd 的话,应该访问项目的主页[6]并阅读更进一步的文档。

 

链接

[1] ftp://ftp.rfc-editor.org/in-notes/rfc959.txt [RFC 959 - File Transfer Protocol]
[2] ftp://ftp.rfc-editor.org/in-notes/rfc2228.txt [RFC 2228 - FTP Security Extensions]
[3] linuxfocus.org: article225, January2002 [chroot]
[4] http://vsftpd.beasts.org/DESIGN [Security vsftpd]
[5] http://www.wu-ftpd.org/ [WU-FTPD]
[6] http://www.vsftpd.beasts.org/ [Home of vsftpd]
[7] linuxfocus.org: article 175, November2000 [xinetd]

 

对这篇文章发表评论

每篇文章都有各自的反馈页面。在这个页面里,您可以提交评论,也可以查看其他读者的评论:
 反馈页面 

<--, back to the index of this issue

主页由LinuxFocus编辑组维护
© Mario M. Knopf, FDL
LinuxFocus.org
翻译信息:
de --> -- : Mario M. Knopf <netzmeister/at/neo5k/dot/org>
de --> en: Jürgen Pohl <sept.sapins/at/verizon.net>
en --> cn: 王旭 <wangxu(at)linuxfocus.org>

2004-07-10, generated by lfparser version 2.46