之前用的是vsftpd配置ftp服務器,前面用的挺好,沒什么問題,但是后面接收設備上傳的文件夾時發現了一個大坑,當設備上傳的文件夾名字中包含中文時,在Linux上顯示的是亂碼。。。各種轉碼都不行,折騰不止半天,始終解決不了,嗶了狗!!最后搜索其它配置ftp服務器的工具,發現了pure-ftpd這個好東西,且這個文章(傳送門)中說的很清楚,vsftpd不支持內部轉碼,默認使用UTF8存儲,當使用windows上傳文件時會出現亂碼情況,因為windows中文默認使用GBK編碼,而pure-ftpd可以設置客戶端的編碼格式,這樣服務器可以知道接收的是什么編碼格式的文字,從而進行后續處理以正常顯示。
1、安裝
sudo apt-get install pure-ftpd
2、配置
//新建一個文件夾作為ftp上傳文件的目錄
sudo mkdir -p /home/ftp
//添加一個用戶,用於ftp登錄,這里有人說必須用ftp這個用戶名,后面了解原理后再更新
//值得注意的是這些為ftp新建的用戶一般不會用於登錄系統,所以命令-s 設置為/bin/false,不允許shell登錄
sudo useradd -d /home/ftp -s /bin/false ftp
//為ftp用戶設置密碼
sudo passwd ftp
//設置目錄所屬用戶和用戶組,前面並沒有建ftp用戶組,不用擔心,這樣設置后會自動創建ftp用戶組
sudo chown -R ftp:ftp /home/ftp/
//為ftp目錄添加所有權限
chmod -R 777 /home/ftp
3、配置
配置文件在/etc/pure-ftpd/conf目錄下,配置方式比較奇怪,一個配置項新建一個文件,文件名字是配置項名字,內容是配置項參數。如安裝完進到該目錄下發現有個NoAnonymous文件,內容是no,表示允許匿名登錄的意思。如果要添加其它設置就繼續新建文件。我加了如下配置:
1、最初我把NoAnonymous改成了no,允許匿名登錄,上傳文件沒問題,但是上傳文件夾時提示“550 Sorry, anonymous users are not allowed to create directories”錯誤,說匿名用戶不允許創建目錄,於是我就把參數值改成了yes,強制需要登錄,為了保險同時又加了下面配置。
2、AnonymousCanCreateDirs,意思是允許匿名用戶創建文件夾,這時再上傳文件夾就可以了。
3、ChrootEveryone,作用是把每個用戶限制在家目錄下,不允許跳出,類似於vsftpd的chroot_local_user,這樣每個用戶上傳文件時就上傳到自己的文件夾下,不會互相沖突。
4、ClientCharset,這個是設置客戶端字符集的,前面說了,windows上傳文件有中文時亂碼,因為windows上中文是以GBK表示的,上傳時也是如此,但是Linux上是UTF8啊,所以如果不加這個參數,上傳文件夾時如果有中文和vsftpd一樣,也會顯示為亂碼,於是就加個文件,內容設置為gbk,這樣該軟件就可以處理中文了,顯示一切正常。
還有其它配置,不過我目前用到的就這么簡單,后面有時間學習了再繼續更新。
