小弟初学
用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呢??
请各位前辈赐教 谢谢
vsftpd服务以及日志文件显示中文
- 时辰
- 帖子: 8
- 注册时间: 2007-09-12 23:07
- 时辰
- 帖子: 8
- 注册时间: 2007-09-12 23:07
Re: vsftpd服务以及日志文件显示中文
我顶。。。。。。
- ws_105
- 帖子: 313
- 注册时间: 2008-10-24 8:02
Re: vsftpd服务以及日志文件显示中文
Ubuntu 8.04 @ Intel Pentium D 925 + Intel 945G Chipset + DDR2 1.0G + SATA 160G
http://hi.baidu.com/ws_105
http://hi.baidu.com/ws_105
- ws_105
- 帖子: 313
- 注册时间: 2008-10-24 8:02
Re: vsftpd服务以及日志文件显示中文
帮你整理了一份, 反正自己也要做笔记的, 分享以下吧:
----
vsftpd 的日志不支持中文日文等字符, 在日志文件中所有的中文文件名都会显示为一连串的问号.
在 vsftpd 的源文件中可以看到为什么会是这样(示例源代码为 Ubuntu 8.04 系统仓库中的源代码.):
先看一看日志记录文件, file logging.c, line 152 - 171:
可以看到函数调用 str_replace_unprintable(p_str, '?'), 会把所有无法打印的字符全部替换为问号.
再看一看 str_replace_unprintable 函数, file str.c, line 656 - 668:
这样我们就有追踪到了函数 vsf_sysutil_isprint, file sysutil.c, line 883 - 903:
在这个文件中, 我们可以看到有那些字符是"可打印"的, 也可以看到为什么日志中的中文文件名会变成一连串的问号.
对此, 作者注释出了这样做的原因: "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
----
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 函数, 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;
}
}
}
代码: 全选
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
http://hi.baidu.com/ws_105
- 时辰
- 帖子: 8
- 注册时间: 2007-09-12 23:07
Re: vsftpd服务以及日志文件显示中文
非常感谢楼上前辈共享的资料 日志的中文显示问题已经解决 用的是方法1 严重感谢
就我所遇到的问题 我一直有在百度google上面搜 可能是关键字不太确切吧。。。一直都没找到答案 呵呵
那么关于start stop restart这个问题还有日志查看方面 有什么相关的解决办法吗??
小弟愚钝 没有搜索出相关的解决方法 需要搜索什么关键字比较好呢??
就我所遇到的问题 我一直有在百度google上面搜 可能是关键字不太确切吧。。。一直都没找到答案 呵呵
那么关于start stop restart这个问题还有日志查看方面 有什么相关的解决办法吗??
小弟愚钝 没有搜索出相关的解决方法 需要搜索什么关键字比较好呢??
- ws_105
- 帖子: 313
- 注册时间: 2008-10-24 8:02
Re: vsftpd服务以及日志文件显示中文
1. "但是sudo /usr/local/sbin/vsftpd start 提示:500 OOPS: vsftpd: cannot open config file:start"时辰 写了:小弟初学
用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呢??
请各位前辈赐教 谢谢
这个启动方法本来就是错误的, 如果直接使用/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
http://hi.baidu.com/ws_105
- ws_105
- 帖子: 313
- 注册时间: 2008-10-24 8:02
Re: vsftpd服务以及日志文件显示中文
呃, 是不是我说话太冲了
莫怪, 呵呵
我自己比较喜欢搜索, 看错误提示, 所以 "缺省" 情况下, 我假设别人也是有这样的习惯的
莫怪, 呵呵
我自己比较喜欢搜索, 看错误提示, 所以 "缺省" 情况下, 我假设别人也是有这样的习惯的
Ubuntu 8.04 @ Intel Pentium D 925 + Intel 945G Chipset + DDR2 1.0G + SATA 160G
http://hi.baidu.com/ws_105
http://hi.baidu.com/ws_105
- 时辰
- 帖子: 8
- 注册时间: 2007-09-12 23:07
Re: vsftpd服务以及日志文件显示中文
没有啦 非常感谢你的 其实我也是喜欢先搜索来解决问题的 只不过可能有时候搜索的关键字不正确 所以得不到正解ws_105 写了:呃, 是不是我说话太冲了
莫怪, 呵呵
我自己比较喜欢搜索, 看错误提示, 所以 "缺省" 情况下, 我假设别人也是有这样的习惯的
呵呵 对于兄台的帮助 小弟感激不尽
- 时辰
- 帖子: 8
- 注册时间: 2007-09-12 23:07
Re: vsftpd服务以及日志文件显示中文
viewtopic.php?f=54&t=132305&start=0
我是根据这位前辈的方法解决的中文乱码问题
关于/usr/local/sbin/vsftpd
输入
能够看到ftp服务已经启动
小弟自作聪明
阅读了一下代码 看到如下
改为我现在编译安装之后的路径
保存退出
然后 现在
/etc/init.d/vsftpd start|stop|restart|reload 无输出 /usr/local/sbin/vsftpd 空白的问题解决 可以默认的用sudo /etc/init.d/vsftpd start|stop|restart|reload 来控制ftp服务了
谢谢前辈的指导
我是根据这位前辈的方法解决的中文乱码问题
关于/usr/local/sbin/vsftpd
输入
代码: 全选
ps aux | grep vsftpd
小弟自作聪明
代码: 全选
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
谢谢前辈的指导
广告位招租。。。。。