vsftpd服务以及日志文件显示中文

Web、Mail、Ftp、DNS、Proxy、VPN、Samba、LDAP 等基础网络服务
回复
头像
时辰
帖子: 8
注册时间: 2007-09-12 23:07

vsftpd服务以及日志文件显示中文

#1

帖子 时辰 » 2009-01-04 0:18

小弟初学
用vsftpd架设了一个简单的ftp服务器用来测试学习 服务器端客户端中文乱码问题已经解决
方法:参考论坛里面前辈们的帖子 先从源里面安装vsftpd(最新版为2.0.7)配置成功后remove
然后编译安装打好补丁的vsftpd2.0.6
但是sudo /usr/local/sbin/vsftpd start 提示:500 OOPS: vsftpd: cannot open config file:start
stop restart reload提示也是一样的
sudo /etc/init.d/vsftpd start等终端无输出
没有显示出可爱的START.......[ok]
只能sudo /usr/local/sbin/vsftpd
然后ftp服务器才能起来 stop的话只能在终端ctrl+c来实现
请问各位前辈 这个问题如何解决
另外 配置了log 但是上传下载中文的文件的话 用gedit打开vsftp.log查看 日志显示的文件名是????.后缀 修改gedit打开文件的编码 问题依旧 请问该如何能够看到客户端上传下载了什么中文的文件呢 这个貌似比较重要吧
另外 vsftpd生成的日志文件 xferlog以及vsftpd.log有什么专门的日志查看程序打开吗 系统日志无法打开 提示无效日志文件 vsftpd.log是vsftpd独有的 这个没办法 xferlog呢??
请各位前辈赐教 谢谢
头像
时辰
帖子: 8
注册时间: 2007-09-12 23:07

Re: vsftpd服务以及日志文件显示中文

#2

帖子 时辰 » 2009-01-04 22:59

我顶。。。。。。
头像
ws_105
帖子: 313
注册时间: 2008-10-24 8:02

Re: vsftpd服务以及日志文件显示中文

#3

帖子 ws_105 » 2009-01-05 13:06

再次建议楼主:请学会利用搜索引擎解决问题

这是google里所处来的结果:
http://bbs.51cto.com/archiver/tid-442802.html
Ubuntu 8.04 @ Intel Pentium D 925 + Intel 945G Chipset + DDR2 1.0G + SATA 160G
http://hi.baidu.com/ws_105
头像
ws_105
帖子: 313
注册时间: 2008-10-24 8:02

Re: vsftpd服务以及日志文件显示中文

#4

帖子 ws_105 » 2009-01-05 14:15

帮你整理了一份, 反正自己也要做笔记的, 分享以下吧:
----
vsftpd 的日志不支持中文日文等字符, 在日志文件中所有的中文文件名都会显示为一连串的问号.
在 vsftpd 的源文件中可以看到为什么会是这样(示例源代码为 Ubuntu 8.04 系统仓库中的源代码.):

先看一看日志记录文件, file logging.c, line 152 - 171:

代码: 全选

      static void
      vsf_log_do_log_to_file(int fd, struct mystr* p_str)
      {
        if (!tunable_no_log_lock)
        {
          int retval = vsf_sysutil_lock_file_write(fd);
          if (vsf_sysutil_retval_is_error(retval))
          {
            return;
          }
        }
        str_replace_unprintable(p_str, '?');
        str_append_char(p_str, '\n');
        /* Ignore write failure; maybe the disk filled etc. */
        (void) str_write_loop(p_str, fd);
        if (!tunable_no_log_lock)
        {
          vsf_sysutil_unlock_file(fd);
        }
      }
可以看到函数调用 str_replace_unprintable(p_str, '?'), 会把所有无法打印的字符全部替换为问号.
再看一看 str_replace_unprintable 函数, file str.c, line 656 - 668:

代码: 全选

      void
      str_replace_unprintable(struct mystr* p_str, char new_char)
      {
        unsigned int i;
        for (i=0; i < p_str->len; i++)
        {
          if (!vsf_sysutil_isprint(p_str->p_buf[i]))
          {
            p_str->p_buf[i] = new_char;
          }
        }
      }
这样我们就有追踪到了函数 vsf_sysutil_isprint, file sysutil.c, line 883 - 903:

代码: 全选

      int
      vsf_sysutil_isprint(int the_char)
      {
        /* From Solar - we know better than some libc's! Don't let any potential
         * control chars through
         */
        unsigned char uc = (unsigned char) the_char;
        if (uc <= 31)
        {
          return 0;
        }
        if (uc == 177)
        {
          return 0;
        }
        if (uc >= 128 && uc <= 159)
        {
          return 0;
        }
        return isprint(the_char);
      }
在这个文件中, 我们可以看到有那些字符是"可打印"的, 也可以看到为什么日志中的中文文件名会变成一连串的问号.
对此, 作者注释出了这样做的原因: "Don't let any potential control chars through".
这样尽可能的提高了安全性, 但是对于非拉丁语系的语言却造成了一些不便.

解决这个问题, 有两种方法:

1.注释掉 logging.c 文件中的 static void vsf_log_do_log_to_file(int fd, struct mystr* p_str) 函数中的
str_replace_unprintable(p_str, '?');
这一行. 这样在 UTF-8 的 locale 环境下就可以记录中文文件名了. 但是这样做会在一定程度上降低系统的安全性, 有可能会使一些攻击行为能够得逞.
2. 配置 vsftpd 通过 syslog 些日志: syslog_enable=YES
具体请参考:
man vsftpd.conf
Ubuntu 8.04 @ Intel Pentium D 925 + Intel 945G Chipset + DDR2 1.0G + SATA 160G
http://hi.baidu.com/ws_105
头像
时辰
帖子: 8
注册时间: 2007-09-12 23:07

Re: vsftpd服务以及日志文件显示中文

#5

帖子 时辰 » 2009-01-05 22:01

非常感谢楼上前辈共享的资料 日志的中文显示问题已经解决 用的是方法1 严重感谢
就我所遇到的问题 我一直有在百度google上面搜 可能是关键字不太确切吧。。。一直都没找到答案 呵呵
那么关于start stop restart这个问题还有日志查看方面 有什么相关的解决办法吗??
小弟愚钝 没有搜索出相关的解决方法 需要搜索什么关键字比较好呢?? :em06
头像
ws_105
帖子: 313
注册时间: 2008-10-24 8:02

Re: vsftpd服务以及日志文件显示中文

#6

帖子 ws_105 » 2009-01-06 13:41

时辰 写了:小弟初学
用vsftpd架设了一个简单的ftp服务器用来测试学习 服务器端客户端中文乱码问题已经解决
方法:参考论坛里面前辈们的帖子 先从源里面安装vsftpd(最新版为2.0.7)配置成功后remove
然后编译安装打好补丁的vsftpd2.0.6
但是sudo /usr/local/sbin/vsftpd start 提示:500 OOPS: vsftpd: cannot open config file:start
stop restart reload提示也是一样的
sudo /etc/init.d/vsftpd start等终端无输出
没有显示出可爱的START.......[ok]
只能sudo /usr/local/sbin/vsftpd
然后ftp服务器才能起来 stop的话只能在终端ctrl+c来实现
请问各位前辈 这个问题如何解决
另外 配置了log 但是上传下载中文的文件的话 用gedit打开vsftp.log查看 日志显示的文件名是????.后缀 修改gedit打开文件的编码 问题依旧 请问该如何能够看到客户端上传下载了什么中文的文件呢 这个貌似比较重要吧
另外 vsftpd生成的日志文件 xferlog以及vsftpd.log有什么专门的日志查看程序打开吗 系统日志无法打开 提示无效日志文件 vsftpd.log是vsftpd独有的 这个没办法 xferlog呢??
请各位前辈赐教 谢谢
1. "但是sudo /usr/local/sbin/vsftpd start 提示:500 OOPS: vsftpd: cannot open config file:start"
这个启动方法本来就是错误的, 如果直接使用/usr/local/sbin/vsftpd 这个程序来启动服务器的话, 那么它接受的唯一参数就是 配置文件, 比如 /etc/vsftpd.conf, 而不是 start
上面的错误提示已经说得很明白了
另外, start stop restart 只是启动脚本的参数, 就是 /etc/init.d/ 目录下的那些文件, 都是手工编写的文件, 它们负责检查启动服务所需要的必要条件, 并传递正确的参数, 来启动服务程序

2. sudo /etc/init.d/vsftpd start等终端无输出
没有显示出可爱的START.......[ok]

没有状态输出有许多可能的原因, 比如启动脚本被修改了, 因为你 remove 了系统安装的 软件包, 又重新编译了vsftpd, 所以启动脚本有可能被更改
要检查这个服务是否已经启动, 可以使用下面的命令:

代码: 全选

ps aux | grep vsftpd 
Ubuntu 8.04 @ Intel Pentium D 925 + Intel 945G Chipset + DDR2 1.0G + SATA 160G
http://hi.baidu.com/ws_105
头像
ws_105
帖子: 313
注册时间: 2008-10-24 8:02

Re: vsftpd服务以及日志文件显示中文

#7

帖子 ws_105 » 2009-01-06 19:17

呃, 是不是我说话太冲了 :em03
莫怪, 呵呵
我自己比较喜欢搜索, 看错误提示, 所以 "缺省" 情况下, 我假设别人也是有这样的习惯的 :em09
Ubuntu 8.04 @ Intel Pentium D 925 + Intel 945G Chipset + DDR2 1.0G + SATA 160G
http://hi.baidu.com/ws_105
头像
时辰
帖子: 8
注册时间: 2007-09-12 23:07

Re: vsftpd服务以及日志文件显示中文

#8

帖子 时辰 » 2009-01-07 21:20

ws_105 写了:呃, 是不是我说话太冲了 :em03
莫怪, 呵呵
我自己比较喜欢搜索, 看错误提示, 所以 "缺省" 情况下, 我假设别人也是有这样的习惯的 :em09
没有啦 非常感谢你的 其实我也是喜欢先搜索来解决问题的 只不过可能有时候搜索的关键字不正确 所以得不到正解
呵呵 对于兄台的帮助 小弟感激不尽 :em01
头像
时辰
帖子: 8
注册时间: 2007-09-12 23:07

Re: vsftpd服务以及日志文件显示中文

#9

帖子 时辰 » 2009-01-07 22:02

viewtopic.php?f=54&t=132305&start=0
我是根据这位前辈的方法解决的中文乱码问题
关于/usr/local/sbin/vsftpd
输入

代码: 全选

ps aux | grep vsftpd
能够看到ftp服务已经启动
小弟自作聪明

代码: 全选

sudo gedit /etc/init.d/vsftpd
阅读了一下代码 看到如下

代码: 全选

DAEMON=/usr/sbin/vsftpd
NAME=vsftpd

改为我现在编译安装之后的路径

代码: 全选

#DAEMON=/usr/sbin/vsftpd
DAEMON=/usr/local/sbin/vsftpd
NAME=vsftpd
保存退出
然后 现在

代码: 全选

sudo /etc/init.d/vsftpd start

代码: 全选

root      5565  0.0  0.0   2280   564 ?        S    21:51   0:00 /usr/local/sbin/vsftpd
shichen   5570  0.0  0.0   3460   812 pts/1    S+   21:51   0:00 grep vsftpd
/etc/init.d/vsftpd start|stop|restart|reload 无输出 /usr/local/sbin/vsftpd 空白的问题解决 可以默认的用sudo /etc/init.d/vsftpd start|stop|restart|reload 来控制ftp服务了
谢谢前辈的指导 :em51
广告位招租。。。。。
回复