大小: 1460
备注:
|
大小: 4607
备注:
|
删除的内容标记成这样。 | 加入的内容标记成这样。 |
行号 17: | 行号 17: |
Debian上带了众多FTP服务端软件,各有特色。vsftpd是FTP服务程序的一种,以安全和快速著称。输入如下命令即可安装vsftpd: {{{ aptitude install vsftpd }}} 打开/etc/vsftpd.conf可以对vsftpd进行配置:{{{ anonymous_enable=YES # 是否允许匿名访问 local_enable=YES #是否允许本地用户登录 write_enable=YES #添加该行可以让客户端上传文件 anon_upload_enable=YES #是否允许匿名用户上传文件 anon_mkdir_write_enable=YES #是否允许匿名用户创建目录 chroot_local_user=YES #登录后是否转到登录用户的目录(否则会显示服务器的根目录) ftpd_banner=Welcome to blah FTP service. #登录服务器时的欢迎词 }}} 修改配置后使用如下命令重新加载配置文件:{{{ /etc/init.d/vsftpd reload }}} vsftpd没有内置虚拟路径的功能。在设置了chroot后,vsftpd登录后显示的目录就是用户的目录。要设置共享的目录,可以使用mount命令。比如登录用户为ftp,登录后显示的目录为/home/ftp,需要共享的目录为/music,则可以这样设置:{{{ mkdir /home/ftp/music mount --bind /music /home/ftp/music }}} == 客户端连接 == 假设服务器地址是169.254.235.235。在Windows上打开IE,在地址栏输入下列地址即可打开服务器:{{{ ftp://169.254.235.235/ }}} 在Linux上,可以使用gftp软件连接ftp服务器。如下图所示: {{attachment:gftp.png}} == 文件名乱码 == 虽然FTP协议建议文件名使用UTF8进行编码,但是很多FTP服务端和客户端并不遵守这一建议。如果在ftp服务器上使用的文件名编码和客户端本地编码不同,会造成显示的文件名乱码。比如Linux服务器上大多使用UTF8编码,而windows上的FTP客户端不支持UTF8编码,就会造成中文文件名乱码。这个问题有如下几种解决方法: * 使用全英文的文件名。大多数公用的FTP服务器都遵守这一约定,中文都由拼音来表示。 * 如果FTP客户端只用Windows客户端,都采用GBK编码,且文件都由客户端上传,在服务器上不对文件做其他用途,则可以不需要进行特殊处理。这时,服务器上存放的所有为客户端上传,都采用GBK编码,用Windows客户端浏览不会乱码。但是,这时如果在服务端上浏览这些文件会发现文件名是乱码。如果还有其他非GBK编码的客户端连接服务器,也会发现文件名是乱码。 * 如果客户端全部使用GBK编码,但是服务端要对文件做其他操作,比如还需拿来做Samba共享。此时,可以采用对FTP服务器打补丁的方法,补丁的功能是在文件上传、下载时,自动进行文件编码的转换。客户端上指定的GBK编码的文件名,自动被转换成服务器上的UTF8编码,保证存放在服务器硬盘上的文件名采用UTF8编码,以便做其他处理。 * 全部使用支持UTF-8编码的客户端,所有文件名采用UTF8编码。Windows下支持UTF8的客户端有SmartFTP等。 |
|
行号 20: | 行号 62: |
* vsftp: http://vsftpd.beasts.org/ |
1. 概述
FTP(File Transfer Protocol)是一种专用于传输文件的网络协议。有很多服务端程序和客户端程序支持FTP协议。但是FTP有很多缺陷:
- 密码和文件在传输中都没有加密,容易被窃取
- 需要使用多条TCP/IP连接,一条进行控制,此外每个上传、下载、列目录操作都要建立一个额外连接。因此,防火墙需要额外的配置才能让FTP正常工作。
- 客户端如果使用Port方式(或称为Active方式)连接服务器,客户端需要开放所有端口,这样就没有办法在客户端使用防火墙。
- 有可能使用FTP协议内置的FXP特性,使服务器成为代理。
- FTP协议有很大的延时,因为建立一个传输连接,需要交互很多命令。
- 接收端没有完整性检查。当传输被打断时,接收端无法确认传输是否真正完成了。
- 不能传输文件的日期时间属性。上传的文件会使用当前时间作为其时间属性。
- 文件名编码问题。FTP协议标准建议使用UTF-8作为文件名编码,但是很少有Windows客户端支持这个标准,从而造成文件名乱码问题。
鉴于FTP协议以上众多缺陷,在不必使用FTP协议时尽量不要使用它。需要传输文件时,可以用SFTP、samba等代替FTP。
2. 安装
Debian上带了众多FTP服务端软件,各有特色。vsftpd是FTP服务程序的一种,以安全和快速著称。输入如下命令即可安装vsftpd:
aptitude install vsftpd
打开/etc/vsftpd.conf可以对vsftpd进行配置:
anonymous_enable=YES # 是否允许匿名访问 local_enable=YES #是否允许本地用户登录 write_enable=YES #添加该行可以让客户端上传文件 anon_upload_enable=YES #是否允许匿名用户上传文件 anon_mkdir_write_enable=YES #是否允许匿名用户创建目录 chroot_local_user=YES #登录后是否转到登录用户的目录(否则会显示服务器的根目录) ftpd_banner=Welcome to blah FTP service. #登录服务器时的欢迎词
修改配置后使用如下命令重新加载配置文件:
/etc/init.d/vsftpd reload
vsftpd没有内置虚拟路径的功能。在设置了chroot后,vsftpd登录后显示的目录就是用户的目录。要设置共享的目录,可以使用mount命令。比如登录用户为ftp,登录后显示的目录为/home/ftp,需要共享的目录为/music,则可以这样设置:
mkdir /home/ftp/music mount --bind /music /home/ftp/music
3. 客户端连接
假设服务器地址是169.254.235.235。在Windows上打开IE,在地址栏输入下列地址即可打开服务器:
ftp://169.254.235.235/
在Linux上,可以使用gftp软件连接ftp服务器。如下图所示:
4. 文件名乱码
虽然FTP协议建议文件名使用UTF8进行编码,但是很多FTP服务端和客户端并不遵守这一建议。如果在ftp服务器上使用的文件名编码和客户端本地编码不同,会造成显示的文件名乱码。比如Linux服务器上大多使用UTF8编码,而windows上的FTP客户端不支持UTF8编码,就会造成中文文件名乱码。这个问题有如下几种解决方法:
- 使用全英文的文件名。大多数公用的FTP服务器都遵守这一约定,中文都由拼音来表示。
- 如果FTP客户端只用Windows客户端,都采用GBK编码,且文件都由客户端上传,在服务器上不对文件做其他用途,则可以不需要进行特殊处理。这时,服务器上存放的所有为客户端上传,都采用GBK编码,用Windows客户端浏览不会乱码。但是,这时如果在服务端上浏览这些文件会发现文件名是乱码。如果还有其他非GBK编码的客户端连接服务器,也会发现文件名是乱码。
- 如果客户端全部使用GBK编码,但是服务端要对文件做其他操作,比如还需拿来做Samba共享。此时,可以采用对FTP服务器打补丁的方法,补丁的功能是在文件上传、下载时,自动进行文件编码的转换。客户端上指定的GBK编码的文件名,自动被转换成服务器上的UTF8编码,保证存放在服务器硬盘上的文件名采用UTF8编码,以便做其他处理。
- 全部使用支持UTF-8编码的客户端,所有文件名采用UTF8编码。Windows下支持UTF8的客户端有SmartFTP等。
5. 参考
SFTP:ssh
vsftp: http://vsftpd.beasts.org/