CentOS安裝配置pure-ftpd


參考
http://machiel.generaal.net/
http://salogs.com/2010/06/pure-ftpd-deploy/
http://www.fishnote.net/?tag=pure-ftpd
SYSTEM:
CentOS release 6.2
IPADDR:
192.168.78.250

一、安裝
1、yum安裝
yum -y install pure-ftpd
2、編譯安裝
下載路徑:
http://download.pureftpd.org/pub/pure-ftpd/releases/
PureFTPd有很多的編譯配置選項,下面就列出部分主要的配置

View Code
 1 --prefix=PREFIX
 2 --with-sysquotas        使用系統磁盤配額 (非虛擬)
 3 --with-altlog           支持選擇日志格式(類似Apache)
 4 --with-puredb           支持虛擬用戶 (FTP登陸用戶而非系統用戶)
 5 --with-extauth          支持擴展驗證模塊
 6 --with-pam              啟用PAM驗證支持 (默認=禁用)
 7 --with-cookie           啟用Cookie支持 (-F 選項)
 8 --with-throttling       支持帶寬控制 (默認=禁用)
 9 --with-ratios           支持 上傳/下載 速度控制
10 --with-quotas           支持 .ftpquota 文件(指定磁盤配額使用)
11 --with-ftpwho           支持pure-ftpwho(查看在線用戶的程序)
12 --with-largefile        支持大於2G的文件
13 --with-welcomemsg       支持 welcome.msg 向后兼容(已經過時)
14 --with-uploadscript     上傳后允許執行外部腳本 (測試階段)
15 --with-virtualhosts     在不同的IP地址提供虛擬服務器功能
16 --with-virtualchroot    允許在chroot的環境下通過符合連接跳轉到外部
17 --with-diraliases       啟用目錄別名
18 --with-nonroot          普通模式或者說是限制模式. 如果你在該服務器上沒有root權限
19 那只有啟用該項
20 --with-peruserlimits    支持每個用戶的並發限制
21 --with-language=        語言支持< english | traditional-chinese | simplified-chinese>
22 --with-ldap             在LDAP目錄中提供用戶數據庫
23 --with-mysql            在MySQL數據庫中存放用戶數據
24 --with-pgsql            在PostgreSQL數據庫中存放用戶數據
25 --with-privsep          啟用權限分離
26 --with-tls              啟用 SSL/TLS 支持 (測試階段, 需要安裝 OpenSSL)
27 --with-certfile=        證書文件 (默認目錄: /etc/ssl/private/pure-ftpd.pem)
28 --with-rfc2640          啟用兼容 RFC 2640 支持(UTF-8 編碼的文件名,測試階段,需要安裝iconv)
29 --with-everything       啟用大多數選項,編譯完功能版本的服務器端。

為了方便起見,我在這里使用了幾個基本的編譯命令來配置編譯一個全功能版本的程序
# ./configure --prefix=/usr/local/pure-ftpd/ --with-language=simplified-chinese --with-everything
# make && make check && make install

二、配置
1、配置 FTP登錄賬戶:
pure-ftp默認采用Linux的root用戶。虛擬用戶則能夠更好的控制訪問權限。虛擬用戶是和Linux系統用戶關聯的獨立的賬戶系統。
所以在創建虛擬用戶之前最好先創建一個系統的賬戶和組。創建一個ftpgroup組和ftpuser用戶
# groupadd ftpgroup
# useradd -g ftpgroup -d /dev/null -s /sbin/nologin ftpuser
# mkdir /data/ftpdata
# chown ftpuser.ftpgroup /data/ftpdata
2、配置文件
# cp /etc/pure-ftpd/pure-ftpd.conf /etc/pure-ftpd/pure-ftpd.conf_bak
# vi pure-ftpd.conf

View Code
 1 ChrootEveryone              yes
 2 BrokenClientsCompatibility  yes
 3 Daemonize                   yes
 4 MaxClientsPerIP             20
 5 VerboseLog                  yes
 6 DisplayDotFiles             no
 7 AnonymousOnly               no
 8 NoAnonymous                 yes
 9 SyslogFacility              none
10 DontResolve                 yes
11 MaxIdleTime                 15
12 LimitRecursion              2000 8
13 AnonymousCanCreateDirs      no
14 MaxLoad                     4
15 PassivePortRange          45000 50000
16 #AnonymousRatio                1 10
17 #UserRatio                 1 10
18 AntiWarez                   yes
19 #AnonymousBandwidth            200
20 UserBandwidth               8  
21 Umask                       133:02
22 MinUID                      100  
23 AllowUserFXP                no   
24 AllowAnonymousFXP           no    
25 ProhibitDotFilesWrite       no    
26 ProhibitDotFilesRead        no   
27 AutoRename                  yes
28 AnonymousCantUpload         yes  
29 AltLog                     clf:/var/log/pureftpd.log
30 PureDB                     /etc/pure-ftpd/pureftpd.pdb
31 MaxDiskUsage               99
32 CreateHomeDir              yes
33 CustomerProof              yes

上面使用的配置文件說明

 1 ChrootEveryone              yes         # 啟用chroot
 2 BrokenClientsCompatibility  yes         # 兼容不同客戶端
 3 Daemonize                   yes         # 后台運行
 4 MaxClientsPerIP             20          # 每個ip最大連接數
 5 VerboseLog                  yes         # 記錄日志
 6 DisplayDotFiles             no          # 顯示隱藏文件
 7 AnonymousOnly               no          # 只允許匿名用戶訪問
 8 NoAnonymous                 yes         # 不允許匿名用戶連接
 9 SyslogFacility              none        # 不將日志在syslog日志中顯示
10 DontResolve                 yes         # 不進行客戶端DNS解析
11 MaxIdleTime                 15          # 最大空閑時間
12 LimitRecursion              2000 8      # 瀏覽限制,文件2000,目錄8層
13 AnonymousCanCreateDirs      no          # 匿名用戶可以創建目錄
14 MaxLoad                     4           # 超出負載后禁止下載
15 PassivePortRange          45000 50000   # 被動模式端口范圍
16 #AnonymousRatio                1 10     # 匿名用戶上傳/下載比率
17 UserRatio                 1 10          # 所有用戶上傳/下載比率
18 AntiWarez                   yes         # 禁止下載匿名用戶上傳但未經驗證的文件
19 #AnonymousBandwidth            200      # 匿名用戶帶寬限制(KB)
20 UserBandwidth               8           # 所有用戶最大帶寬(KB)
21 Umask                       133:022     # 創建文件/目錄默認掩碼
22 MinUID                      100         # 驗證登錄用戶的最小UID
23 AllowUserFXP                no          # 僅運行用戶進行FXP傳輸
24 AllowAnonymousFXP           no          # 對匿名用戶和非匿名用戶允許進行匿名 FXP 傳輸
25 ProhibitDotFilesWrite       no          # 不能刪除/寫入隱藏文件
26 ProhibitDotFilesRead        no          # 禁止讀取隱藏文件
27 AutoRename                  yes         # 有同名文件時自動重新命名
28 AnonymousCantUpload         yes         # 不允許匿名用戶上傳文件
29 AltLog                     clf:/var/log/pureftpd.log                # clf格式日志文件位置
30 PureDB                     /usr/local/pure-ftpd/etc/pureftpd.pdb        # 用戶數據庫文件
31 MaxDiskUsage               99           # 當磁盤使用量打到99%時禁止上傳
32 CreateHomeDir              yes          # 如果虛擬用戶的目錄不存在則自動創建#需要ftp根目錄權限為755 chmod 775 /data/ftpdata/
33 CustomerProof              yes          # 防止命令誤操作

完整pure-ftpd.conf配置文件說明

View Code
  1 # 將每個用戶限制在自己的home目錄下
  2 ChrootEveryone              yes
  3 
  4 # 兼容ie等比較非正規化的ftp客戶端。默認:no
  5 BrokenClientsCompatibility  yes
  6 
  7 # 最大用戶連接數。默認:50
  8 MaxClientsNumber            2000
  9 
 10 # 后台模式(守護進程模式)
 11 Daemonize                   yes
 12 
 13 # 同一個IP允許連接數(可以防止迅雷、快車等程序瘋狂開線程)。默認:8
 14 MaxClientsPerIP             20
 15 
 16 # 如果要記錄所有的客戶端命令,請設置為‘yes’該選項可以將日志同步復制到日志服務器。默認:no
 17 VerboseLog                  yes
 18 
 19 # 顯示隱藏文件。默認:yes
 20 DisplayDotFiles             yes
 21 
 22 # 不允許驗證用戶。只作為匿名ftp服務器。默認:no
 23 AnonymousOnly               no
 24 
 25 # 不允許匿名用戶連接。只允許驗證用戶連接。默認:no
 26 NoAnonymous                 no
 27 
 28 # 該選項是說將何種類型的日志同步寫入到syslog中。
 29 # 類型包括(auth, authpriv, daemon, ftp, security, user, local*)
 30 # 默認是"ftp"如果不想將ftp的日志顯示在/var/log/message中。則禁用即可: "none"
 31 SyslogFacility              none
 32 
 33 # 顯示 cookies
 34 # FortunesFile              /usr/share/fortune/zippy
 35 
 36 # 在日志文件中不解析主機名。日志越詳細所需要的帶寬也就越大。如果服務器的
 37 # DNS解析有問題或者服務器的負載過大,建議將該選項配置yes。默認為:yes
 38 DontResolve                 yes
 39 
 40 # 最大空閑時間。單位:分鍾 (默認 = 15 分鍾)
 41 MaxIdleTime                 15
 42 
 43 # LDAP 配置文件
 44 # LDAPConfigFile                /etc/pureftpd-ldap.conf
 45 
 46 # MySQL 配置文件 (詳情見 README.MySQL)
 47 # MySQLConfigFile               /etc/pureftpd-mysql.conf
 48 
 49 # Postgres 配置文件 (詳情見 README.PGSQL)
 50 # PGSQLConfigFile               /etc/pureftpd-pgsql.conf
 51 
 52 # PureDB 用戶數據庫 (詳情見 README.Virtual-Users)
 53 # PureDB                        /etc/pureftpd.pdb
 54 
 55 # pure-authd 的 socket 路徑 (詳見 README.Authentication-Modules)
 56 # ExtAuth                       /var/run/ftpd.sock
 57 
 58 # 如果要使用PAM驗證,取消下面行的注釋
 59 # PAMAuthentication             yes
 60 
 61 # 如果要使用/etc/passwd 文件驗證。取消下面行的注釋
 62 # UnixAuthentication            yes
 63 
 64 # 注意:LDAPConfigFile, MySQLConfigFile, PAMAuthentication 與 UnixAuthentication
 65 # 只能啟用一個,但他們可以聯合使用。例如:你啟用了 MySQLConfigFile 之后又啟用了
 66 # UnixAuthentication那么同一時刻只有SQL server 可用。如果SQL authentication 失敗,
 67 # 例如用戶沒有找到,那么系統會重試其他的方式來驗證,這時候它就會找/etc/passwd 和
 68 # /etc/shadow文件. 如果通過 SQL 驗證的結果是因為密碼錯誤,那么就不會在進行下面的
 69 # 驗證了。由此得知,驗證方法可以寫多個,但同一個時刻只有一個工作,且當驗證時找不
 70 # 到信息時才會進行下一個驗證方式。但當驗證錯誤時就終止驗證了。
 71 
 72 # 'ls' 遞歸限制。第一個參數是最大可顯示的文件數。第二個參數是子文件夾深度
 73 LimitRecursion              2000 8
 74 
 75 # 匿名用戶是否可以創建新文件夾
 76 AnonymousCanCreateDirs      no
 77 
 78 # 如果系統負載超過下面所給的數字,那么匿名用戶將無法下載
 79 MaxLoad                     4
 80 
 81 # 在被動連接模式下為其分配的端口范圍。便於制定防火牆配置。
 82 PassivePortRange          45000 50000
 83 
 84 # 強制某個IP地址工作在 PASV/EPSV/SPSV 模式. - for NAT.
 85 # ForcePassiveIP                192.168.0.1
 86 
 87 # 匿名用戶上傳/下載比率
 88 # AnonymousRatio                1 10
 89 
 90 # 所有用戶 上傳/下載 比率。該選項可以取代上面的選項
 91 # UserRatio                 1 10
 92 
 93 # 禁止下載所有者為‘ftp’的文件。例如:那些匿名用戶上傳后未被本地管理員驗證的文件。
 94 AntiWarez                   yes
 95 
 96 # 用來監聽的IP地址和端口 (默認=所有 IP 和 21 端口).
 97 # Bind                      127.0.0.1,21
 98 
 99 # 匿名用戶最大帶寬限制,單位 KB/s
100 AnonymousBandwidth            200
101 
102 # 所有用戶的最大帶寬限制(包括匿名)單位 KB/s
103 # 沒有必要同時開啟 AnonymousBandwidth 和 UserBandwidth
104 # UserBandwidth             8
105 
106 # 新建文件默認掩碼. <文件掩碼>:<目錄掩碼>
107 # 為了安全起見可以設置為 177:077
108 Umask                       133:022
109 
110 # 驗證登錄用戶的最小UID
111 MinUID                      100
112 
113 # 僅允許認證用戶進行 FXP 傳輸
114 AllowUserFXP                no
115 
116 # 對匿名用戶和非匿名用戶允許進行匿名 FXP 傳輸
117 AllowAnonymousFXP           no
118 
119 # 用戶不能刪除/寫入隱藏文件,即便是文件的擁有者也不允許。
120 # 如果 TrustedGID 選項為 enabled 文件所屬組用戶可以訪問隱藏文件
121 ProhibitDotFilesWrite       no
122 
123 # 禁止讀取隱藏文件 (如 .history, .ssh...)
124 ProhibitDotFilesRead        no
125 
126 # 永不覆蓋文件。如果上傳的文件已經存在,系統會自動將其命名為file.1, file.2, file.3, ...
127 AutoRename                  yes
128 
129 # 不允許匿名用戶上傳文件 (no = 允許上傳)
130 AnonymousCantUpload         no
131 
132 # 僅允許來自以下IP地址的非匿名用戶連接。你可以使用這個指令來打開幾個公
133 # 網IP來提供匿名FTP,而保留一個私有的防火牆保護的IP來進行遠程管理。你
134 # 還可以只允許一內網地址進行認證,而在另外一個IP上提供純匿名的FTP服務。
135 #TrustedIP                  10.1.1.1
136 
137 # 如果你要在登陸日志的每一行添加PID標記,去掉下行的注釋
138 #LogPID                     yes
139 
140 # 使用類似於Apache格式創建一個附加的日志文件,如:
141 # fw.c9x.org - jedi [13/Dec/1975:19:36:39] "GET /ftp/linux.tar.bz2" 200 21809338
142 # 這個日志文件可以被www流量分析工具來處理
143 AltLog                     clf:/var/log/pureftpd.log
144 
145 # 使用優化過的格式為統計報告創建一個額外的日志文件
146 # AltLog                     stats:/var/log/pureftpd.log
147 
148 # 使用標准的W3C格式創建一個額外的日志文件。(與大部分的商業日志分析器兼容)
149 # AltLog                     w3c:/var/log/pureftpd.log
150 
151 # 不允許使用chmod命令.用戶不能修改他們上傳文件的屬性
152 #NoChmod                     yes
153 
154 # 允許用戶恢復和上傳文件,但不能夠上除他們
155 #KeepAllFiles                yes
156 
157 # 用戶主目錄不存在的話,自動創建目錄
158 #CreateHomeDir               yes
159 
160 # 啟用虛擬磁盤配額。第一個參數是最大文件數,第二個參數是總共的大小,單位是MB
161 # 如: 1000:10 限制每個用戶最大文件1000個且不能超過10MB
162 #Quota                       1000:10
163 
164 # 如果你在編譯 pure-ftpd 時加入了‘standalone’選項,那么你可以更改pid文件位置
165 # 默認目錄 /var/run/pure-ftpd.pid
166 #PIDFile                     /var/run/pure-ftpd.pid
167 
168 # 如果你在編譯 pure-ftpd 時加入了 pure-uploadscript 選項,這個指令將會使
169 # pure-ftpd 發送關於新上傳的情況信息到 /var/run/pure-ftpd.upload.pipe,
170 # 這樣 pure-uploadscript 就能讀然后調用一個腳本去處理新的上傳。
171 #CallUploadScript yes
172 
173 # 這個選項對於匿名上傳的服務器是很有用的。/var/ftp 在 /var 里時,需要保留一定
174 # 磁盤空間來保護日志文件。當所在磁盤分區使用超過百分之 X 時,將不在接受新的上傳。
175 MaxDiskUsage               99
176 
177 # 如果不想讓用戶來重命名文件,請將其設置為yes
178 #NoRename                  yes
179 
180 # 'customer proof' : 選項可以阻止普通用戶因誤操作而執行的錯誤命令
181 # 如:'chmod 0 public_html', 這是有效的命令,但執行完命令之后用戶
182 # 就將他們自己的文件鎖定了,這時你的麻煩就來了,你需要給用戶解決這
183 # 些由於用戶而造成的愚蠢問題。如果你確信的你用戶都具有一些unix基礎
184 # 知識的話,那么該選項就沒有必要設置,否則建議啟用它。
185 CustomerProof              yes
186 
187 # 所有用戶都做同樣的限制。只有編譯時加入了--with-peruserlimits 選項
188 # 才可以啟用。格式為: <每一個用戶最大許可的進程>:<匿名用戶最大進程>
189 # 例如:3:20 同一個認證用戶最大可以有3個同時活動的進程。而且同時最多
190 # 只能有20個匿名用戶進程
191 # PerUserLimits            3:20
192 
193 # 當文件上傳時,服務器上之前已經有一個同名的文件時,舊的文件既不會被移動
194 # 也不會被刪除。在新文件上傳完畢之前會將上傳的部分暫時放到一個臨時的文件
195 # 中,當上傳完畢之后會自動的切換到新上傳的文件。例如:當服務器上有一個PHP
196 # 腳本正在執行,但我現在要上傳一個新的PHP腳本,那么當我在上傳完畢之后才將
197 # 舊的文件切換到新的文件。而不是像某些程序那樣在開始上傳的時候就將舊的文件
198 # 覆蓋掉了,這樣做的目的就是可以最大程度的減少正在運行中的程序錯誤。該選項
199 # 與虛擬配額不能同時使用。
200 # NoTruncate               yes
201 
202 # 該選項可以接受3個可選值:
203 # 0 : 禁用 SSL/TLS 加密層 (默認).
204 # 1 : 同時接受傳統的和加密的連接
205 # 2 : 拒絕沒有經過 SSL/TLS 安全驗證的連接,包括匿名連接
206 # 在沒有確定下面三個問題之前不要盲目的取消注釋:
207 # 1) 編譯PureFTPd時是否啟用了 SSL/TLS 支持 (--with-tls),
208 # 2) 系統中是否包含一個有效的證書
209 # 3) 開啟后只有兼容的客戶端才能登陸
210 # TLS                      1
211 
212 # 在 standalone 模式下只監聽IPV4的地址 (與禁用 IPv6 相同)
213 # 默認是IPV4與IPV6同時監聽
214 # IPV4Only                 yes
215 
216 # 在 standalone 模式下只監聽IPV6的地址 (與禁用 IPv4 相同)
217 # IPV6Only                 yes
218 
219 # 文件名的UTF-8支持
220 # FileSystemCharset big5
221 # ClientCharset     big5

三、用戶管理
1、添加用戶
# pure-pw useradd lily -u ftpuser -g ftpgroup -d /data/ftpdata/lily
Password:
Enter it again:
# pure-pw mkdb -> 當使用pure-pw 生成虛擬用戶之后一定要使用pure-pw mkdb命令生成數據庫文件,
否則pure-ftp啟動之后也無法驗證虛擬用戶
第一個用戶,需要手動建立文件

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]

使用-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
# cat /usr/local/pure-ftpd/etc/pureftpd.passwd
joe:$1$ocfl1XW0$R0JaEh3CjGFByGbdN7qNy/:501:501::/home/ftpusers/joe/./::::::::::::
密碼字段是經過加密的。

2、更改用戶信息
虛擬用戶創建之后,你也可以通過pure-pw命令來修改其相關的信息,如限制下載
帶寬、磁盤配額、用戶全名、下載上傳率等等
例如:我要修改用戶joe的最大文件數為1000個,大小為10MB,命令如下:
# pure-pw usermod joe -n 1000 -N 10
查看一下虛擬用戶列表文件
# cat /etc/pure-ftpd/pureftpd.passwd
lily:$1$gH6aMxg0$he9g3F/HHFwvipEozvU4G0:505:504::/data/ftpdata/lily/./::::::::::::

3、重置用戶屬性
要禁用文件數配額,執行 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 ''

4、刪除用戶
使用pure-pw userdel 命令可以刪除一個已經存在的用戶
pure-pw userdel <login> [-f <passwd file>] [-m]
如:pure-pw userdel joe
用戶home目錄中的文件不會被刪除,需要手動刪除

5、更改密碼
更改用戶密碼的命令
# pure-pw passwd <login> [-f <passwd file>] [-m]

6、利用pure-pw命令查看用戶信息
# pure-pw show lily

Login : lily
Password : $1$gH6aMxg0$he9g3F/HHFwvipEozvU4G0
UID : 505 (ftpuser)
GID : 504 (ftpgroup)
Directory : /data/ftpdata/lily/./
Full name :
Download bandwidth : 0 Kb (unlimited)
Upload bandwidth : 0 Kb (unlimited)
Max files : 0 (unlimited)
Max size : 0 Mb (unlimited)
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)

四、使用數據管理
1、導入數據
# mysql -uroot -p < script.mysql
sql腳本內容

View Code
 1 --
 2 -- Create MySQL user called 'ftp'
 3 -- Login = ftp
 4 -- Password = tmppasswd
 5 -- Host = 127.0.0.1
 6 --
 7 
 8 #INSERT INTO mysql.user (Host, User, Password, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Process_priv, File_priv, Grant_priv, References_priv, Index_priv, Alter_priv) VALUES('127.0.0.1','ftp',PASSWORD('tmppasswd'),'Y','Y','Y','Y','N','N','N','N','N','N','N','N','N','N');
 9 
10 #FLUSH PRIVILEGES;
11 
12 CREATE DATABASE ftpusers;
13 
14 USE ftpusers;
15 
16 --
17 -- Table structure for table 'admin'
18 --
19 
20 CREATE TABLE admin (
21   Username varchar(35) NOT NULL default '',
22   Password char(32) binary NOT NULL default '',
23   PRIMARY KEY  (Username)
24 ) TYPE=MyISAM;
25 
26 --
27 -- Data for table 'admin'
28 --
29 
30 
31 INSERT INTO admin VALUES ('Administrator',MD5('tmppasswd'));
32 
33 --
34 -- Table structure for table 'users'
35 --
36 
37 CREATE TABLE users (
38   User char(16) NOT NULL default '',
39   Password char(32) binary NOT NULL default '',
40   Uid int(11) NOT NULL default '14',
41   Gid int(11) NOT NULL default '5',
42   Dir char(128) NOT NULL default '',
43   QuotaFiles int(10) NOT NULL default '500',
44   QuotaSize int(10) NOT NULL default '30',
45   ULBandwidth int(10) NOT NULL default '80',
46   DLBandwidth int(10) NOT NULL default '80',
47   PRIMARY KEY  (User)
48 ) TYPE=MyISAM;
49 
50 --
51 -- Data for table 'users'
52 --
53 INSERT INTO users VALUES ('diege',MD5('1111'),14,5,'/data/ftpdata/diege/',500,30,80,5);
54 grant all on ftpusers.* to 'ftp'@'localhost' identified by 'tmppasswd';
55 FLUSH PRIVILEGES;

2、配置
# vim pure-ftpd.conf

View Code
 1 ChrootEveryone              yes
 2 BrokenClientsCompatibility  yes
 3 Daemonize                   yes
 4 MaxClientsPerIP             20
 5 VerboseLog                  yes
 6 DisplayDotFiles             no
 7 AnonymousOnly               no
 8 NoAnonymous                 yes
 9 SyslogFacility              none
10 DontResolve                 yes
11 MaxIdleTime                 15
12 LimitRecursion              2000 8
13 AnonymousCanCreateDirs      no
14 MaxLoad                     4
15 PassivePortRange          45000 50000
16 AntiWarez                   yes
17 Umask                       133:02
18 MinUID                      100  
19 AllowUserFXP                no   
20 AllowAnonymousFXP           no    
21 ProhibitDotFilesWrite       no    
22 ProhibitDotFilesRead        no   
23 AutoRename                  yes
24 AnonymousCantUpload         yes  
25 AltLog                     clf:/var/log/pureftpd.log
26 MySQLConfigFile             /etc/pure-ftpd/pureftpd-mysql.conf
27 MaxDiskUsage               99
28 CreateHomeDir              yes
29 CustomerProof              yes

# vim pureftpd-mysql.conf
修改
MYSQLUser ftp
MYSQLPassword tmppasswd
MYSQLDatabase ftpuser
MYSQLCrypt md5

3、重啟
# /etc/init.d/pure-ftpd restart

4、詳細配置mysql
ULBandwidth 上傳速度
DLBandwidth 下載數據
默認mysql配置只有用戶認證,其他功能需要開啟
打開上傳下載速度控制
# vim /etc/pure-ftpd/pureftpd-mysql.conf
MySQLGetBandwidthUL SELECT ULBandwidth FROM users WHERE User='\L'
MySQLGetBandwidthDL SELECT DLBandwidth FROM users WHERE User='\L'

五、使用GUI管理
http://machiel.generaal.net/有一個php的管理程序,在RHCE5,FREEBSD8都可以使用,在RHEL6(PHP5.3)上有問題
准備有空用django開發一個GUI管理工具

六、腳本

1、vsftpd添加用戶shell腳本

View Code
 1 #!/bin/bash
 2 #Created on 2012-08-17
 3 #@author: Jin
 4 
 5 fusername=$1
 6 fpasswd=$2
 7 ch_list=/etc/vsftpd/chroot_list
 8 vuserdir="/etc/vsftpd/vconf"
 9 vuserfile=${vuserdir}/vir_user
10 vuserdb=${vuserdir}/vir_user.db
11 if [ $# -eq 2 ];then
12         grep -q $fusername $vuserfile
13         code="$?"
14         if [ $code -eq 0 ];then
15                 echo "${fusername} exist!" && exit 1
16         fi
17         mkdir /opt/${fusername} && chown ftpuser:ftpuser /opt/${fusername}
18         echo "${fusername}" >> ${ch_list}
19         echo "${fusername}" >> $vuserfile && echo "${fpasswd}" >> $vuserfile
20         exitcode="$?"
21         if [ $exitcode -eq 0 ];then
22                 /usr/bin/db_load -T -t hash -f $vuserfile ${vuserdb}
23         fi
24         if [ -f ${vuserdir}/${fusername} ];then
25                 echo "${vuserdir}/${fusername} exist!"
26         else
27                 cp ${vuserdir}/default ${vuserdir}/${fusername} && sed -i s/default/${fusername}/g ${vuserdir}/${fusername}
28         fi
29 else
30         echo "Please give ftpusername and ftppassword!"
31 fi

2、pure-ftpd添加刪除賬號,修改賬號python腳本

View Code
  1 #!/bin/env python
  2 '''
  3 Created on 2012-11-7
  4 
  5 @author: Jin
  6 
  7 '''
  8 import os
  9 import sys
 10 import optparse
 11 import subprocess
 12 
 13 
 14 #ftproot='/disk3/biftp/dump/'
 15 ftproot='/data/ftpdata/'
 16 reload_cmd='/usr/bin/pure-pw mkdb'
 17 
 18 def addftpuser(ftpusername):
 19         userftpdir=ftproot+ftpusername
 20         cmd='/usr/bin/pure-pw useradd '+ftpusername+' -u ftpuser -g ftpgroup -d '+userftpdir
 21         '''
 22         print "ftproot is:%s\n" % ftproot
 23         print "user is:%s\n" % ftpusername
 24         print "userftpdir is:%s\n" % userftpdir
 25         print "cmd is:%s\n" % cmd
 26         print "reload_cmd is:%s\n" % reload_cmd
 27         '''
 28         try:
 29                 pstat=subprocess.Popen(cmd,shell=True,stderr=subprocess.PIPE)
 30         except StandardError,e:
 31                 print "Add ftpuser (%s) failed:: %d (%s)" % (ftpusername,e.errno, e.strerror)
 32                 sys.exit(1)
 33         else:
 34                 pstat.wait()
 35                 if pstat.returncode == 0:
 36                         retcode=subprocess.call(reload_cmd,shell=True)
 37                         if retcode==0:
 38                                 print "Add ftpuser (%s) Successful" % ftpusername
 39                         else:
 40                                 print "Add ftpuser (%s) Successful,But reload puredb failed,Pleae rum command 'pure-pw mkdb' in shell" % ftpusername
 41                 else:
 42                         print "Add ftpuser (%s) failed,exit code is %s,With reason <%s>" % (ftpusername,pstat.returncode,pstat.stderr.read().rstrip('\n'))
 43 
 44 def delftpuser(ftpusername):
 45         cmd='/usr/bin/pure-pw userdel '+ftpusername 
 46         try:
 47                 pstat=subprocess.Popen(cmd,shell=True,stderr=subprocess.PIPE)
 48         except StandardError,e:
 49                 print "Delete ftpuser (%s) failed:: %d (%s)" % (ftpusername,e.errno, e.strerror)
 50                 sys.exit(1)
 51         else:
 52                 pstat.wait()
 53                 if pstat.returncode == 0:
 54                         retcode=subprocess.call(reload_cmd,shell=True)
 55                         if retcode==0: 
 56                                 print "Delete ftpuser (%s) Successful" % ftpusername
 57                         else:
 58                                 print "Delete ftpuser (%s) Successful,But reload puredb failed,Pleae rum command 'pure-pw mkdb' in shell" % ftpusername
 59                 else:
 60                         print "Delete ftpuser (%s) failed,exit code is %s,With reason <%s>" % (ftpusername,pstat.returncode,pstat.stderr.read().rstrip('\n'))
 61 
 62 
 63 def changepwd(ftpusername):
 64         cmd='/usr/bin/pure-pw passwd '+ftpusername 
 65         try:
 66                 pstat=subprocess.Popen(cmd,shell=True,stderr=subprocess.PIPE)
 67         except StandardError,e:
 68                 print "Change ftpuser (%s) password failed:: %d (%s)" % (ftpusername,e.errno, e.strerror)
 69                 sys.exit(1)
 70         else:
 71                 pstat.wait()
 72                 if pstat.returncode == 0:
 73                         retcode=subprocess.call(reload_cmd,shell=True)
 74                         if retcode==0: 
 75                                 print "Change ftpuser (%s) password Successful" % ftpusername
 76                         else:
 77                                 print "Change ftpuser (%s) password Successful,But reload puredb failed,Pleae rum command 'pure-pw mkdb' in shell" % ftpusername
 78                 else:
 79                         print "Change ftpuser (%s) password failed,exit code is %s,With reason <%s>" % (ftpusername,pstat.returncode,pstat.stderr.read().rstrip('\n'))
 80 
 81 def main():
 82         p=optparse.OptionParser(description="'ftpuser' is command add or delete ftp user or change ftp user password",prog="ftpuser",version="0.0.1",usage="%prog [-a|--add|-d|--delete|-p|--passwd] ftpusername")
 83         p.add_option("--add",'-a',action='store_true',help="Add ftp user")
 84         p.add_option("--delete","-d",action='store_true',help="Delete ftp user")
 85         p.add_option("--passwd","-p",action='store_true',help="Change ftp user password")
 86         options,arguments=p.parse_args()
 87         if len(arguments)==1 and options:
 88                 if options.add:
 89                         addftpuser(arguments[0])
 90                 elif options.delete:
 91                         delftpuser(arguments[0])
 92                 elif options.passwd:
 93                         changepwd(arguments[0])
 94                 else:
 95                         p.print_help()
 96         else:
 97             p.print_help()
 98     
 99 
100 if __name__ == '__main__':
101       main()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM