ftp

1. 概述

FTP(File Transfer Protocol)是一种专用于传输文件的网络协议。有很多服务端程序和客户端程序支持FTP协议。但是FTP有很多缺陷:

鉴于FTP协议以上众多缺陷,在不必使用FTP协议时尽量不要使用它。需要传输文件时,可以用SFTPsamba等代替FTP。

2. 安装

Debian上带了众多FTP服务端软件,各有特色。vsftpd是FTP服务程序的一种,以安全和快速著称。输入如下命令即可安装vsftpd:

aptitude install vsftpd

vsftpd使用的用户帐号就是服务器上的用户帐号。安装过程中会自动创建一个名为ftp的帐号,用作匿名用户登录时使用的帐号。要做其他配置,可以打开/etc/vsftpd.conf对vsftpd进行配置:

#anonymous_enable=YES                         #是否允许匿名ftp,如否,则选择NO;
#local_enable=YES                             #是否允许本地用户登陆;
#local_umask=022                              #设置本地用户的文件掩码为缺省022,默认值为077;
#anon_upload_enable=YES                       #是否允许匿名上传文件;
#anon_mkdir_write_enable=YES                  #是否允许匿名用户有创建目录的权利;
#dirmessage_enable=YES                        #是否显示目录说明文件,缺省是YES,但需要手工创建.message文件;
#xferlog_enable=YES                           #是否记录ftp传输过程;
#connect_from_port_20=YES                     #是否确信端口传输来自20(ftp-data);
#chown_username=username                      #是否改变上传文件的属主,如果需要,则输入一个系统用户名,可以把上传的文件都改成root属主;
#xferlog_file=/var/log/vsftpd.log             #ftp传输日志的路径和名字缺省是/var/log/vsftpd.log;
#xferlog_std_format=YES                       #是否使用标准的ftp xferlog模式;
#idle_session_timeout=600                     #设置缺省的断开不活跃会话时间;
#data_connection_timeout=120                  #设置数据传输超时时间;
#nopriv_user=ftpsecure                        #运行vsftpd需要的非特权系统用户,缺省是nobody;
#ascii_upload_enable=YES                      #是否使用ASCII方式上传文件;
#ascii_download_enable=YES                    #是否使用ASCII方式下载文件;
#ftpd_banner=Welcome to shuke FTP service     #定制欢迎信息;
#deny_email_enable=YES                        #是否禁止匿名用户使用某些邮件地址;
#banned_email_file=/etc/vsftpd.banned_emails  #如果禁止匿名用户使用某些邮件地址,则输入禁止的邮件地址的路径和文件名;
#chroot_list_enable=YES                       #是否将系统用户限制在自己的home目录下;
#chroot_list_file=/etc/vsftpd.chroot_list     #如果限制系统用户在home目录下,则在列表中写出被禁止的用户列表;
#max_clients=Number                           #如果以standalone模式启动,那么,只有$Number个用户可以连接,其他用户将得到错误信息,缺省是0,不限制用户数;
#message_file                                 #设置访问一个目录时获得的目录信息文件的文件名,缺省是.message. 

如果要设置相应参数,需去掉行首的"#".

修改配置后使用如下命令重新加载配置文件:

/etc/init.d/vsftpd reload

vsftpd没有内置虚拟路径的功能。在设置了chroot后,vsftpd登录后显示的目录就是用户的目录。要设置共享的目录,可以使用mount命令。比如登录用户为ftp,登录后显示的目录为/home/ftp,需要共享的目录为/music,则可以这样设置:

mkdir /home/ftp/music
mount --bind /music /home/ftp/music

其他的ftp服务端软件还有proftpd、pure-ftpd、wu-ftpd等,可以根据不同的需求选用。

3. 客户端连接

假设服务器地址是169.254.235.235。在Windows上打开IE,在地址栏输入下列地址即可打开服务器:

ftp://169.254.235.235/

在Linux上,可以使用gftp软件连接ftp服务器。如下图所示:

gftp.png

4. 文件名乱码

虽然FTP协议建议文件名使用UTF8进行编码,但是很多FTP服务端和客户端并不遵守这一建议。如果在ftp服务器上使用的文件名编码和客户端本地编码不同,会造成显示的文件名乱码。比如Linux服务器上大多使用UTF8编码,而windows上的FTP客户端不支持UTF8编码,就会造成中文文件名乱码。这个问题有如下几种解决方法:

5. 参考

ftp (2008-09-09 09:16:40由60编辑)