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日誌也能支持起來,何樂而不“不爲”呢?

 

發佈了128 篇原創文章 · 獲贊 7 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章