OS : 16.04.2php
pure-ftpd : 1.0.36-3.2build1linux
#直接使用包管理器安裝 sudo apt-get install pure-ftpd
虛擬用戶須要關聯繫統用戶來得到對服務器上的文件的訪問控制權限,能夠使用多個虛擬用戶關聯同一個系統用戶來而後使用不一樣的訪問目錄,也能夠關聯不一樣的系統用戶來實現不一樣的權限控制。這裏我使用第一種方式。數據庫
# 建立系統用戶的組 sudo groupadd ftpgroup # 建立系統用戶,加入剛剛建立的組 sudo useradd ftpuser -g ftpgroup -s /sbin/nologin # 建立ftp存儲目錄,並使響應的系統用戶擁有權限 sudo mkdir -p /var/opt/ftp/user1 sudo mkdir -p /var/opt/ftp/user2 sudo chown -R ftpuser:ftpgroup /var/opt/ftp/
虛擬用戶能夠經過安裝附帶的 pure-pw 工具來進行管理ubuntu
sudo pure-pw useradd user1 -u ftpuser -g ftpgroup -d /var/opt/ftp/user1 # 運行命令後會要求在終端中輸入要設置的用戶密碼 sudo pure-pw useradd user2 -u ftpuser -g ftpgroup -d /var/opt/ftp/user2 # 用戶建立完成後須要運行下面命令建立/更新用戶數據庫。或者在運行 pure-pw useradd 等命令時加上 -m 參數直接建立/更新數據庫以省略本步。 sudo pure-pw mkdb
這裏有一個坑,使用 apt-get 安裝的 pure-ftpd 默認沒有開啓虛擬用戶的的認證方式,因此就算建立了虛擬用戶,仍然沒法登錄ftp。pure-ftpd 的默認配置文件位置在 /etc/pure-ftpd 文件夾下,啓用虛擬用戶認證的方式須要在認證文件夾 /etc/pure-ftpd/auth 下建立對應認證方式的軟鏈接。windows
cd /etc/pure-ftpd/auth/ # 建立虛擬用戶認證的軟鏈接 sudo ln -s ../conf/PureDB 60puredb # 還須要檢查一下設置中虛擬用戶方式是不是開啓狀態 cat 60puredb # 結果爲 /etc/pure-ftpd/pureftpd.pdb 。內容爲虛擬用戶數據庫文件
以後再重啓 pure-ftpd 服務。瀏覽器
sudo systemctl restart pure-ftpd
此時已經能夠經過 ftp 客戶端使用建立好的虛擬用戶進行鏈接了。安全
# 常見用法以下 # 添加用戶 sudo pure-pw useradd user1 -u ftpuser -g ftpgroup -d /var/opt/ftp/user1 # 修改密碼 sudo pure-pw passwd user2 # 顯示用戶列表 sudo pure-pw list # 生成/從新生成用戶數據庫文件 sudo pure-pw mkdb # 更多詳細用法參考 man pure-pw
prue-ftpd 的配置文件不一樣於常見的 vsftpd ,它使用在conf文件夾的文件名作爲配置項,使用文件的內容做爲配置值。通過上面簡單配置後,配置文件夾的結構以下:bash
$ pwd /etc/pure-ftpd $ tree . ├── auth │ ├── 60puredb -> ../conf/PureDB │ ├── 65unix -> ../conf/UnixAuthentication │ └── 70pam -> ../conf/PAMAuthentication ├── conf │ ├── AltLog │ ├── FSCharset │ ├── MinUID │ ├── NoAnonymous │ ├── PAMAuthentication │ ├── PureDB │ ├── TLSCipherSuite │ └── UnixAuthentication ├── db ├── pureftpd-dir-aliases ├── pureftpd.passwd └── pureftpd.pdb
關閉系統用戶訪問服務器
使用虛擬用戶方式訪問 ftp 時默認配置就是限制根目錄 (chroot) 的,而系統用戶使用 pam 方式認證登陸後是不對 ftp 根目錄進行限制的,這樣無形之中增長了風險。因此在已經設置了虛擬用戶後,最好將其餘認證方式關閉。app
sudo sh -c "echo 'no' > conf/PAMAuthentication" sudo sh -c "echo 'no' > conf/UnixAuthentication"
修改默認字符集
選擇使用 pure-ftpd 的理由之一就是能夠設置 GBK 字符集 ,解決在 windows 上傳中文亂碼的問題。(多是由於默認配置裏服務端顯式指定了 UTF-8 ,因此在我 WIN7 的資源管理器上也能正常顯示中文,但IE 瀏覽器中打開 ftp 仍是亂碼。具體使用哪一種字符集請根據須要肯定。另外,若是須要修改字符集的話最好在FTP仍是空的時候修改,這樣不會形成已經上傳的文件字符集和系統設置不一樣致使亂碼。)
sudo sh -c "echo 'GBK' > conf/FSCharset"
修改用戶最小UID
在 pure-ftpd 的設置中有一項 conf/MinUID ,UID大於等於這個值的用戶才能夠登陸(包括虛擬用戶對應的系統用戶)。因此出現用戶沒法登陸的問題時,也多是用戶的UID小於這個值致使的,這時須要修改這個值或用戶的UID解決。
sudo sh -c "echo '1000' > conf/MinUID"
不解析主機名
設置這項能夠加快 ftp 鏈接速度
sudo sh -c "echo 'yes' > conf/DontResolve"
更多配置
# 更多配置能夠參考 man pure-ftpd-wrapper
由於我是用的是軟件包直接安裝好了服務化的 pure-ftpd 因此使用的就是如上所示的修改配置方式。其餘狀況下還能夠直接在 pure-ftpd 服務啓動時添加參數,詳見官網
# 將當前配置文件顯示爲參數形式 $ pure-ftpd-wrapper --show-options -l puredb:/etc/pure-ftpd/pureftpd.pdb -J ALL:!aNULL:!SSLv3 -E -O clf:/var/log/pure-ftpd/transfer.log -8 UTF-8 -u 1000 -H -g /var/run/pure-ftpd/pure-ftpd.pid
Pure-ftpd服務安裝及虛擬用戶設置
Pure-ftpd服務安裝設置
用pureftpd+pureDB虛擬用戶,創建一個簡單安全(不須要數據庫支持)的linux ftp網站