20vsFTPd 档案服务器.docx
- 文档编号:27676684
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:48
- 大小:218.69KB
20vsFTPd 档案服务器.docx
《20vsFTPd 档案服务器.docx》由会员分享,可在线阅读,更多相关《20vsFTPd 档案服务器.docx(48页珍藏版)》请在冰豆网上搜索。
20vsFTPd档案服务器
vsFTPd档案服务器1
本章的行前准备工作1
FTP的数据链路原理1
FTP功能简介1
不同等级的使用者身份:
2
命令记录与登录文件记录:
2
限制或解除使用者家目录所在(changeroot,简称chroot):
2
FTP的运作流程与使用到的端口2
使用到的埠号4
在FTP服务器与客户端之间具有防火墙的联机问题4
客户端选择被动式联机模式6
FTP的安全性问题与替代方案7
开放什么身份的使用者登入8
开放实体用户的情况(Realuser):
8
访客身份(Guest)8
匿名登入使用者(anonymous)9
vsftpd服务器基础设定9
为何使用vsftpd10
所需要的套件以及套件结构11
vsftpd.conf设定值说明13
与主机较相关的设定值13
与实体用户较相关的设定值15
匿名者登入的设定值16
关于系统安全方面的一些设定值17
vsftpd启动的模式18
利用系统提供的script来启动vsftpd18
自行设定以superdaemon来启动18
CentOS的vsftpd默认值19
仅有实体用户登入的设定21
chroot的使用23
更严格的chroot环境24
限制下载频宽24
限制最大上线人数与同一IP的来源数25
建立严格的可使用FTP的账号列表25
仅有匿名登入的相关设定26
建立上传/下载目录29
建立仅可上传目录29
被动式联机埠口的限制30
客户端的FTP联机软件30
利用浏览器功能34
其它FTP服务器相关设定35
防火墙设定35
Superdaemon的额外管理项目35
常见问题与解决之道37
重点回顾38
课后练习38
vsFTPd档案服务器
在因特网上面的传输协议当中,FTP(FileTransferProtocol)可说是最古老的协定之一了!
早期还没有这么多好用的协议之前(例如SAMBA),都是使用FTP来进行数据的传递的呢!
另外,一般来说数据的传输以FTP这个协议来传送是相当的快速的,而且某些场合当中其实也相当的方便。
不过,值得注意的是,使用FTP来传输时,其实是具有一定程度的『危险性』,因为数据在因特网上面是完全没有受到保护的『明码』机制!
所以鸟哥不太建议大家使用这个服务器的啦!
尤其当你建置好了FTP之后,如果经常进行数据的传递,对于您的网络频宽『真的有很大的损害』啊!
不过,无论如何,FTP仍然有其存在的必要!
例如义守大学的FTP站就作的相当的棒啊!
不过,FTP服务器的危险性挺高的,因此我们选择一个强调安全性的vsftpd软件来架设喔!
本章的行前准备工作
架设FTP是个很难的任务,因为FTP服务同时启用两个联机信道,分别是命令信道与数据流通道,这两条通道的联机建立方式不太一样,结果就造成了防火墙设定方面的困扰。
所以在学习FTP之前,请先确认您已经具有网络基础概念,而且对防火墙也需要有一定程度的概念了喔!
*必须要熟悉网络基础,尤其是网络联机的建立是双向的这个概念;
*必须要了解防火墙的机制,尤其当防火墙架设在路由器上的网络架构时。
*必须要了解standalone与superdaemon的启动方式。
FTP的数据链路原理
FTP是相当古老的传输协议之一,他最主要的功能是在服务器与客户端之间进行档案的传输。
FTP其实是以TCP封包的模式进行服务器与客户端计算机之间的联机,当联机建立后,使用者可以在客户端端连上FTP服务器来进行档案的下载与上传,此外,也可以直接管理用户在FTP服务器上面的档案呢,相当的方便!
而这个古老的协议是使用明码传输,且过去有相当多的安全危机历史。
为了更安全的使用FTP协议,我们主要介绍较为安全但功能较少的vsftpd这个软件吶。
FTP功能简介
FTP服务器的功能除了单纯的进行档案的传输与管理之外,依据服务器软件的设定架构,他还可以提供几个主要的功能,底下我们约略的来谈一谈:
不同等级的使用者身份:
FTP服务器在预设的情况下,依据使用者登入的情况而分为三种不同的身份,分别是
(1)实体账号,realuser;
(2)访客,guest;(3)匿名登入者,anonymous这三种。
这三种身份的使用者在系统上面的使用权限差异很大喔!
例如实体用户取得系统的权限比较完整,所以可以进行比较多的动作;至于匿名登入者,大概我们就仅提供他下载一下资源而已,并不许匿名者使用太多主机的资源啊!
当然,这三种人物能够使用的『在线指令』自然也就不相同啰!
^_^
命令记录与登录文件记录:
FTP可以利用系统的syslogd这个daemon来进行数据的纪录,而记录的数据包括了使用者曾经下达过的命令与使用者传输数据(传输时间、档案大小等等)的纪录呢!
所以你可以很轻松的在/var/log/里面找到各项登录信息喔!
限制或解除使用者家目录所在(changeroot,简称chroot):
为了避免使用者在您的Linux系统当中随意逛大街(意指离开使用者自己的家目录而进入到Linux系统的其它目录去),所以将使用者的工作范围『局限』在使用者的家目录底下,嗯!
实在是个不错的好主意!
FTP可以限制使用者仅能在自己的家目录当中活动喔!
如此一来,由于使用者无法离开自己的家目录,而且登入FTP后,显示的『根目录』就是自己家目录的内容,这种环境称之为changeroot,简称chroot,改变根目录的意思啦!
这有什么好处呢?
当一个恶意的使用者以FTP登入您的系统当中,如果没有chroot的环境下,他可以到/etc,/usr/local,/home等其它重要目录底下去察看档案数据,尤其是很重要的/etc/底下的设定档,如/etc/passwd等等。
如果您没有做好一些档案权限的管理与保护,那他就有办法取得系统的某些重要信息,用来『入侵』您的系统呢!
所以在chroot的环境下,当然就比较安全一些咯!
FTP的运作流程与使用到的端口
FTP的传输使用的是较为可靠的TCP封包协议,在前几章的网络基础当中我们谈过,TCP这种封包格式在建立联机前会先进行三向交握的。
不过FTP服务器是比较麻烦一些,因为FTP服务器使用了两个联机,分别是命令信道与数据流通道(ftp-data)。
这两个联机都需要经过三向交握,因为是TCP封包嘛!
那么这两个联机通道的关系是如何呢?
底下我们先以FTP预设的主动式(active)联机来作个简略的说明啰:
图一、FTP服务器的主动式联机示意图
简单的联机就如上图所示,至于联机的步骤是这样的:
1.建立命令通道的联机
如上图一所示,客户端会随机取一个大于1024以上的埠口(portAA)来与FTP服务器端的port21达成联机,这个过程当然需要三向交握了!
达成联机后客户端便可以透过这个联机来对FTP服务器下达指令,包括查询文件名、下载、上传等等指令都是利用这个通道来下达的;
2.通知FTP服务器端使用active且告知连接的埠号
FTP服务器的21埠号主要用在命令的下达,但是当牵涉到数据流时,就不是使用这个联机了。
客户端在需要数据的情况下,会告知服务器端要用什么方式来联机,如果是主动式(active)联机时,客户端会先随机启用一个埠口(图一当中的portBB),且透过命令通道告知FTP服务器这两个信息,并等待FTP服务器的联机;
3.FTP服务器『主动』向客户端联机
FTP服务器由命令通道了解客户端的需求后,会主动的由20这个埠号向客户端的portBB联机,这个联机当然也会经过三向交握啦!
此时FTP的客户端与服务器端共会建立两条联机,分别用在命令的下达与数据的传递。
而预设FTP服务器端使用的主动联机埠号就是port20啰!
如此一来则成功的建立起『命令』与『数据传输』两个信道!
不过,要注意的是,『数据传输信道』是在有数据传输的行为时才会建立的通道喔!
并不是一开始连接到FTP服务器就立刻建立的通道呢!
留意一下啰!
使用到的埠号
利用上述的说明来整理一下FTP会使用到的埠号主要有:
*命令通道的ftp(预设为port21)与
*数据传输的ftp-data(预设为port20)。
再强调一次,这两个埠口的工作是不一样的,而且,重要的是两者的联机方向是不一样的!
首先,port21主要接受来自客户端的主动联机,至于port20则为FTP服务器主动联机至客户端呢!
这样的情况在服务器与客户端两者同时为公共IP(PublicIP)的因特网上面通常没有太大的问题,不过,万一你的客户端端是在防火墙后端,或者是NAT主机后端呢?
会有什么问题发生呢?
底下我们来谈一谈这个严重的问题!
在FTP服务器与客户端之间具有防火墙的联机问题
还记得我们的防火墙章节吧?
一般来说,很多的局域网络(LAN)都会使用防火墙(iptables)的NAT功能,那么在NAT主机后端的FTP用户如何连接到FTP服务器呢?
我们可以简单的以下图来说明:
图二、若FTP客户端与服务器端联机中间具有防火墙的联机状态
1.命令通道的建立:
因为NAT主机会主动的记录由内部送往外部的联机信息,而由于命令信道的建立是由客户端向服务器端联机的,因此这一条联机可以顺利的建立起来的;
2.数据信道建立时的通知:
同样的,客户端主机会先启用portBB,并透过命令通道告知FTP服务器,且等待主机端的主动联机;
3.主机的主动联机问题:
但是由于透过NAT主机的转换后,FTP服务器只能得知NAT主机的IP而不是客户端的IP,因此FTP服务器会以port20主动的向NAT主机的portBB发送主动联机的要求。
但你的NAT主机并没有启动portBB来监听FTP服务器的联机啊!
了解问题的所在了吗?
在FTP的主动式联机当中,NAT主机将会被视为客户端,但NAT主机其实并非客户端啊,这就造成问题了。
如果你曾经在IP分享器后面连接某些FTP服务器时,可能偶尔会发现明明就连接上FTP服务器了(命令通道已建立),但是就是无法取得文件名称的列表,而是在超过一段时间后显示『Can'tbuilddataconnection:
Connectionrefused,无法进行数据传输』之类的讯息,那肯定就是这个原因所造成的困扰了。
那有没有办法可以克服这个问题呢?
难道真的在LinuxNAT主机后面就一定无法使用FTP吗?
当然不是!
目前有两个简易的方法可以克服这个问题:
*使用iptables所提供的FTP侦测模块:
其实iptables早就提供了许多好用的模块了,这个FTP当然不会被错过!
你可以使用modprobe这个指令来加载ip_conntrack_ftp及ip_nat_ftp等模块,这几个模块会主动的分析『目标是port21的联机』信息,所以可以得到portBB的资料,此时若接受到FTP服务器的主动联机,就能够将该封包导向正确的后端主机了!
^_^
不过,如果你连结的目标FTP服务器他的命令通道预设端口号并非标准的21埠号时(例如某些地下FTP服务器),那么这两个模块就无法顺利解析出来了,这样说,理解吗?
*客户端选择被动式(Passive)联机模式:
除了主动式联机之外,FTP还提供一种称为被动式联机的模式,什么是被动式呢?
既然主动式是由服务器向客户端联机,反过来讲,被动式就是由客户端向服务器端发起联机的啰!
既然是由客户端发起联机的,那自然就不需要考虑来自port20的联机啦!
关于被动式联机模式将在下一小节介绍喔!
客户端选择被动式联机模式
那么什么是被动式联机呢?
我们可以使用底下的图示来作个简略的介绍喔:
图三、被动式联机的方向
1.建立命令通道:
同样的需要建立命令通道,透过三向交握就可以建立起这个通道了。
2.发出PASV的联机要求:
当有使用数据信道的指令时,客户端可透过命令通道发出PASV的被动式联机要求(Passive的缩写),并等待服务器的回应;
3.FTP服务器启动数据端口口,并通知客户端联机:
如果你的FTP服务器是能够处理被动式联机的,此时FTP服务器会先启动一个埠口在监听。
这个端口口号码可能是随机的,也可以自订某一范围的埠口,端看你的FTP服务器软件而定。
然后你的FTP服务器会透过命令通道告知客户端该已经启动的埠口(图中的portPASV),并等待客户端的联机。
4.客户端随机取用大于1024的埠口进行连接:
然后你的客户端会随机取用一个大于1024的端口号来对主机的portPASV联机。
如果一切都顺利的话,那么你的FTP数据就可以透过portBB及portPASV来传送了。
发现上面的不同点了吗?
被动式FTP数据信道的联机方向是由客户端向主机端联机的喔!
如此一来,在NAT主机内部的客户端主机就可以顺利的连接上FTPServer了!
但是,万一FTP主机也是在NAT后端那怎么办.....呵呵!
那可就糗了吧~@_@这里就牵涉到更深入的DMZ技巧了,我们这里暂不介绍这些深入的技巧,先理解一下这些特殊的联机方向,这将有助于您未来服务器架设时候的考虑因素喔!
此外,不晓得您有无发现,透过PASV模式,服务器在没有特别设定的情况下,会随机选取大于1024的埠口来提供客户端连接之用。
那么万一主机启用的端口口被搞鬼怎么办?
而且,如此一来也很难追踪来自入侵者攻击的登录信息啊!
所以,这个时候我们可以透过passiveports的功能来『限定』主机启用的portnumber喔!
FTP的安全性问题与替代方案
事实上,FTP是一个不太安全的传输协议呢!
怎么说呢?
因为FTP与Telnet相似的,他是以『明码』的状态在因特网上面传输的,所以当然就容易被有心人士将你的数据给他抓下来,并且加以利用啦!
因此,他当然不是很安全啊!
所以,在网络上大家才会常常告诫说,不要随意架设FTP网站啊!
否则主机怎么被破解的都不晓得哩!
此外,由于FTP软件常常会有漏洞的问题,因此也要常常更新套件喔!
另外,其实拜SSH所赐,目前我们已经有较为安全的FTP了,那就是ssh提供的sftp这个server啊!
这个sftp-server最大的优点就是:
『他是经过加密的资料!
』所以在因特网上面流窜的时候,嘿嘿!
毕竟是比较安全一些啦!
所以建议您,除非必要,否则的话使用SSH提供的sftp-server功能即可~
然而这个功能对于一些习惯了图形接口,或者是有中文档名的使用者来说,实在是不怎么方便,虽说目前有个图形接口的filezilla客户端软件,不过很多时候还是会发生一些莫名的问题说!
所以,有的时候FTP网站还是有其存在的需要的。
如果真的要架设FTP网站,那么还是得需要注意几个事项喔:
1.随时更新到最新版本的FTP软件,并随时注意漏洞讯息;
2.善用iptables来规定可以使用FTP的网域;
3.善用TCP_Wrappers来规范可以登入的网域;
4.善用FTP软件的设定来限制使用您FTP主机的使用者的不同权限啊;
5.使用Superdaemon来进阶管理您的FTP主机;
6.随时注意使用者的家目录、以及匿名使用者登入的目录的『档案权限』;
7.若不对外公开的话,或许也可以修改FTP的port。
无论如何,在网络上听过太多人都是由于开放FTP这个服务器而导致整个主机被入侵的事件,所以,这里真的要给他一直不断的强调,要注意安全啊!
开放什么身份的使用者登入
既然FTP是以明码传输,并且某些早期的FTP服务器软件也有不少的安全性漏洞,那又为何需要架设FTP服务器啊?
没办法啊,总是有人有需要这个玩意儿的,譬如说各大专院校不就有提供FTP网站的服务吗?
这样可以让校内的同学共同分享校内的网络资源嘛!
不过,由于FTP登入者的身份可以分为三种,你到底要开放哪一种身份登入呢?
这个时候你可以这样简单的思考一下啰:
开放实体用户的情况(Realuser):
很多的FTP服务器预设就已经允许实体用户的登入了。
不过,需要了解的是,以实体用户做为FTP登入者身份时,系统预设并没有针对实体用户来进行『限制』的,所以他可以针对整个档案系统进行任何他所具有权限的工作。
因此,如果您的FTP使用者没能好好的保护自己的密码而导致被入侵,那么你的整个Linux系统将很有可能被毁灭啊!
开放实体用户时的建议如下:
*由于实体用户本来就可以透过网络连接到主机来进行工作(例如SSH),因此实在没有需要特别的开放FTP的服务啊!
因为例如sftp本来就能达到传输档案的功能啰!
*如果确定要让实体用户利用FTP服务器的话,那么你可能需要让某些系统账号无法登入才行,例如bin,apache等等。
最简单常用的作法是透过PAM模块来处理,譬如vsftpd这个软件预设可以透过/etc/vsftpd.ftpusers这个档案来设定不想让他具有登入权限的账号。
访客身份(Guest)
通常会建立guest身份的案例当中,多半是由于主机提供了类似『个人Web首页』的功能给一般身份使用者,那么这些使用者总是需要管理自己的网页空间吧?
这个时候将使用者的身份压缩成为guest,并且将他的可用目录设定好,即可提供使用者一个方便的使用环境了!
且不需要提供他realuser的权限喔!
常见的建议如下:
*仅提供需要登入的账号即可,不需要提供系统上面所有人均可登入的环境啊!
*当然,我们在主机的设定当中,需要针对不同的访客给他们不一样的『家目录』,而这个家目录与使用者的权限设定需要相符合喔!
例如要提供dmtsai这个人管理他的网页空间,而他的网页空间放置在/home/dmtsai/www底下,那我就将dmtsai在FTP提供的目录仅有/home/dmtsai/www而已,比较安全啦!
而且也方便使用者啊!
*针对这样的身份者,需要设定较多的限制,包括:
上下传档案数目与硬盘容量的限制、联机登入的时间限制、许可使用的指令要减少很多很多,例如chmod就不要允许他使用等等!
匿名登入使用者(anonymous)
虽然提供匿名登入给因特网的使用者进入实在不是个好主意,因为每个人都可以去下载你的数据,万一频宽被吃光光怎么办?
但如同前面讲过的,学校单位需要分享全校同学一些软件资源时,FTP服务器也是一个很不错的解决方案啊!
您说是吧。
如果要开放匿名使用者的话,要注意:
*无论如何,提供匿名登入都是一件相当危险的事情,因为只要您一不小心,将重要的资料放置到匿名者可以读取的目录中时,那么就很有可能会泄密!
与其战战兢兢,不如就不要设定啊~
*果真要开放匿名登入时,很多限制都要进行的,这包括:
(1)允许的工作指令要减低很多,几乎就不许匿名者使用指令啦、
(2)限制档案传输的数量,尽量不要允许『上传』数据的设定、(3)限制匿名者同时登入的最大联机数量,可以控制盗连喔!
一般来说,如果你是要放置一些公开的、没有版权纠纷的数据在网络上供人下载的话,那么一个仅提供匿名登入的FTP服务器,并且对整个因特网开放是OK的啦!
不过,如果你预计要提供的的软件或数据是具有版权的,但是该版权允许你在贵单位内传输的情况下,那么架设一个『仅针对内部开放的匿名FTP服务器(利用防火墙处理)』也是OK的啦!
如果你还想要让使用者反馈的话,那是否要架设一个匿名者可上传的区域呢?
鸟哥对这件事情的看法是....『万万不可』啊!
如果要让使用者反馈的话,除非该使用者是你信任的,否则不要允许对方上传!
所以此时一个档案系统权限管理严格的FTP服务器,并提供实体用户的登入就有点需求啦!
总之,要依照您的需求来思考是否有需要喔!
vsftpd服务器基础设定
终于要来聊一聊这个简单的vsftpd啰!
vsftpd的全名是『VerySecureFTPDaemon』的意思,换句话说,vsftpd最初发展的理念就是在于建构一个以安全为重的FTP服务器呢!
我们先来聊一聊为什么vsftpd号称『非常安全』呢?
然后再来谈设定吧!
为何使用vsftpd
为了建构一个安全为主的FTP服务器,vsftpd针对操作系统的『程序的权限(privilege)』概念来设计,如果你读过基础篇的程序与资源管理章节的话,你应该会晓得系统上面所执行的程序都会引发一个程序,我们称他为PID(ProcessID),这个PID在系统上面能进行的任务与他拥有的权限有关。
也就是说,PID拥有的权限等级越高,他能够进行的任务就越多。
举例来说,使用root身份所触发的PID通常拥有可以进行任何工作的权限等级。
不过,万一触发这个PID的程序(program)有漏洞而导致被网络怪客(cracker)所攻击而取得此PID使用权时,那么网络怪客将会取得这个PID拥有的权限吶!
所以,近来发展的套件都会尽量的将服务取得的PID权限降低,使得该服务即使不小心被入侵了,入侵者也无法得到有效的系统管理权限,这样会让我们的系统较为安全的啦。
vsftpd就是基于这种想法而设计的。
除了PID方面的权限之外,vsftpd也支持chroot这个函式的功能,chroot顾名思义就是『changerootdirectory』的意思,那个root指的是『根目录』而非系统管理员。
他可以将某个特定的目录变成根目录,所以与该目录没有关系的其它目录就不会被误用了。
举例来说,如果你以匿名身份登入我们的ftp服务的话,通常你会被限定在/var/ftp目录下工作,而你看到的根目录其实就只是/var/ftp,至于系统其它如/etc,/home,/usr...等其它目录你就看不到了!
这样一来即使这个ftp服务被攻破了,没有关系,入侵者还是仅能在/var/ftp里面跑来跑去而已,而无法使用Linux的完整功能。
自然我们的系统也就会比较安全啦!
vsftpd是基于上面的说明来设计的一个较为安全的FTP服务器软件,他具有底下的特点喔:
*vsftpd这个服务的启动者身份为一般使用者,所以对于Linux系统的使用权限较低,对于Linux系统的危害就相对的减低了。
此外,vsftpd亦利用chroot()这个函式进行改换根目录的动作,使得系统工具不会被vsftpd这支服务所误用;
*任何需要具有较高执行权限的vsftpd指令均以一支特殊的上层程序(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 20vsFTPd 档案服务器 20 vsFTPd 档案 服务器
![提示](https://static.bdocx.com/images/bang_tan.gif)