当前位置: > Linux服务器 > ftp >

CentOS 6.4 中 Vsftpd 解决中文乱码过程

时间:2014-08-25 12:47来源:linux.it.net.cn 作者:it

我单位因为操作系统升级,导致前期部署FTP应用服务器产生的应用数据采用Windows客户端访问服务器出现乱码。后经管理员采用源码方式编译安装将问题解决,现将解决方法进行总结,希望能为那些UTF-8与GBK不兼容而头疼的系统管理员们有所帮助。

一、系统简介:单位前期FTP使用REDHAT公司提供的RHEL5.5操作系统,升级后操作系统为CentOS6.4。

二、乱码解决过程

1、首先使用 rpm -e vsftpd卸载系统安装的默认VSFTPD应用服务器:


  1. [root@localhost ~]# rpm -e vsftpd 

2、从http://vault.centos.org/6.3/updates/Source/SPackages/网站下载vsftpd-2.2.2-11.el6_3.1.src.rpm 源码包。

3、使用 rpm -ivh vsftpd-2.2.2-11.el6_3.1.src.rpm 对该包进行安装:


  1. [root@localhost birdofprey]# rpm -ivh vsftpd-2.2.2-11.el6_3.1.src.rpm 

安装过程中系统会提示类似如下错误:


  1. warning: vsftpd-2.2.2-11.el6_3.1.src.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY 
  2. 1:vsftpd warning: user mockbuild does not exist - using root 
  3. ########################################### [100%] 
  4. warning: user mockbuild does not exist - using root 
  5. warning: group mockbuild does not exist - using root 
  6. warning: user mockbuild does not exist - using root 
  7. warning: group mockbuild does not exist - using root 
  8. warning: user mockbuild does not exist - using root 
  9. warning: group mockbuild does not exist - using root 

此时需要使用adduser mockbuild命令创建mockbuild用户:


  1. [root@localhost birdofprey]# adduser mockbuild 

4、重新使用rpm -ivh vsftpd-2.2.2-11.el6_3.1.src.rpm 对该包进行安装:


  1. [root@localhost birdofprey]# rpm -ivh vsftpd-2.2.2-11.el6_3.1.src.rpm 
  2. warning: vsftpd-2.2.2-11.el6_3.1.src.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY 
  3. 1:vsftpd       ########################################### [100%] 

5、使用命令 cd /root/ rpmbuild/SOURCES/vsftpd/SOURCES进入vsftpd源码包目录,并使用tar -zxvf vsftpd-2.2.2.tar.gz解压vsftpd-2.2.2.tar.gz源码包:


  1. [root@localhost SOURCES]# tar -zxvf vsftpd-2.2.2.tar.gz 

6、使用命令cd vsftdp-2.2.2进入vsfftpd-2.2.2源码目录:


  1. [root@localhost SOURCES]# cd vsftpd-2.2.2 

7、使用命令vi features.c修改 features.c文件;将行内容为:vsf_cmdio_write_raw(p_sess, " UTF8\r\n");


  1. 修改为://vsf_cmdio_write_raw(p_sess, " UTF8\r\n")。 

8、使用命令vi opts.c修改 opts.c文件;


  1. 将handle_opts函数修改成如下: 
  2. void 
  3. handle_opts(struct vsf_session* p_sess) 
  4. str_upper(&p_sess->ftp_arg_str); 
  5. //if (str_equal_text(&p_sess->ftp_arg_str, "UTF8 ON")) 
  6. //{ 
  7. //vsf_cmdio_write(p_sess, FTP_OPTSOK, "Always in UTF8 mode."); 
  8. //} 
  9. //else 
  10. //{ 
  11. //vsf_cmdio_write(p_sess, FTP_BADOPTS, "Option not understood."); 
  12. //} 

9、返回上层目录并使用 tar -zcvf vsftpd-2.2.2.tar.gz vsftpd-2.2.2/命令重新压缩vsftpd-2.2.2.tar.gz文件:


  1. [root@localhost SOURCES]# tar -zcvf vsftpd-2.2.2.tar.gz vsftpd-2.2.2/ 

我们使用ls -命令可以看到列表中vsftpd-2.2.2.tar.gz文件创建时间已经为当前创建时间,如下所示:

-rw-rw-r--. 1 mockbuild mockbuild 186982 5月   3 15:39 vsftpd-2.2.2.tar.gz
-rw-r--r--. 1 mockbuild mockbuild   2828 2月  13 00:06 vsftpd-2.2.2-uint-uidgid.patch
-rw-r--r--. 1 mockbuild mockbuild   1640 2月  13 00:06 vsftpd-2.2.2-v6only.patch
-rw-r--r--. 1 mockbuild mockbuild    514 2月  13 00:06 vsftpd-close-std-fds.patch
-rwxr-xr-x. 1 mockbuild mockbuild    338 2月  13 00:06 vsftpd_conf_migrate.sh
-rw-r--r--. 1 mockbuild mockbuild    125 2月  13 00:06 vsftpd.ftpusers
-rwxr-xr-x. 1 mockbuild mockbuild   2824 2月  13 00:06 vsftpd.init
-rw-r--r--. 1 mockbuild mockbuild    335 2月  13 00:06 vsftpd.pam
-rw-r--r--. 1 mockbuild mockbuild    361 2月  13 00:06 vsftpd.user_list
-rw-r--r--. 1 mockbuild mockbuild    345 2月  13 00:06 vsftpd.xinetd

10、进入源码包下的 SPECS目录,并使用rpmbuild -bb vsftpd.spec命令生成vsftpd-2.2.2-11.el6.1.x86_64.rpm:


  1. [root@localhost SPECS]# rpmbuild -bb vsftpd.spec 

此时因为系统缺少依赖包会报如下错误:

error: Failed build dependencies:
libcap-devel is needed by vsftpd-2.2.2-11.el6.1.x86_64
tcp_wrappers-devel is needed by vsftpd-2.2.2-11.el6.1.x86_64

我们可以从CentOS6.4安装盘中找到如下RPM软件包进行手动安装,包名如下:

libattr-2.4.44-7.el6.i686.rpm          libcap-devel-2.16-5.5.el6.x86_64.rpm
libattr-2.4.44-7.el6.x86_64.rpm        tcp_wrappers-devel-7.6-57.el6.i686.rpm
libattr-devel-2.4.44-7.el6.i686.rpm    tcp_wrappers-devel-7.6-57.el6.x86_64.rpm
libattr-devel-2.4.44-7.el6.x86_64.rpm  tcp_wrappers-libs-7.6-57.el6.i686.rpm
libcap-2.16-5.5.el6.i686.rpm           tcp_wrappers-libs-7.6-57.el6.x86_64.rpm
libcap-2.16-5.5.el6.x86_64.rpm         vsftpd-2.2.2-11.el6_3.1.src.rpm
libcap-devel-2.16-5.5.el6.i686.rpm

11、将以上各包使用rpm -ivh *.rpm -force --nodeps命令进行强制安装:


  1. [root@localhost rpm]# rpm -ivh *.rpm --force --nodeps 
  2. warning: libattr-2.4.44-7.el6.i686.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY 
  3. Preparing...             ########################################### [100%] 
  4. 1:libattr                ########################################### [  8%] 
  5. 2:libcap                 ########################################### [ 17%] 
  6. 3:tcp_wrappers-libs      ########################################### [ 25%] 
  7. 4:libattr                ########################################### [ 33%] 
  8. 5:libcap                 ########################################### [ 42%] 
  9. 6:tcp_wrappers-libs      ########################################### [ 50%] 
  10. 7:tcp_wrappers-devel     ########################################### [ 58%] 
  11. 8:libcap-devel           ########################################### [ 67%] 
  12. 9:libattr-devel          ########################################### [ 75%] 
  13. 10:tcp_wrappers-devel    ########################################### [ 83%] 
  14. 11:libcap-devel          ########################################### [ 92%] 
  15. 12:libattr-devel         ########################################### [100%] 

12、再次使用rpmbuild -bb vsftpd.spec对vsftpd-2.2.2-11.el6.1.x86_64.rpm包重新进行编译:


  1. [root@localhost SPECS]# rpmbuild -bb vsftpd.spec 

13、进入x86_64目录,此时可以看到该目录下已经生成相关RPM包:

命令模式如下:


  1. [root@localhost RPMS]# cd x86_64/ 
  2. [root@localhost x86_64]# ls 
  3. vsftpd-2.2.2-11.el6.1.x86_64.rpm  vsftpd-debuginfo-2.2.2-11.el6.1.x86_64.rpm 

14、重新安装进行过源码修改的vsftpd应用服务器组件包:


  1. [root@localhost x86_64]# rpm -ivh vsftpd-2.2.2-11.el6.1.x86_64.rpm 
  2. Preparing...      ########################################### [100%] 
  3. 1:vsftpd          ########################################### [100%] 

15、CentOS6.4修改系统默认字符集:


  1. [root@localhost /]# vi /etc/sysconfig/i18n 
  2. 将原文件修改为如下内容: 
  3. #LANG="zh_CN.UTF-8" 
  4. LANG="zh_CN.GB18030" 
  5. SUPPORTED="zh_CN.GB18030:zh_CN:zh:zh_CN.GB2312:en_US.UTF-8:en_US:en" 
  6. SYSFONT="latarcyrheb-sun16" 

此时所有修改工作已经完成,重起FTP应用服务器之后我们在windows系统中使用IE浏览器以及前期应用软件进行测试中文乱码问题消失。该解决办法同样适用于RHEL6系列操作系统中存在的VSFTPD于windows客户端字符集兼容原因导致的乱码问题。

相关RPM包整理:vsftpd-2.2.2-11.el6.3.1.src.rpm.tar.bz2

【声明】本文作者:解宝琦、荆斌,陕西安康市安康车务段电算室的助工。本文在51CTO系统频道首发,转载请注明作者和出处。

(责任编辑:IT)
------分隔线----------------------------