FTP的隐患
早期FTP并没有涉及安全问题,随着互连网应用的快速增长,人们对安全的要求也不断提高。目前在各种平台上包括UNIX、Linux、Windows NT以及Netware等网络操作系统,都实现了FTP的客户和服务器。
FTP是为了共享资源、方便用户文件下载而制定的文件传输协议,那么必然有对系统读写的权利,所以它也是整个网络系统的薄弱环节,一些网上的黑客常常利用FTP作为侵入和破坏系统的突破口。他们有时利用FTP将一些监控程序装入系统,以窃取管理口令;有时利用FTP获取系统的passwd文件,从而了解系统的用户信息;有时利用FTP的puts和gets功能,增加系统负担,从而导致硬盘塞满甚至系统崩溃。
FTP主要工作原理
FTP是基于客户端/服务器方式来提供文件传输服务的。一个FTP服务器进程可同时为多个客户进程提供服务,即用户所在的一方是客户方,客户方翻译用户发出的命令,向提供FTP服务的文件服务器传送适当的请求。
服务器端则一直运行着ftpd守护程序,遵循TCP协议,服务进程ftpd在指定的通信端口监听客户发来的FTP请求,当ftpd确认该用户为合法时,就开始为其客户进程提供文件传输服务了。因此FTP协议在客户和服务器之间通过TCP来建立连接,并利用TCP提供的可靠传输在不同的站点间传输文件。当FTP客户与FTP服务器进行会话时,FTP建立了两个连接,一个是控制连接,一个是数据连接,如图所示。
windows.chinaitlab.com/UploadFiles_3263/200701/20070115085631711.jpg" border=1>
FTP的客户服务器模式
在一个FTP会话中需建立一个控制连接和若干个数据连接。控制连接是执行ftp命令时由客户建立的通向FTP服务器的连接,该连接只能用来传送FTP执行的内部命令以及命令的响应等控制信息而非数据,数据连接是为在服务器与客户端,或两个ftp服务器之间传输文件(即FTP代理传输方式)而建立的连接,该连接是全双工的,允许同时进行双向数据的传输。一旦数据传输结束,就撤消数据连接,再回到交互会话状态,直到客户撤消控制连接,并退出FTP会话为止。
FTP服务器的安全分析
我们可以通过编辑FTP服务器的配置文件来调整访问权限,在传输文件过程中进行文件加密等措施来达到FTP服务器的安全工作。下面是FTP服务器对用户、目录和文件管理安全问题的分析。
1)FTP服务器对用户的管理
为了不允许其它用户用匿名ftp访问系统,必须创建一个名为ftp的帐号,给帐号ftp设置一些限制,使得任何远程的ftp用户不能访问系统的其他部分。必须改变此帐号在文件/etc/passwd中的项,使一般的用户不能访问它,这一项是ftp:*:14:50:FTPUser:/home/ftp:。
口令区域中的星号用来保护帐号,它将阻止其他用户以此帐号注册以及控制它的文件或访问系统的其他部分。用户ID为14,是一个独立的ID,注释域是“FTP User”,注册目录是/home/ftp,当ftp用户注册到系统时,它将处于此目录中。
如果没有设置主目录,需创建一个,并用命令chown为ftp用户改变它的权限。组ID是ftp组的ID,专门为匿名ftp用户设置的。通过为ftp组设置限制来限制匿名的ftp用户。下面是一个在/etc/group文件中找到的关于ftp组的项。对于Linux系统,如果没有此项,应该加上ftp:: 50。
目录/home/ftp的权限中应该否定写权限。如果不希望ftp用户创建和删除目录,可以用chmod命令设置权限555来禁止写访问,这个命令是chmod555/home/ftp。
2)FTP服务器对目录的管理
为了防止系统遭到ftp用户的一些意外的访问,应在ftp目录中(如/home/ftp中),创建一组有限制的目录。在表1中提供一列目录。保护一个重要部分的方法是阻止远程用户使用不在限制目录中的命令或程序。例如,因为ls命令位于/bin目录中,可能不希望用户使用ls列出文件名,同时,又希望用户使用ls命令。
windows.chinaitlab.com/UploadFiles_3263/200701/20070115085631974.jpg" border=1>
为了做到这一点,需要在目录/home/ftp中创建一个新的目录bin,接着复制一份命令ls放到/home/ftp/bin中。此目录将限制ftp用户的使用,他们使用的命令ls是目录/home/ftp/bin中的命令,而不是管理员用的/bin中的ls命令。通过同样的方法,可以让ftp用户使用其他命令。
目录/home/ftp/etc中存放passwd和group文件的副本,这个目录的存在也阻止ftp用户访问/etc目录下的原文件。编辑 /home/ftp/etc/passwd文件,删除系统的一般用户的项,剩余的项的口令应被设置为3,以保护访问。对于group文件,除去所有的用户组并设置所有的口令为3。
具体命令如下:
#cat/home/ftp/etc/kpasswd
root:3:0:0:::
bin:3:1:1:::
operator:3:11:0:::
ftp:3:14:50:::
nobody:3:99:99:::
#cat/home/ftp/etc/group
root::0:
bin::1:
daemon::2:
sys::3:
adm::4:
ftp::50:
目录/home/ftp/pub中放有想让远程ftp用户下载的文件。当ftp用户注册到系统时,它将处于目录/home/ftp中,并能切换到目录/home/ftp/pub中开始访问其中的文件。在/home/ftp/pub中能加入任何希望的目录和文件,甚至可以指定一些目录为上传目录,允许ftp用户上传文件到系统中。
一些Linux系统要求,ls命令工作时要访问libc.so.l和rld文件。它们通常存放在/lib目录中。因为不希望ftp用户间接访问系统,所以要创建一个/home/ftp/lib目录,并复制这些文件到此目录中。
另外,因为rld使用/dev/zero文件,还要创建一个/home/ftp/dev目录并用mknod复制设备文件/dev/zero,然后把它放到此目录中。
3)权限
为了限制ftp用户只能访问目录/home/ftp和它的子目录,需要对ftp用户隐藏文件结构的其余部分。要让目录/home/ftp呈现为ftp用户的主目录,实际的主目录和其他的目录结构则对ftp用户隐藏。可以用命令chroot加上参数ftp,使得目录/home/ftp呈现为主目录。
ftp目录的权限应该设置为允许ftp用户访问。对于所有者、组和另外的用户,有三组权限为读、写和执行。为了允许ftp用户访问,组和目录的其他权限应设置为可读和执行。执行权限允许ftp用户访问目录,读权限则允许列出目录中内容。目录不允许ftp用户具有写权限,没人想让ftp用户能删除或添加一个目录。对于拥有可以下载的文件的目录/home/ftp/pub来说,它必须拥有读和执行的权限。
作为目录的所有者,需要写权限以便能添加新文件或子目录。当然,只有当做改变时才需要写权限。为了进一步的安全,当不需要做改动时,能设置这些目录对所有的用户包括所有者都只开放读和执行的权限。用命令chmod加上数字555和目录名将设置对所有的用户为读和执行权限。
对于目录/home/ftp/bin中文件的权限和其他指定的ftp目录的权限有时需要更多的限制。一些文件需要执行,而另一些文件只要被读。目录 /home/ftp/bin或/home/ftp/lib中的文件ls和rld需要执行,可以设置权限为555。在目录/home/ftp/etc中的文件象passwd和group可以设置权限为111,即只读的权限。
4)监测和记录
用ftpwho命令可以显示通过FTP正在与系统连接的所有用户的进程信息。下面是ftpwho输出的一个例子:
Service class all
10448?S0:00
ftpd:vestax.domain.com:anonymouws/[email protected]:DLE
10501?S0:00
ftpd:toybox.domain.com:heidi:PETR mklinux-ALL.sit.bin-2 user(-1 maximum)
在这里,可以看到有两个用户登录进入系统(本例没有对用户数进行限制)。第一个用户是一个称[email protected]的匿名用户,他目前没有执行任何操作;第二个用户名为heidi,他目前正在获取mklinux-ALL.sit.bin文件。用ftpcount命令可以查看当前每个组的用户个数。显示信息如下:
Serviceclassall-2user(-1maximum)
最后,建议详细记载ftp登录,以防不测。
适度隔离保证安全
FTP被我们广泛应用,自建立后其主框架相当稳定,二十多年没有什么变化,但在Internet迅猛发展的形势下,其安全问题日益突出,因此对于FTP的使用首先应做到正确地配置FTP,防止系统文件被窃取或者目录下程序进程被启动。
其次,有条件的地方将FTP服务器与网络上的其他应用隔离,这样即便被攻击也不会影响整个系统。最后注意定期观察FTP服务器的运行情况,检查硬盘的大小,并做出相应处理。
上述对FTP服务器的安全性能分析在一定程度上缓解了FTP服务的安全问题,而RFC2228.txt中提出的FTP扩展,提供了强大的认证和集成,并引入新的可选命令、应答和文件传输加密,使得控制和数据连接中的安全性大大提高。
早期FTP并没有涉及安全问题,随着互连网应用的快速增长,人们对安全的要求也不断提高。目前在各种平台上包括UNIX、Linux、Windows NT以及Netware等网络操作系统,都实现了FTP的客户和服务器。
FTP是为了共享资源、方便用户文件下载而制定的文件传输协议,那么必然有对系统读写的权利,所以它也是整个网络系统的薄弱环节,一些网上的黑客常常利用FTP作为侵入和破坏系统的突破口。他们有时利用FTP将一些监控程序装入系统,以窃取管理口令;有时利用FTP获取系统的passwd文件,从而了解系统的用户信息;有时利用FTP的puts和gets功能,增加系统负担,从而导致硬盘塞满甚至系统崩溃。
FTP主要工作原理
FTP是基于客户端/服务器方式来提供文件传输服务的。一个FTP服务器进程可同时为多个客户进程提供服务,即用户所在的一方是客户方,客户方翻译用户发出的命令,向提供FTP服务的文件服务器传送适当的请求。
服务器端则一直运行着ftpd守护程序,遵循TCP协议,服务进程ftpd在指定的通信端口监听客户发来的FTP请求,当ftpd确认该用户为合法时,就开始为其客户进程提供文件传输服务了。因此FTP协议在客户和服务器之间通过TCP来建立连接,并利用TCP提供的可靠传输在不同的站点间传输文件。当FTP客户与FTP服务器进行会话时,FTP建立了两个连接,一个是控制连接,一个是数据连接,如图所示。
windows.chinaitlab.com/UploadFiles_3263/200701/20070115085631711.jpg" border=1>
FTP的客户服务器模式
在一个FTP会话中需建立一个控制连接和若干个数据连接。控制连接是执行ftp命令时由客户建立的通向FTP服务器的连接,该连接只能用来传送FTP执行的内部命令以及命令的响应等控制信息而非数据,数据连接是为在服务器与客户端,或两个ftp服务器之间传输文件(即FTP代理传输方式)而建立的连接,该连接是全双工的,允许同时进行双向数据的传输。一旦数据传输结束,就撤消数据连接,再回到交互会话状态,直到客户撤消控制连接,并退出FTP会话为止。
FTP服务器的安全分析
我们可以通过编辑FTP服务器的配置文件来调整访问权限,在传输文件过程中进行文件加密等措施来达到FTP服务器的安全工作。下面是FTP服务器对用户、目录和文件管理安全问题的分析。
1)FTP服务器对用户的管理
为了不允许其它用户用匿名ftp访问系统,必须创建一个名为ftp的帐号,给帐号ftp设置一些限制,使得任何远程的ftp用户不能访问系统的其他部分。必须改变此帐号在文件/etc/passwd中的项,使一般的用户不能访问它,这一项是ftp:*:14:50:FTPUser:/home/ftp:。
口令区域中的星号用来保护帐号,它将阻止其他用户以此帐号注册以及控制它的文件或访问系统的其他部分。用户ID为14,是一个独立的ID,注释域是“FTP User”,注册目录是/home/ftp,当ftp用户注册到系统时,它将处于此目录中。
如果没有设置主目录,需创建一个,并用命令chown为ftp用户改变它的权限。组ID是ftp组的ID,专门为匿名ftp用户设置的。通过为ftp组设置限制来限制匿名的ftp用户。下面是一个在/etc/group文件中找到的关于ftp组的项。对于Linux系统,如果没有此项,应该加上ftp:: 50。
目录/home/ftp的权限中应该否定写权限。如果不希望ftp用户创建和删除目录,可以用chmod命令设置权限555来禁止写访问,这个命令是chmod555/home/ftp。
2)FTP服务器对目录的管理
为了防止系统遭到ftp用户的一些意外的访问,应在ftp目录中(如/home/ftp中),创建一组有限制的目录。在表1中提供一列目录。保护一个重要部分的方法是阻止远程用户使用不在限制目录中的命令或程序。例如,因为ls命令位于/bin目录中,可能不希望用户使用ls列出文件名,同时,又希望用户使用ls命令。
windows.chinaitlab.com/UploadFiles_3263/200701/20070115085631974.jpg" border=1>
为了做到这一点,需要在目录/home/ftp中创建一个新的目录bin,接着复制一份命令ls放到/home/ftp/bin中。此目录将限制ftp用户的使用,他们使用的命令ls是目录/home/ftp/bin中的命令,而不是管理员用的/bin中的ls命令。通过同样的方法,可以让ftp用户使用其他命令。
目录/home/ftp/etc中存放passwd和group文件的副本,这个目录的存在也阻止ftp用户访问/etc目录下的原文件。编辑 /home/ftp/etc/passwd文件,删除系统的一般用户的项,剩余的项的口令应被设置为3,以保护访问。对于group文件,除去所有的用户组并设置所有的口令为3。
具体命令如下:
#cat/home/ftp/etc/kpasswd
root:3:0:0:::
bin:3:1:1:::
operator:3:11:0:::
ftp:3:14:50:::
nobody:3:99:99:::
#cat/home/ftp/etc/group
root::0:
bin::1:
daemon::2:
sys::3:
adm::4:
ftp::50:
目录/home/ftp/pub中放有想让远程ftp用户下载的文件。当ftp用户注册到系统时,它将处于目录/home/ftp中,并能切换到目录/home/ftp/pub中开始访问其中的文件。在/home/ftp/pub中能加入任何希望的目录和文件,甚至可以指定一些目录为上传目录,允许ftp用户上传文件到系统中。
一些Linux系统要求,ls命令工作时要访问libc.so.l和rld文件。它们通常存放在/lib目录中。因为不希望ftp用户间接访问系统,所以要创建一个/home/ftp/lib目录,并复制这些文件到此目录中。
另外,因为rld使用/dev/zero文件,还要创建一个/home/ftp/dev目录并用mknod复制设备文件/dev/zero,然后把它放到此目录中。
3)权限
为了限制ftp用户只能访问目录/home/ftp和它的子目录,需要对ftp用户隐藏文件结构的其余部分。要让目录/home/ftp呈现为ftp用户的主目录,实际的主目录和其他的目录结构则对ftp用户隐藏。可以用命令chroot加上参数ftp,使得目录/home/ftp呈现为主目录。
ftp目录的权限应该设置为允许ftp用户访问。对于所有者、组和另外的用户,有三组权限为读、写和执行。为了允许ftp用户访问,组和目录的其他权限应设置为可读和执行。执行权限允许ftp用户访问目录,读权限则允许列出目录中内容。目录不允许ftp用户具有写权限,没人想让ftp用户能删除或添加一个目录。对于拥有可以下载的文件的目录/home/ftp/pub来说,它必须拥有读和执行的权限。
作为目录的所有者,需要写权限以便能添加新文件或子目录。当然,只有当做改变时才需要写权限。为了进一步的安全,当不需要做改动时,能设置这些目录对所有的用户包括所有者都只开放读和执行的权限。用命令chmod加上数字555和目录名将设置对所有的用户为读和执行权限。
对于目录/home/ftp/bin中文件的权限和其他指定的ftp目录的权限有时需要更多的限制。一些文件需要执行,而另一些文件只要被读。目录 /home/ftp/bin或/home/ftp/lib中的文件ls和rld需要执行,可以设置权限为555。在目录/home/ftp/etc中的文件象passwd和group可以设置权限为111,即只读的权限。
4)监测和记录
用ftpwho命令可以显示通过FTP正在与系统连接的所有用户的进程信息。下面是ftpwho输出的一个例子:
Service class all
10448?S0:00
ftpd:vestax.domain.com:anonymouws/[email protected]:DLE
10501?S0:00
ftpd:toybox.domain.com:heidi:PETR mklinux-ALL.sit.bin-2 user(-1 maximum)
在这里,可以看到有两个用户登录进入系统(本例没有对用户数进行限制)。第一个用户是一个称[email protected]的匿名用户,他目前没有执行任何操作;第二个用户名为heidi,他目前正在获取mklinux-ALL.sit.bin文件。用ftpcount命令可以查看当前每个组的用户个数。显示信息如下:
Serviceclassall-2user(-1maximum)
最后,建议详细记载ftp登录,以防不测。
适度隔离保证安全
FTP被我们广泛应用,自建立后其主框架相当稳定,二十多年没有什么变化,但在Internet迅猛发展的形势下,其安全问题日益突出,因此对于FTP的使用首先应做到正确地配置FTP,防止系统文件被窃取或者目录下程序进程被启动。
其次,有条件的地方将FTP服务器与网络上的其他应用隔离,这样即便被攻击也不会影响整个系统。最后注意定期观察FTP服务器的运行情况,检查硬盘的大小,并做出相应处理。
上述对FTP服务器的安全性能分析在一定程度上缓解了FTP服务的安全问题,而RFC2228.txt中提出的FTP扩展,提供了强大的认证和集成,并引入新的可选命令、应答和文件传输加密,使得控制和数据连接中的安全性大大提高。