用LINUX架设FTP服务器
以前自⭕己弄的【jǐ nòng de】🤨东西,现在帖出来【chū lái】,希望对🛹大家有【dà jiā yǒu】点用:)
1.1 什么是FTP:文件传输协议原理
1.1.1 命令选择
1.1.2 命令格式
1.2 wu-Ftpd的安装
1.3 让FTP服务器运转起来
1.4 配置文件的设置
1.4.1 /etc/ftpaccess的设置【de shè zhì】👍
1.4.2 /etc/ftpusers和【hé】🐹/etc/ftphosts的设置
1.4.3 /etc/ftpconversions设置【shè zhì】🐚
1.4.1 wu-ftp的相关程序
1.5 开设只能FTP的帐户
1.6 设置虚拟FTP主机
什么是FTP:文件传输协议原理
互联网【hù lián wǎng】文件【jiàn】传输协议(File Transfer Protocol ,FTP) 标准📛是在【shì zài】😈RFC959说【shuō】明的。该协议定义了一个从👹远程计【yuǎn chéng jì】算机系统【jī xì tǒng】和本🕺地计算🐼机系统【jī xì tǒng】之间传输文件【shū wén jiàn】👝的一个标准📛。一般来【yī bān lái】说【shuō】,传输文件【shū wén jiàn】👝的用户需要先【xū yào xiān】经过认证以后才能登录网站🕕,然后方能访问🐓在远程☔服务器【fú wù qì】🏹的文件【jiàn】。而大多数的🍘FTP服务器【fú wù qì】🏹往往提【wǎng wǎng tí】供一个💸GUEST的公共帐户来允许没【yǔn xǔ méi】🌷有远程服务器【fú wù qì】🏹的用户可以访【kě yǐ fǎng】问该【wèn gāi】FTP服务器【fú wù qì】🏹。
一个FTP会话通【huì huà tōng】🆘常包括五个软🎻件元素【jiàn yuán sù】的交互。
用户接【yòng hù jiē】口👂 提供了【tí gòng le】一个用😋户接口👂并使用客户端协议解【xié yì jiě】释器的服务🗡
客户【kè hù】 PI 客户【kè hù】协议解释器,其项远🌃程服务【chéng fú wù】器协议【qì xié yì】🕦机发送命令并🔁且驱动😷客户【kè hù】数据传输过程【guò chéng】
服务器【fú wù qì】💓PI 服务器【fú wù qì】💓协议解🥘释器,响应客户协议【hù xié yì】机发出的命令并驱动【bìng qū dòng】服务器【fú wù qì】💓端数据【duān shù jù】🏇传输过🌪程
客户【kè hù】 DTP 客户数【kè hù shù】据传输⚪过程,其负责完成和服务器数据传输⚪过程及【guò chéng jí】客户【kè hù】💄端本地【duān běn dì】文件系⬅统的通【tǒng de tōng】🐥信🥈
服务DTP 服务器【fú wù qì】数据传输过程【shū guò chéng】,其负责完成和【wán chéng hé】客户数【kè hù shù】🖍据传输过程【shū guò chéng】及✂服务器【fú wù qì】端文件🕡系统的通信❕
在【zài】🍰RFC 959中,一般使【yī bān shǐ】🌨用用户这个名词来指【cí lái zhǐ】🍩代客户。RFC 959定义了客户PI和服务【hé fú wù】器PI交互的💼方式和【fāng shì hé】规范。用户接🍱口与PI和DTP交互的💼机理都【jī lǐ dōu】📦并不是【bìng bú shì】协议标💷准的一部分【bù fèn】。PI和DTP往往通常是在【zài】🍰同一个🌿程序模【chéng xù mó】块中实🍀现的。
在FTP会话中【huì huà zhōng】😹,一共会🚝存在有两个独立的网【lì de wǎng】络连接🍴,一个是由两端的PI使用的,另一个【lìng yī gè】是由两端的DTP使用的。PI之间的【zhī jiān de】📢连接一🥛般被称【bān bèi chēng】🏯作控制【zuò kòng zhì】连接🍴(control connection),DTP之间的【zhī jiān de】📢连接被🍜称做数【chēng zuò shù】据连接【jù lián jiē】😦(data connection)
使用TCP服务的控制和数据连接
通常情况下,FTO服务器监听端口号【kǒu hào】21来等待控制连接建立【jiē jiàn lì】请求【qǐng qiú】🈚。而数据【ér shù jù】✔连接端口号【kǒu hào】的🏬选择依📬赖于控🎓制连接上命令🌈。通常是客户发【kè hù fā】送一个🦇控制消🎐息来指【xī lái zhǐ】定客户【dìng kè hù】监听并【jiān tīng bìng】等待服务器端发送数💵据连接建立【jiē jiàn lì】请求【qǐng qiú】🈚的端口【de duān kǒu】号【hào】。
对数据🥐传输和😈控制命令传输🏗来使用📆不同的独立连【dú lì lián】接有如【rú】🌒下优点:两个连【liǎng gè lián】接可以【jiē kě yǐ】选择不同的合【tóng de hé】适服务【shì fú wù】质量【zhì liàng】🤛,如【rú】🌒:对控制连接来【lián jiē lái】说高需要更小🚕的延迟时间,对数据🥐连接来【lián jiē lái】说需要更大的数据吞吐量🌨;而且可【ér qiě kě】以避免实现数据流中【jù liú zhōng】的命令🏄的通明🌫性及逃逸【yì】🍌。
当传输【dāng chuán shū】📇建立时【jiàn lì shí】,总是由🤗客户端首先发起🐍。然而客😢户和服务器🐍都可能是数据【shì shù jù】发💳送者⛱。除了传【chú le chuán】输用户请求下🙀载文件【zǎi wén jiàn】,数据传输过程【shū guò chéng】同样在客户端请求列服务器🐍端目录【duān mù lù】结构时建立【jiàn lì】。
1.1.1 命令选择
当一个【dāng yī gè】传输建立时,一般通常需要🛢指定四【zhǐ dìng sì】个方面【gè fāng miàn】⤵的属性🆕:
文件类型
该属性指定如【zhǐ dìng rú】何将文⛑件的数据匹配【jù pǐ pèi】成适于传输的🚄格式【gé shì】👦,一共有四种可【sì zhǒng kě】🗺能的选择:
ASCII文件类型
在发送💨端【duān】😩,文件从本地文本文件格式转【gé shì zhuǎn】换为 NVT ASCII格式【gé shì】,每行结【měi háng jié】束有一个CR/LF对来标🐁识🏕。 在接收📉端【duān】😩,再被转换为本地的文本格式【běn gé shì】。
这说明🔛了为什【le wéi shí】🔐么Unix主机之间传输【jiān chuán shū】文本文件为何传输的【chuán shū de】数据量【shù jù liàng】要大于文件的【wén jiàn de】实际大💴小。若传输【ruò chuán shū】一段端【yī duàn duān】或传输两端都不使用🍙ASCII文本编码【mǎ】,则是应📨该由数据传输🔆过程来实现本地编码【mǎ】🐎和NVT ASCII 编码【mǎ】之📙间的转🏁换【huàn】。
EBCDIC文件类型
类似于【lèi sì yú】🎌ASCII,区别仅仅上使【jǐn shàng shǐ】用🦀EBCDIC字符编码
图象 (或二进制)文件类型
文件以🎫本地传输内容【shū nèi róng】传输,在远端【zài yuǎn duān】🗄以同本地完全相同的🐩内容存储【chǔ】。
本地文件系统
用在字【yòng zài zì】节大小【jiē dà xiǎo】🛤不是【bú shì】8位的环境下。没字节位数由发送者😭指定👕。
在实际【zài shí jì】应用中,只有ASCII和图象📼格式使【gé shì shǐ】🎭用的较🕜多【duō】。
格式控制
该属性是和将🌠文本文件最后【jiàn zuì hòu】🚶传送到打印设备相关👳的,其中有【qí zhōng yǒu】多种方【duō zhǒng fāng】式来实【shì lái shí】现将垂直格式【shì】信息编🗜码到文件中🐈,包括指【bāo kuò zhǐ】㊙示一个新页开【xīn yè kāi】🎰始的方式【shì】。有如下方式可【fāng shì kě】供选择🦄:
无须打印格式控制,这是缺省值
Telnet打印控制,在telnet协议中【xié yì zhōng】定义的🥡控制字【kòng zhì zì】🍿符包含在数据【zài shù jù】🚎流中。.
Fortran打印控制,
该属性在实际中很少使用。
结构
文件可【wén jiàn kě】🦏以拥有【yǐ yōng yǒu】🌥内部结构【gòu】,在传输中该结🔠构【gòu】被保🐀留【liú】🛃。由数据传输过程来负责在传输中的结构【gòu】及本地结构之间【gòu zhī jiān】相互匹配【pèi】,有三种可能性🚳:
文件结构
这实际【zhè shí jì】上意味着文件【zhe wén jiàn】🈸被看作没有内部结构的连续🆚的字节【de zì jiē】👗流。
记录结构
文件是【wén jiàn shì】有一系列记录组成的【zǔ chéng de】结构【jié gòu】⛅。这只适🛹用于文本文件🌂。
页面结构
也可以称做块结构🐅。每一页都伴随一个页【yī gè yè】号来传😄输【shū】,从而以【cóng ér yǐ】顺序的🐛方式来【fāng shì lái】🚺完成传输【shū】。
页面结构很少【gòu hěn shǎo】🉑在实际中遇到。记录结♊构也不【gòu yě bú】是很常【shì hěn cháng】见。对于文本文件【běn wén jiàn】使用🏐ASCII文件类【wén jiàn lèi】型可以🐰获得相同的效🍛果。
传输模式
该属性可以取三个不同的值:
流模式
文件的以字节流的方式传输。
块模式
文件以一个块连接一个块的方式传【fāng shì chuán】💡输🍭,每个块🥁的开头【de kāi tóu】都有一【dōu yǒu yī】个头。
压缩模式
一个简单的运🈯程长度【chéng zhǎng dù】压缩编⛏码被应用,来压缩连续的💏相同的【xiàng tóng de】字节【zì jiē】。
实际中,一般只有流模式被使🧣用【yòng】🐄。而压缩【ér yā suō】一般通过使用【guò shǐ yòng】🎈各种其他的工【tā de gōng】具程序来获得⛔。
当一次传输被🏝建立【jiàn lì】🧢,客户端🍩一般指【yī bān zhǐ】定一个【dìng yī gè】或多个【huò duō gè】🐨前面说明的属性。若服务💦器端不【qì duān bú】能支持【néng zhī chí】某个选项,服务器🚰将用一个错误信息来【xìn xī lái】响应客户端🍩,并不具📮有协商【yǒu xié shāng】机制。
FTP提供了【tí gòng le】充足的【chōng zú de】命令来🙎使用户【shǐ yòng hù】和远程🆎建立连接并访问远程文件系🌔统。
1.1.2 命令格式
命令以💺NVT ASCII串的格💀式被传输。每个命令以💺三个或【sān gè huò】四个大写的【xiě de】NVT ASCII字符开【zì fú kāi】✉始【shǐ】,后面带有选项🧘参数和【cān shù hé】一个CR/LF对来标【duì lái biāo】❤识命令结束
应答由三个NVT ASCII数字及【shù zì jí】🍭一个选项消息组成【zǔ chéng】🛁。
一个长【yī gè zhǎng】的应答也许会🍹有多个消息组【xiāo xī zǔ】成【chéng】,第一个【dì yī gè】消息的三个数🥦字后带【zì hòu dài】有一个【yǒu yī gè】破折号🧟,最后的消息不🕡带有破【dài yǒu pò】折号🧟。中间的🥈消息无【xiāo xī wú】须携带Ⓜ三个数🥦字,但是如👂果带了【guǒ dài le】三个数🥦字,则也需要破折🦕号⬛。
下面是🤦所有的【suǒ yǒu de】🗿命令的列表🍳。带有星【dài yǒu xīng】🦁号的命令一般🛑很少使用,所以往往在具【wǎng zài jù】体实现【tǐ shí xiàn】中不支持【chí】。
String Meaning
ABOR 放弃传输
*ACCT 某些系统将帐号和用户与文【hù yǔ wén】📕件系统【jiàn xì tǒng】⤴相关联
*ALLO 为即将【wéi jí jiāng】传送的文件分配空间。后面携带的参【dài de cān】🥡数来确🔠定字节【dìng zì jiē】🈴数
*APPE 将文件附加到😔已经存在的文【zài de wén】🎴件后面【jiàn hòu miàn】
CDUP 在远程系统上将当前【jiāng dāng qián】🏠目录切【mù lù qiē】🐚换到上级父目🐟录【lù】
CWD 改变远程系统的工作目录
DELE 删除远程系统的文件
HELP 读取服务器的【wù qì de】👶帮助信🐟息⏱,如【rú】:支持的命令的列表【liè biǎo】
LIST 在一个【zài yī gè】🚟新建立的数据连接上发送当【fā sòng dāng】🍁前工作🚆目录下的文件【de wén jiàn】名列表
MKD 创建目录
MODE 指定传【zhǐ dìng chuán】输模式🌿,可携带的参数是😝:S、B或【huò】 C.
NLST 在一个新建立的🦍数据连接上发【jiē shàng fā】送一🌩个当前目录下【mù lù xià】🖌的🦍“完全”的目录【de mù lù】🤷列表【liè biǎo】
NOOP 空操作,防止连接断掉
PASS 提供一【tí gòng yī】个用户🕡登录密码🧡,必须立【bì xū lì】即跟随🐉在【zài】USER命令后
*PASV 指定服【zhǐ dìng fú】务器数💁据传输过程监【guò chéng jiān】🍬听等待客户端的数据连接连接建立🎿请求【qǐng qiú】
PORT 指定客【zhǐ dìng kè】🐐户端监🚤听等待【tīng děng dài】🍤服务器端建立的连接的端口【de duān kǒu】号
PWD 显示服务器端的当前工作目录名
QUIT 退出登录并终止连接
*REIN 重新初😭始化,退出登录但是【lù dàn shì】并不断开连接【kāi lián jiē】😳,后面必👮须随后✒发出一个新的【gè xīn de】USER命令【mìng lìng】
*REST 从服务器的一【qì de yī】🚙个标识🏄处重新【chù chóng xīn】开始传输
RETR 从远程系统取回一个文件
RMD 删除一个目录
*RNFR 指定要【zhǐ dìng yào】🚃被命名的文件的老的【de lǎo de】🥢路径名⛅,随后必须是一个【gè】RNTO命令
*RNTO 指定要被命名🌶的文件【de wén jiàn】的新的路径名【lù jìng míng】🐧
*SITE 站点特有的服务器提供的服务
*SMNT 结构加📕载【zǎi】,提供一个文件🕺系统结构的远【gòu de yuǎn】程系统路径名【lù jìng míng】🏌
*STAT 状态信息
STOR 上载一【shàng zǎi yī】🕷个文件🍘到服务【dào fú wù】器上,若文件已经存🛫在则覆盖【gài】
*STOU 上载一【shàng zǎi yī】个文件【gè wén jiàn】到服务💔器上🐐,不覆盖【bú fù gài】🗼已经存在的文件
STRU 指定文【zhǐ dìng wén】件结构,参数可【cān shù kě】🥚以是💲F、R或P.
*SYST 报告远程系统的操作系统类型
TYPE 指定文件类型👤,参数可【cān shù kě】以是A、E、I、L只有📃TYPE A和【hé】TYPE I常用【cháng yòng】💭
控制连接命令应答有如下形式:
Type Description
1yz 主动初【zhǔ dòng chū】步应答【yīng dá】📋,在发送另一个【lìng yī gè】🌀命令以前等待🦔另一个【lìng yī gè】🌀应答【yīng dá】📋
2yz 主动最【zhǔ dòng zuì】后应答🔶,最后一【zuì hòu yī】个命令成功结🙀束
3yz 主动中间应答🤴,必须再【bì xū zài】发送一🏾个命令【gè mìng lìng】
4yz 暂时被动应答📚,要求的动作当【dòng zuò dāng】时不能完成【wán chéng】🤯,但可以【dàn kě yǐ】重试🍍
5yz 永久被【yǒng jiǔ bèi】🐖动应答,要求的🎵动作不㊙能完成【néng wán chéng】,不应该重试【chóng shì】
"y"数字编【shù zì biān】码进一【mǎ jìn yī】🍑步的信🍥息
Digit Meaning
0 语法错误
1 信息
2 连接状态
3 认证和记帐
4 保留
5 File s文件系统状态
下面是一些典型的消息:
Number Meaning
125 数据连接打开,传输开始
200 命令OK
331 用户名OK 需要输入密码
425 不能打开数据连接
452 错误写文件
500 语法错误-不可识别的命
具体的详细情况可以参见RFC
wu-Ftpd的官方【de guān fāng】权威站🚈点地址是【shì】🏖:http://www.wu-ftpd.org/。
1.2 wu-Ftpd的安装
当前【dāng qián】,Linux环境下【huán jìng xià】有许多ftp服务器软件可供选择,但是目🖨前最常💉见的仍【jiàn de réng】然是😦wu-Ftpd服务器。这里主【zhè lǐ zhǔ】♟要讨论【yào tǎo lùn】该软件的安装🌿和配置。
一般来【yī bān lái】说🏰,在安装【zài ān zhuāng】🦎了linux时,缺省都【quē shěng dōu】🔠会自动🌉安装【ān zhuāng】🦎wu-ftpd服务器【fú wù qì】,但是有👯时候为了某种🔹需要也需要自己亲自重新安🏬装该服【zhuāng gāi fú】务器软【wù qì ruǎn】件🎹。安装【ān zhuāng】🦎wu-Ftpd有两方🔑式,一种是安装【ān zhuāng】🦎rpm形式的【xíng shì de】发布包🚷;一种是自己动【zì jǐ dòng】手去编译生成Ftp服务器【fú wù qì】。
rpm包可以【yǐ】在【zài】http://rpmfind.net/linux/RPM/WByName.html处下载得到,以【yǐ】rpm包方式【bāo fāng shì】🐼安装非♒常简单🤧,只需要在按下【zài àn xià】面的🖇简单的几⛑个步骤【gè bù zhòu】🥄就可以【yǐ】完成🤭,假设下【jiǎ shè xià】载得到的🖇rpm包存放【bāo cún fàng】在【zài】/tmp目录下:
#cd /tmp
#rpm -ivh wu-f
关键词:LINUX,FTP服务器【fú wù qì】🚇
阅读本文后您有什么感想? 已有 人给出评价!
- 1
- 1
- 1
- 1
- 3
- 1