vsftpd日志输出中文文件名的解决方法续貂

     默认利用vsftpd自身的日志机制,中文的文件名和文件夹名都不能很好的显示,在日志中直接显示为连续的“??????”

    虽然,Linux主机系统已经设置了系统的环境变量$LANG=en_US.UTF-8,但是,实际上用处不大。在网上搜索博文也是说的乱七八糟,有人说某个解决方案行,有人说回复说试了不行,都没有触及根本。偶有有提示性的文字,说通过系统的syslog日志机制,就可以支持中文日志输出。但是,当时不以为然,觉得似乎过于扯了,如此知名的一个软件,不会对于国际化的支持就这么挫么?

    那就下载源码,根据vsftpd配置文件中的日志相关的关键词在源码搜索对照看看。果不其然,确实如某个博文所说的,vsftpd软件自身的日志不支持中文输出。在vsftpd日志相关代码中,代码利用C库函数判断字符非可显示的之后,就对于不可显示字符主动转化为“?”。这也就是在ftp日志中系统中的文件名的中文信息被输出成连续?的原因。 C库的函数,估计也就支持ASCII字符集的判断罢了,其它也不要多想了。

   既然vsftpd代码中写死了不支持超ASCII可显示字符的显示,个人又不想修改源代码,重新编译后安装,让其支持国际化。那么,就只好扬长避短,利用vsftpd自身也支持的、向syslog输出日志机制,通过系统级日志服务syslog进行中转。通过实验,这个网上建议的招数,确实是可行!但,估计您也必须设置系统的字符集设置为“utf-8”,这样才可以让数据流贯穿下去;或至少设置为"GBK"或“GB2312”之类,但建议还是以设置为“utf-8”为优。可以测试,在终端窗口中利用ls命令,列举下中文文件看是否可以正常显示;如果可以正常显示,那么在vsftpd日志中支持中文将是确定的事情。

  源码之下无秘密,有感于网上没有说清楚为什么vsftpd自身日志不支持中文,所以,就继续狗尾续貂。

  至于为什么vsftpd的软件作者没有让日志支持国际化,最开始也不甚理解,后来随着工作中涉及一些安全设计,我开始理解了......。vsftpd一开始就标榜自己有多安全,那么多一事不如少一事,而且Linux系统自身的syslog日志也能支持起来,何乐而不“不为”呢?

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值