簡介:
PureFTPd是免費、安全、符合國際標準的FTP 服務器程序。它並沒有那些無用而又花哨的功能,而是將重點放到了提高效率和易用性上,獨特的實用功能爲個人用戶和託管服務提供商提供了一個新的選擇。
下載:
從官方網站下載最新的穩定版本http://www.pureftpd.org/ 其最新版本是1.0.29,下載地址
爲:http://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.29.tar.bz2。
系統環境
CentOS 5.4
PureFTPd 1.0.29
編譯安裝
1
2
3
# tar -xvjf pure-ftpd-1.0.29.tar.bz2
# cd pure-ftpd-1.0.29
# ./configure --help # 查看編譯選項
PureFTPd有很多的編譯配置選項,下面就列出部分主要的配置
–prefix=PREFIX
–with-sysquotas 使用系統磁盤配額 (非虛擬)
–with-altlog 支持選擇日誌格式(類似Apache)
–with-puredb 支持虛擬用戶 (FTP登陸用戶而非系統用戶)
–with-extauth 支持擴展驗證模塊
–with-pam 啓用PAM驗證支持 (默認=禁用)
–with-cookie 啓用Cookie支持 (-F 選項)
–with-throttling 支持帶寬控制 (默認=禁用)
–with-ratios 支持 上傳/下載 速度控制
–with-quotas 支持 .ftpquota 文件(指定磁盤配額使用)
–with-ftpwho 支持pure-ftpwho(查看在線用戶的程序)
–with-largefile 支持大於2G的文件
–with-welcomemsg 支持 welcome.msg 向後兼容(已經過時)
–with-uploadscript 上傳後允許執行外部腳本 (測試階段)
–with-virtualhosts 在不同的IP地址提供虛擬服務器功能
–with-virtualchroot 允許在chroot的環境下通過符合連接跳轉到外部
–with-diraliases 啓用目錄別名
–with-nonroot 普通模式或者說是限制模式. 如果你在該服務器上沒有root權限
那只有啓用該項
–with-peruserlimits 支持每個用戶的併發限制
–with-language= 語言支持< english | traditional-chinese | simplified-chinese>
–with-ldap 在LDAP目錄中提供用戶數據庫
–with-mysql 在MySQL數據庫中存放用戶數據
–with-pgsql 在PostgreSQL數據庫中存放用戶數據
–with-privsep 啓用權限分離
–with-tls 啓用 SSL/TLS 支持 (測試階段, 需要安裝 OpenSSL)
–with-certfile= 證書文件 (默認目錄: /etc/ssl/private/pure-ftpd.pem)
–with-rfc2640 啓用兼容 RFC 2640 支持(UTF-8 編碼的文件名,測試階段,需要安裝iconv)
–with-everything 啓用大多數選項,編譯完功能版本的服務器端。
爲了方便起見,我在這裏使用了幾個基本的編譯命令來配置編譯一個全功能版本的程序
1
# ./configure --prefix=/usr/local/pure-ftpd/ --with-language=simplified-chinese --with-everything
注意:如果要指定安裝路徑,那麼路徑最好是/usr/local/pure-ftpd或/usr/local/pureftpd/ 或者乾脆就不指定。如果不指定目錄的話默認是將程序的文件安裝到/usr/local下的相應目錄下。我這裏指定目錄是爲了便於管理。至於爲什麼安裝目錄也有如此的講究,在下面再做說明。
1
2
3
4
5
6
7
# make && make check && make install
# mkdir /usr/local/pure-ftpd/etc
# cp configuration-file/pure-ftpd.conf /usr/local/pure-ftpd/etc/ # 配置文件拷貝到/etc目錄下
# cp configuration-file/pure-config.pl /usr/local/pure-ftpd/sbin/
//似乎make install忘記了將這個文件複製到相應的目錄了,我們只有手動自己做了
# chmod 755 /usr/local/pure-ftpd/sbin/pure-config.pl # 設置相應的權限
系統集成
這裏所說的系統集成就是制定系統變量,使系統可以找到我們剛剛安裝的程序,最簡單的方法就是將一些可執行的程序,man文件在系統指定的path中建立符號鏈接就可以了。當然我們也可以修改系統變量,如PATH變量,man page的配置文件等等。但是我還是習慣在相應的目錄建立符合連接。
1
2
3
4
# cd /usr/local/bin/
# ln -s /usr/local/pure-ftpd/bin/* .
# ln -s /usr/local/pure-ftpd/sbin/* /usr/local/sbin/
# ln -s /usr/local/pure-ftpd/man/man8/* /usr/local/share/man/man8/
PureFTPd配置
PureFTPd 程序的一大特點就是官方推薦使用命令行參數的形式來啓動服務,而非我們經常使用的配置文件加命令的形式來啓動服務。不過PureFTPd也是支持讀取配置文件的。只不過要用到一個Python編寫的腳本,利用這個腳本來將配置文件中的值轉換爲命令行參數!
(1)創建一個匿名訪問的FTP服務器
匿名用戶訪問的FTP服務器比較好配置,只需要做一下與匿名用戶相關的配置即可。如果只開啓匿名訪問的ftp服務器那麼其ftp目錄就是系統中ftp用戶的home目錄。可以使用finger命令來查看:
1
# finger ftp
Login: ftp Name: FTP User
Directory: /var/ftp Shell: /sbin/nologin
Never logged in.
No mail.
No Plan.
當然這個目錄我也可以通過修改/etc/passwd文件來修改。但要記住,這個目錄只針對匿名用戶
●修改匿名用戶上傳/下載目錄,以及相關的權限
# usermod -d /home/ftp
# mkdir /home/ftp;chown ftp.ftp /home/ftp
●修改相關配置
# vi /etc/pure-ftpd.conf
ChrootEveryone yes # 啓用chroot
BrokenClientsCompatibility yes # 兼容不同客戶端
Daemonize yes # 後臺運行
MaxClientsPerIP 20 # 每個ip最大連接數
VerboseLog yes # 記錄日誌
DisplayDotFiles no # 顯示隱藏文件
AnonymousOnly yes # 只允許匿名用戶訪問
NoAnonymous no # 運行匿名用戶連接
SyslogFacility none # 不將日誌在syslog日誌中顯示
DontResolve yes # 不進行客戶端DNS解析
MaxIdleTime 15 # 最大空閒時間
LimitRecursion 2000 8 # 瀏覽限制,文件2000,目錄8層
AnonymousCanCreateDirs yes # 匿名用戶可以創建目錄
MaxLoad 4 # 超出負載後禁止下載
PassivePortRange 45000 50000 # 被動模式端口範圍
AnonymousRatio 1 10 # 匿名用戶上傳/下載比率
AntiWarez yes # 禁止下載匿名用戶上傳但未經驗證的文件
AnonymousBandwidth 200 # 匿名用戶帶寬限制(KB)
Umask 133:022 # 創建文件/目錄默認掩碼
MinUID 100 # 最大UID限制
AllowUserFXP no # 僅運行用戶進行FXP傳輸
AllowAnonymousFXP no # 對匿名用戶和非匿名用戶允許進行匿名 FXP 傳輸
ProhibitDotFilesWrite no # 不能刪除/寫入隱藏文件
ProhibitDotFilesRead no # 禁止讀取隱藏文件
AutoRename yes # 有同名文件時自動重新命名
AnonymousCantUpload no # 不允許匿名用戶上傳文件
AltLog clf:/var/log/pureftpd.log # clf格式日誌文件位置
MaxDiskUsage 99 # 當磁盤使用量打到99%時禁止上傳
CustomerProof yes # 防止命令誤操作
配置一個匿名訪問的服務器,上面的參數就夠用了。可以根據自己的要求做一些具有針對性
的設置詳細的參數說明參見附錄
●啓動pureFTPd服務
# pure-config.pl /usr/local/pure-ftpd/etc/pure-ftpd.conf 注:要修改pure-ftpd.conf中的PureDB文件位置
屏幕上會顯示下面的信息
Running: /usr/local/pure-ftpd/sbin/pure-ftpd -A -b -B -C20 -d -e -fnone -H -I15 -L2000:8 -M -m4 – p45000:50000 -q1:10 -s -t200 -U133:022 -u100 -r -Oclf:/var/log/pureftpd.log -k99 -Z
(2)創建一個虛擬用戶驗證的FTP服務器
●配置 FTP登錄賬戶
pure-ftp默認採用Linux的root用戶。虛擬用戶則能夠更好的控制訪問權限。虛擬用戶是和Linux系統用戶關聯的獨立的賬戶系統。所以在創建虛擬用戶之前最好先創建一個系統的賬戶和組。
創建一個ftpgroup組和ftpuser用戶
# groupadd ftpgroup
# useradd -g ftpgroup -d /dev/null -s /etc ftpuser
接下來所有與虛擬用戶相關的操作都可以用‘pure-pw’命令來完成。當然你也可以手動的來編輯相應的文件。
下面爲虛擬用戶存儲文件的詳細格式,一行一個用戶
<account>:<password>:<uid>:<gid>:<gecos>:<home directory>:<upload bandwidth>
:<download bandwidth>:<upload ratio>:<download ratio>:<max numberof connections>
:<files quota>:<size quota>:<authorized local IPs>:<refusedlocal IPs>
:<authorized client IPs>:<refused client IPs>:<timerestrictions>
密碼字段是加密後的密碼,加密方式與系統的用戶密碼加密方式相同,用戶可以執行setup命令配置。
除了account, password, uid, gid, home directory字段外,其他的字段可以爲空
●使用命令添加一個虛擬用戶
pure-pw命令的格式
pure-pw useradd <login> [-f <passwd file>] -u <uid> [-g <gid>]
-D/-d <home directory> [-c <gecos>]
[-t <download bandwidth>] [-T <upload bandwidth>]
[-n <max number of files>] [-N <max Mbytes>]
[-q <upload ratio>] [-Q <download ratio>]
[-r <allow client host>[/<mask>][,…]
[-R <deny client host>[/<mask>][,…]
[-i <allow local host>[/<mask>][,…]
[-I <deny local host>[/<mask>][,…]
[-y <max number of concurrent sessions>]
[-z <hhmm>-<hhmm>] [-m]
例如:
pure-pw useradd joe -u ftpuser -d /home/ftpusers/joe
回車後提示輸入兩次密碼
使用 -d 參數指定一個用戶的home目錄後,該用戶就被固定到這個目錄了,其不能切換到上級目錄如果要想讓用戶可以訪問到別的目錄,那麼使用-D參數來指定hone目錄。
如果pureFTPd的配置文件中指定了CreateHomeDir yes 的話,/home/ftpusers/joe 目錄是沒有必要手動創建的。當用戶首次登錄時如果目錄不存在程序會自動創建相應的目錄。
使用-z參數可以指定用戶只能在一天中的某個時間段可以登陸ftp服務器。例如 -z 0900-1800那麼joe只能在早上9點和下午6點這個時間段登陸。注意:如果設置登陸時間的用戶已經通過驗證登陸到ftp服務器上了,那麼所做的登陸時間限制只能在他下次登陸驗證的時候才能生效。
-r 與 -R 參數是約束用戶從哪些IP登陸的。可以使用IP/mask的形式,如-r 192.168.1.0/24多個段用逗號隔開,如:-r 192.168.1.0/24,10.1.0.0/16,127.0.0.1/32 。單獨的IP:-r 192.168.1.4,10.1.1.5主機名:-r bla.bla.net,yopcitron.com。以及一些相兼容的格式。
-y 參數是限制同一時刻一個用戶最多能發起多少個會話(sessions)。”或0 代表無限制。該選項可以降低系統負載。效果同配置文件中的 MaxClientsPerIP
ok,現在用戶 “joe” 已經創建成功了默認的虛擬用戶列表文件存儲在 安裝目錄的/etc/目錄下,可以使用-f參數指定文件的存儲路徑
查看一下文件內容
# cat /usr/local/pure-ftpd/etc/pureftpd.passwd
joe:$1$ocfl1XW0$R0JaEh3CjGFByGbdN7qNy/:501:501::/home/ftpusers/joe/./::::::::::::
密碼字段是經過加密的。
●更改用戶信息
虛擬用戶創建之後,你也可以通過pure-pw命令來修改其相關的信息,如限制下載
帶寬、磁盤配額、用戶全名、下載上傳率等等
例如:我要修改用戶joe的最大文件數爲1000個,大小爲10MB,命令如下:
# pure-pw usermod joe -n 1000 -N 10
查看一下虛擬用戶列表文件
# cat /usr/local/pure-ftpd/etc/pureftpd.passwd
joe:$1$ocfl1XW0$R0JaEh3CjGFByGbdN7qNy/:501:501::/home/ftpusers/joe/./::::::1000:10485760:::::
●重置用戶屬性
要禁用文件數配額,執行 pure-pw usermod -n ”
要禁用文件大小配額,執行 pure-pw usermod -N ”
要禁用上傳/下載比率,執行 pure-pw usermod -q ” -Q ”
要禁用下載帶寬限制,執行 pure-pw usermod -t ”
要禁止上傳帶寬限制,執行 pure-pw usermod -T ”
要禁止IP地址過濾,使用 pure-pw usermod <-i,-I,-r or -R> ”
要禁止登陸時間限制,執行 pure-pw usermod -z ”
要禁止最大併發數控制,執行 pure-pw usermod -y ”
●刪除用戶
使用pure-pw userdel 命令可以刪除一個已經存在的用戶
pure-pw userdel <login> [-f <passwd file>] [-m]
如:pure-pw userdel joe
用戶home目錄中的文件不會被刪除,需要手動刪除
●更改密碼
更改用戶密碼的命令
# pure-pw passwd <login> [-f <passwd file>] [-m]
●利用pure-pw命令查看用戶信息
# pure-pw show joe
Login : joe
Password : $1$ocfl1XW0$R0JaEh3CjGFByGbdN7qNy/
UID : 501 (ftpuser)
GID : 501 (ftpgroup)
Directory : /home/ftpusers/joe/./
Full name :
Download bandwidth : 0 Kb (unlimited)
Upload bandwidth : 0 Kb (unlimited)
Max files : 0 (enabled)
Max size : 10 Mb (enabled)
Ratio : 0:0 (unlimited:unlimited)
Allowed local IPs :
Denied local IPs :
Allowed client IPs :
Denied client IPs :
Time restrictions : 0000-0000 (unlimited)
Max sim sessions : 0 (unlimited)
★應用更改
重要:
你可以通過上面提到的命令或者手動的來添加/刪除用戶,修改用戶相關限制屬性等等,但是這些改動都是針對虛擬用戶列表文件的(pureftpd.passwd)。pureFTPd服務器程序是不認識這個文件的。要想讓ftp server能夠識別的我們所做的更改,必須要通過pure-pw mkdb 命令生成PureDB格式的文件,實際上PureDB數據文件就是從pureftpd.passwd文件轉換過來的,爲了ftp server可以更快的檢索到指定的用戶。
例如:
# pure-pw mkdb -> 當使用pure-pw 生成虛擬用戶之後一定要使用pure-pw mkdb命令生成數據庫文件,否則pure-ftp啓動之後也無法驗證虛擬用戶
默認情況下會在軟件安裝目錄/etc目錄下生成pureftpd.pdb文件。
如:/usr/local/pure-ftpd/etc/pureftpd.pdb
# pure-pw passwd joe -m
當輸入完兩次新密碼之後,密碼的更改就同時應用到列表文件和pdb數據庫文件中了。是不是很方便!
☆啓用虛擬用戶驗證登陸
1、編譯ftp服務器端的時候一定要加入–with-puredb 選項,或者乾脆–with-everything
2、配置文件中加入PureDB /etc/pureftpd.pdb 或者啓動服務器程序的時候加入參數
-l puredb/usr/local/pure-ftpd/etc/pureftpd.pdb
3、一定要注意自己的pdb文件的位置在哪
○配置文件 vi /usr/local/pure-ftpd/etc/pure-ftpd.conf
ChrootEveryone yes # 啓用chroot
BrokenClientsCompatibility yes # 兼容不同客戶端
Daemonize yes # 後臺運行
MaxClientsPerIP 20 # 每個ip最大連接數
VerboseLog yes # 記錄日誌
DisplayDotFiles no # 顯示隱藏文件
AnonymousOnly no # 只允許匿名用戶訪問
NoAnonymous yes # 不允許匿名用戶連接
SyslogFacility none # 不將日誌在syslog日誌中顯示
DontResolve yes # 不進行客戶端DNS解析
MaxIdleTime 15 # 最大空閒時間
LimitRecursion 2000 8 # 瀏覽限制,文件2000,目錄8層
AnonymousCanCreateDirs no # 匿名用戶可以創建目錄
MaxLoad 4 # 超出負載後禁止下載
PassivePortRange 45000 50000 # 被動模式端口範圍
#AnonymousRatio 1 10 # 匿名用戶上傳/下載比率
UserRatio 1 10 # 所有用戶上傳/下載比率
AntiWarez yes # 禁止下載匿名用戶上傳但未經驗證的文件
#AnonymousBandwidth 200 # 匿名用戶帶寬限制(KB)
UserBandwidth 8 # 所有用戶最大帶寬(KB)
Umask 133:022 # 創建文件/目錄默認掩碼
MinUID 100 # 最大UID限制
AllowUserFXP no # 僅運行用戶進行FXP傳輸
AllowAnonymousFXP no # 對匿名用戶和非匿名用戶允許進行匿名 FXP 傳輸
ProhibitDotFilesWrite no # 不能刪除/寫入隱藏文件
ProhibitDotFilesRead no # 禁止讀取隱藏文件
AutoRename yes # 有同名文件時自動重新命名
AnonymousCantUpload yes # 不允許匿名用戶上傳文件
AltLog clf:/var/log/pureftpd.log # clf格式日誌文件位置
PureDB /usr/local/pure-ftpd/etc/pureftpd.pdb # 用戶數據庫文件
MaxDiskUsage 99 # 當磁盤使用量打到99%時禁止上傳
CreateHomeDir yes # 如果虛擬用戶的目錄不存在則自動創建
CustomerProof yes # 防止命令誤操作
啓動pureFTPd服務
# pure-config.pl /usr/local/pure-ftpd/etc/pure-ftpd.conf
若要pureFTPd隨系統啓動,將命令加入到 /etc/rc.local文件中,如下
# echo “pure-config.pl /usr/local/pure-ftpd/etc/pure-ftpd.conf ” >> /etc/rc.local