⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 0410vsftpd.htm

📁 鸟哥的linux私房菜
💻 HTM
📖 第 1 页 / 共 5 页
字号:
	        <a href="#server_anon_upload">建立上传/下载目录</a>,
		<a href="#server_anon_upload2">建立仅可上传目录</a>,<br />
	        <a href="#server_anon_pasv">被动式连线埠口的限制</a><br />
	</span>
4. <a href="#client">用户端的 FTP 连线软体</a><br />
5. <a href="#other">其他 FTP 伺服器相关设定</a><br />
	<span class=text_h2>
	    5.1 <a href="#other_iptables">防火墙设定</a><br />
	    5.2 <a href="#other_super">Super daemon 的额外管理项目</a><br />
	    5.3 <a href="#other_faq">常见问题与解决之道</a><br />
	</span>
6. <a href="#review">重点回顾</a><br />
7. <a href="#ex">课后练习</a><br />
8. <a href="#reference">参考资料</a><br />
<span class=text_h2>
9. <a href="http://phorum.vbird.org/viewtopic.php?p=118520"
        target="_blank">针对本文的建议∶http://phorum.vbird.org/viewtopic.php?p=118520</a><br />
</span>
</span>
</div>


<!-- 本文的正式部分 -->
<hr /><a NAME="before"></a><img src="images/penguin-m.gif" alt="大标题的图示" height="34" width="25" align="middle" /><span class="text_h1">本章的行前准备工作</span><br />
<div class=block1>
	架设 FTP 是个很难的任务,因为 FTP 服务同时启用两个连线通道,分别是命令通道与资料流通道,
	这两条通道的连线建立方式不太一样,结果就造成了防火墙设定方面的困扰。
	所以在学习 FTP 之前,请先确认您已经具有网路基础概念,而且对防火墙也需要有一定程度的概念了喔!<br />
	<ul>
	<li><a href="0110network_basic.php">必须要熟悉网路基础</a>,尤其是网路连线的建立是双向的这个概念;
	<li><a href="0250simple_firewall.php">必须要了解防火墙的机制</a>,尤其当防火墙架设在路由器上的网路架构时。
	<li>必须要了解 <a href="../linux_basic/0560daemons.php">stand alone 与 super daemon</a> 的启动方式。
	</ul>
</div>


<hr /><a NAME="theory"></a><img src="images/penguin-m.gif" alt="大标题的图示" height="34" width="25" align="middle" /><span class="text_h1">FTP 的资料连结原理</span><br />
<div class=block1>
	FTP 是相当古老的传输协定之一,他最主要的功能是在伺服器与用户端之间进行档案的传输。
	FTP 其实是以 TCP 封包的模式进行伺服器与用户端电脑之间的连线,当连线建立后,使用者可以在用户端端连上 FTP 
	伺服器来进行档案的下载与上传,此外,也可以直接管理用户在 FTP 伺服器上面的档案呢,相当的方便!
	而这个古老的协定是使用明码传输,且过去有相当多的安全危机历史。为了更安全的使用 FTP 协定,
	我们主要介绍较为安全但功能较少的 vsftpd 这个软体呐。<br /><br />

	<hr /><a NAME="theory_function"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class="text_h2">FTP 功能简介</span><br />
	<div class=block2>
		FTP 伺服器的功能除了单纯的进行档案的传输与管理之外,依据伺服器软体的设定架构,
		他还可以提供几个主要的功能,底下我们约略的来谈一谈∶<br /><br />

		<li><span class=text_import1>不同等级的使用者身份∶</span></li>
		<div class=block2>
		FTP 伺服器在预设的情况下,依据使用者登入的情况而分为三种不同的身份,分别是
		<span class=text_import2>(1)实体帐号,real user;(2)访客, guest;(3)匿名登入者, anonymous</span>
		这三种。这三种身份的使用者在系统上面的使用权限差异很大喔!
		例如实体用户取得系统的权限比较完整,所以可以进行比较多的动作;至于匿名登入者,
		大概我们就仅提供他下载一下资源而已,并不许匿名者使用太多主机的资源啊!
		当然,这三种人物能够使用的『线上指令』自然也就不相同棉! ^_^<br /><br />
		</div>

		<li><span class=text_import1>命令记录与登录档记录∶</span></li>
		<div class=block2>
		FTP 可以利用系统的 <a href="../linux_basic/0570syslog.php">syslogd 这个 daemon</a> 来进行资料的纪录,
		而记录的资料包括了使用者曾经下达过的命令与使用者传输资料(传输时间、档案大小等等)的纪录呢!
		所以你可以很轻松的在 /var/log/ 里面找到各项登录资讯喔!<br /><br />
		</div>

		<li><span class=text_import1>限制或解除使用者家目录所在(change root, 简称 chroot)∶</span></li>
		<div class=block2>
		为了避免使用者在您的 Linux 系统当中随意逛大街 (意指离开使用者自己的家目录而进入到 Linux 系统的其他目录去),
		所以将使用者的工作范围『局限』在使用者的家目录底下,嗯!实在是个不错的好主意!FTP 
		可以限制使用者仅能在自己的家目录当中活动喔!如此一来,由于使用者无法离开自己的家目录,而且登入 FTP 
		后,显示的『根目录』就是自己家目录的内容,这种环境称之为 change root ,简称 chroot ,改变根目录的意思啦!<br /><br />

		这有什么好处呢?当一个恶意的使用者以 FTP 登入您的系统当中,如果没有 chroot 的环境下,他可以到 
		/etc, /usr/local, /home 等其他重要目录底下去察看档案资料,尤其是很重要的 /etc/ 底下的设定档,如 
		/etc/passwd 等等。如果您没有做好一些档案权限的管理与保护,那他就有办法取得系统的某些重要资讯,
		用来『入侵』您的系统呢!所以在 chroot 的环境下,当然就比较安全一些咯!<br />
		</div>
	</div>

	<hr /><a NAME="theory_port"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class="text_h2">FTP 的运作流程与使用到的埠口</span><br />
	<div class=block2>
		FTP 的传输使用的是较为可靠的 TCP 封包协定,在前几章的<a href="0110network_basic.php">网路基础</a>当中我们谈过,
		TCP 这种封包格式在建立连线前会先进行三向交握的。不过 FTP 伺服器是比较麻烦一些,因为<span class=text_import2>
		FTP 伺服器使用了两个连线,分别是命令通道与资料流通道 (ftp-data) 。</span>这两个连线都需要经过三向交握,
		因为是 TCP 封包嘛!那么这两个连线通道的关系是如何呢?底下我们先以
		<span class=text_import2>FTP 预设的主动式 (active) 连线</span>来作个简略的说明棉∶<br /><br />

		<a name="fig_01"></a><center><img src="0410vsftpd/connect_active.png"
		title="FTP 伺服器的主动式连线示意图"
		alt="FTP 伺服器的主动式连线示意图"><br />
		图一、FTP 伺服器的主动式连线示意图</center><br />

		简单的连线就如上图所示,至于连线的步骤是这样的∶<br />
		<ol>
		<li><span class=text_import2>建立命令通道的连线</span><br />
		如上图一所示,用户端会随机取一个大于 1024 以上的埠口 (port AA) 来与 FTP 伺服器端的 port 21 达成连线,
		这个过程当然需要三向交握了!达成连线后用户端便可以透过这个连线来对 FTP 伺服器下达指令,
		包括查询档名、下载、上传等等指令都是利用这个通道来下达的;</li><br />

		<li><span class=text_import2>通知 FTP 伺服器端使用 active 且告知连接的埠号</span><br />
		FTP 伺服器的 21 埠号主要用在命令的下达,但是当牵涉到资料流时,就不是使用这个连线了。
		用户端在需要资料的情况下,会告知伺服器端要用什么方式来连线,如果是主动式 (active) 连线时,
		用户端会先随机启用一个埠口 (图一当中的 port BB) ,且透过命令通道告知 FTP 伺服器这两个资讯,并等待 FTP 伺服器的连线;
		</li><br />

		<li><span class=text_import2>FTP 伺服器『主动』向用户端连线</span><br />
		FTP 伺服器由命令通道了解用户端的需求后,会主动的由 20 这个埠号向用户端的 port BB 连线,
		这个连线当然也会经过三向交握啦!此时 FTP 的用户端与伺服器端共会建立两条连线,分别用在命令的下达与资料的传递。
		而预设 FTP 伺服器端使用的主动连线埠号就是 port 20 棉!</li>
		</ol>

		如此一来则成功的建立起『命令』与『资料传输』两个通道!不过,要注意的是,
		『资料传输通道』是在有资料传输的行为时才会建立的通道喔!并不是一开始连接到 FTP 
		伺服器就立刻建立的通道呢!留意一下棉!<br /><br />

		<hr /><li><span class=text_import1>使用到的埠号</span></li>
		<div class=block2>
		利用上述的说明来整理一下 FTP 会使用到的埠号主要有∶<br />
		<ul><span class=text_import2>
		<li>命令通道的 ftp (预设为 port 21) 与
		<li>资料传输的 ftp-data (预设为port 20)。
		</span></ul>
		再强调一次,这两个埠口的工作是不一样的,而且,重要的是<span class=text_import2>两者的连线方向是不一样的</span>!
		首先, port 21 主要接受来自用户端的主动连线,至于 port 20 则为 FTP 伺服器主动连线至用户端呢!
		这样的情况在伺服器与用户端两者同时为公共 IP (Public IP) 的网际网路上面通常没有太大的问题,不过,
		万一你的用户端端是在防火墙后端,或者是 NAT 主机后端呢?会有什么问题发生呢?底下我们来谈一谈这个严重的问题!<br /><br />
		</div>

		<hr /><li><span class=text_import1>在 FTP 伺服器与用户端之间具有防火墙的连线问题∶</span></li>
		<div class=block2>
		还记得我们的<a href="0250simple_firewall.php">防火墙</a>章节吧?一般来说,很多的区域网路 (LAN) 
		都会使用防火墙 (iptables) 的 NAT 功能,那么在 NAT 主机后端的 FTP 用户如何连接到 FTP 伺服器呢?
		我们可以简单的以下图来说明∶<br /><br />

		<a name="fig_02"></a><center><img src="0410vsftpd/connect_active_nat.png"
		title="若 FTP 用户端与伺服器端连线中间具有防火墙的连线状态"
		alt="若 FTP 用户端与伺服器端连线中间具有防火墙的连线状态"><br />
		图二、若 FTP 用户端与伺服器端连线中间具有防火墙的连线状态</center>

		<ol>
		<li><span class=text_import2>命令通道的建立∶</span><br />
		因为 NAT 主机会主动的记录由内部送往外部的连线资讯,而由于命令通道的建立是由用户端向伺服器端连线的,
		因此这一条连线可以顺利的建立起来的;</li><br />

		<li><span class=text_import2>资料通道建立时的通知∶</span><br />
		同样的,用户端主机会先启用 port BB ,并透过命令通道告知 FTP 伺服器,且等待主机端的主动连线;</li><br />

		<li><span class=text_import2>主机的主动连线问题∶</span><br />
		但是由于透过 NAT 主机的转换后,FTP 伺服器只能得知 NAT 主机的 IP 而不是用户端的 IP ,
		因此 FTP 伺服器会以 port 20 主动的向 NAT 主机的 port BB 发送主动连线的要求。
		但你的 NAT 主机并没有启动 port BB 来监听 FTP 伺服器的连线啊!</li>
		</ol>

		了解问题的所在了吗?在 FTP 的主动式连线当中,NAT 主机将会被视为用户端,但 NAT 主机其实并非用户端啊,
		这就造成问题了。如果你曾经在 IP 分享器后面连接某些 FTP 伺服器时,可能偶尔会发现明明就连接上 FTP 伺服器了
		(命令通道已建立),但是就是无法取得档案名称的列表,而是在超过一段时间后显示『<span class=text_import2>
		Can't build data connection: Connection refused,无法进行资料传输</span>』之类的讯息,
		那肯定就是这个原因所造成的困扰了。<br /><br />

		那有没有办法可以克服这个问题呢?难道真的在 Linux NAT 主机后面就一定无法使用 FTP 吗?当然不是!
		目前有两个简易的方法可以克服这个问题∶<br />

		<ul>
		<li><span class=text_import2>使用 iptables 所提供的 FTP 侦测模组∶</span><br />
		其实 iptables 早就提供了许多好用的模组了,这个 FTP 当然不会被错过!
		你可以使用 <a href="../linux_basic/0510osloader.php#kernel_load">modprobe</a> 这个指令来载入
		ip_conntrack_ftp 及 ip_nat_ftp 等模组,这几个模组会主动的分析『目标是 port 21 的连线』资讯,
		所以可以得到 port BB 的资料,此时若接受到 FTP 伺服器的主动连线,就能够将该封包导向正确的后端主机了! ^_^<br /><br />

		不过,如果你连结的目标 FTP 伺服器他的命令通道预设埠号并非标准的 21 埠号时 (例如某些地下 FTP 伺服器),
		那么这两个模组就无法顺利解析出来了,这样说,理解吗?<br /><br />

		<li><span class=text_import2>用户端选择被动式 (Passive) 连线模式∶</span><br />
		除了主动式连线之外,FTP 还提供一种称为被动式连线的模式,什么是被动式呢?
		既然主动式是由伺服器向用户端连线,反过来讲,被动式就是由用户端向伺服器端发起连线的棉!
		既然是由用户端发起连线的,那自然就不需要考虑来自 port 20 的连线啦!关于被动式连线模式将在下一小节介绍喔!
		</ul>
		</div>
	</div>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -