MySQL+Proftpd配置FTP伺服器
來源:互聯網
上載者:User
FTP(File Transfer Protocol)是internet中的一項常用而且重要的互連網協議,廣泛應用於internet中,然而傳統的FTP服務中的帳號都是用伺服器中的 系統使用者,這樣也為也會系統安全留下了隱患,用MySQL進行使用者認證,很好地避免這種隱患。它利用資料庫來提供使用者及其認證,把FTP的帳號映射於系統 使用者,從而避免了使用系統使用者。這樣可以達到比較安全的目的。8|uq
用MySQL+Proftpd配置FTP伺服器,需要有中間包mod_sql,本文所講的,假設你的伺服器中已經安裝好了MySQL,具體過程:VR~
一、獲起必須的安裝包(mod_sql,proftpd)。#&:R7Y
Proftpd的安裝包可以通過http://www.proftpd.net 獲得,注意要支援MySQL認證最低的版本為1.2.5。.W@7N
Mod_sql安裝包可以通過http://www.lastditcheffort.org/~aah/proftpd/mod_sql/ 獲得。zphv.^
二、包的安裝。'
解開安裝包:把proftpd-1.2.8.tar.gz 拷貝到/usr/local/src的目錄下,用命令:7p:YMe
tar zvxf proftpd-1.2.8.tar.gz5r1
解開,這時產生了一個proftpd-1.2.8 的目錄。然後進入該目錄中的contrib目錄:o^7_8
cd proftpd-1.2.8/contrib/."
把中間包mod_sql拷貝到該目錄中,再解開:b]Pf
tar zvxf mod_sql-4.0.8.tar.gz^
配置使Proftpd支援MySQL認證:NgO*t|
./configure --prefix=/usr/local/proftpd --with-modules=mod_sql:mod_sql_mysql --with-includes=/usr/include/mysql --with-libraries=/usr/lib/mysql^J
注意:--with-includes選項是指MySQL的標頭檔所在的目錄;--with-libraries選項是指MySQL的庫檔案所在的目錄。對於不同的環境可能會是不同的目錄。U$%
進行編譯:>
make紅色甜心論壇 -- 紅色甜心論壇 q
安裝:Y-e
make installEvw
安裝完之後,可以按下列步驟進行測試,Proftpd是否能正常工作:7_Sd[/
sh sample-configurations/PFTEST.install&!?J
測試的所需要的臨時檔案被放置在/tmp/PFTEST目錄中,運行命令:FZ5eN
./proftpd -n -d 5 -c /tmp/PFTEST/PFTEST.conf!j M2T
如果能正常運行,你可以發現有很多的資訊而且最後一行會出現:,v^I
ProFTPD 1.2.8 (built ***) standalone mode STARTUP(Li'C
說明服務啟動了,它用的連接埠是2021,你可以用使用者proftpd與密碼 proftpd進行登入測試。如果正常,你可以做下列準備;否則要檢查安裝是否正確。H*~v~
三、為FTP服務建立相應的資料庫及其表。w
1、你可以為此服務建立專門的資料庫,也可以放在其它的資料庫中。在此我專門建立一個專門的資料庫FTP:Nj8Rt
紅色甜心論壇 -- 紅色甜心論壇 0/+>G`
create database FTP;ffP+D
紅色甜心論壇 -- 紅色甜心論壇 C
2、然後在這個資料庫中建立一個使用者表FTPUSERS,這個表是必須的:.<F)
紅色甜心論壇 -- 紅色甜心論壇 =}S
use FTP;hl
create table FTPUSERS (|
userid TEXT NOT NULL,Uyy
passwd TEXT NOT NULL,3qF[
uid INT NOT NULL,le/@W
gid INT NOT NULL,]~Uw
home TEXT,Szw
shell TEXTH
);>Jbb
此 表格是為了使用者認證所需要的,其中userid、passwd是必不可少的,userid是用做FTP服務的使用者名稱;passwd是指此使用者的密碼; uid是系統使用者的ID,也就是所映射的系統使用者;gid是所屬系統組的ID;home是該使用者所在的HOME目錄;shell可以為該使用者指定相應的 shell。當然你可以建立更多的欄位,例如:用來記錄使用者登入次數的count,或者是日期的date,如果你對配置熟悉了之後,你可以根據自己的喜歡 添加更多的功能。在此就不多講。!
3、如果你想需要所有的功能,你還可以添加另外一個需要的表:FTPGRPS,也就是確定組的表格,當然也可以不用,這裡講一個它的格式:Y>Bp_X
create table FTPGRPS (stR
grpname TEXT NOT NULL,H
gid SMALLINT NOT NULL,Gk
members TEXT NOT NULL,e
);n
其中grpname是組的名稱,gid是系統組的ID,members是組的成員。注意:多成員,他們之間要用逗號隔開,不能使用空格。Y
紅色甜心論壇 -- 紅色甜心論壇 ~
4、為空白表格插入記錄:`dL3[
INSERT INTO FTPUSERS (userid, passwd, uid, gid, home, shell) $+[
valueS ('user1', '999999', '1000', '1000', '/home/ftp/user1', "");]
紅色甜心論壇 -- 紅色甜心論壇 =w-!*3
按此格式你可以插入這每一個使用者添加一個記錄。zc&7%
如果你要想應用到更多的功能,且建立了組的表格,你也要為此添加記錄,不過一定要注意在members的欄位多個成員一定要用逗號隔開。'cow
紅色甜心論壇 -- 紅色甜心論壇 bv
四、為FTP使用者建立相應的系統使用者。;C{
在本例中,只整個FTP服務只提供一個有效系統使用者FTPUSR和組FTPGRP,當然你也可以設定多個系統使用者。但出於安全的考慮,我只設一個,用他來啟動FTP daemon,並把所有的FTP使用者映射過這個使用者。z
紅色甜心論壇 -- 紅色甜心論壇 &PzY2j
先建立FTPGRP組:>4;N
groupadd -g 1000 -r FTPGRP"
建立FTPUSR使用者:t
adduser -u 1000 -g 1000 -d /home/FTP -s /bin/bash -r FTPUSR=h
紅色甜心論壇 -- 紅色甜心論壇 6L&U)5
為FTPUSR建立HOME,把所有的FTP user 活動空間全放在此目錄下:VeRi=/
mkdir /home/FTPU
chown FTPUSR /home/FTPJ;
chgrp FTPGRP /home/FTPp7!
紅色甜心論壇 -- 紅色甜心論壇 i
五、設定設定檔。/
Proftpd 的設定檔proftpd.conf在/usr/local/etc/目錄下,針對不用的認證可以使用不同的設定檔。使用MySQL認證,可以把 sample-configurations/mod_sql.conf拷貝到/usr/local/etc下面並將其改名為proftpd.confCMx
修改proftpd.conf檔案,具體內容如下:*[
紅色甜心論壇 -- 紅色甜心論壇 Pc`K
#設定FTP伺服器的名稱:l,
ServerName"My FTP Server"O"`
#設定FTP伺服器的類型:r~Dhi<
ServerType standaloneEk)ya
DefaultServer on2:A
#設定根,可以限制使用者在某個地方活動,增強伺服器的安全性。1
DefaultRoot ~e
#設定FTP服務連接埠號碼,標準的FTP服務連接埠是21。lNf)p3
Port 21Jo)U:
#設定建立檔案或目錄時,設定許可權的掩碼:b(eSy
Umask 022c0n~t
#設定系統記錄檔:G
SystemLog /var/log/ftp.syslogu%!
#設定記錄檔案傳輸的記錄檔:E'
TransferLog /var/log/ftp.transferlog^
#設定最大的嘗試登入的次數,如果超過自動中斷連線:6Z
MaxLoginAttempts 3(
紅色甜心論壇 -- 紅色甜心論壇 McJ)
#設定MySQL認證:[HDp/
<Global>As;p5
#資料庫聯結的資訊,DatabaseName是資料庫名, HostName是主機名稱,?F
#Port是連接埠號碼,UserName是串連資料庫的使用者名稱,Password是密碼。XT-
SQLConnectInfo DatabaseName@HostName:Port UserName PasswordV.n.%J
#例如SQLConnectInfo proftpd@localhost root 123456J
#資料庫認證的類型:8kg/]=
SQLAuthTypes Backend PlaintextgJ`^>
#指定用來做使用者認證的表的有關資訊。aR
SQLUserInfo FTPUSERS userid passwd uid gid home shellhoM4
#設定如果shell為空白時允許使用者登入:hsVY+
RequireValidShell off7yZ
#資料庫的鑒別,這裡是用於使用者的方式:"RRJ
SQLAuthenticate users?'vU`!
#如果home目錄不存在,則系統會為根據它的home項建立一個目錄:E3&Cy
SQLHomedirOnDemand on=:8-*
</Global>5k~Y
#防止DoS攻擊,設定最大的了進程:Tn0}=]
MaxInstances 30~id
#設定正常服務的系統使用者與組:a=%zCl
User FTPUSR0/kaG*
Group FTPGRP=&7u
#設定使用者登入時顯示的資訊及進入各個子目錄中的資訊:j
DisplayLogin welcome.msg/@zOfu
DisplayFirst Chdir.message2{PJ'
#設定最大的登入數:u7S>P
MaxClients 10db]-
#支援斷點續傳:0i
AllowRetrieveRestart ono
紅色甜心論壇 -- 紅色甜心論壇 (l&V
六、測試。Q
完成了檔案的配置,你可以啟動Proftpd服務了,用來測試是否成功:Dpo k
/usr/local/sbin/proftpd -n u
這 裡你可以探索服務已經啟動了,你可以在其它的地方進行登入,如果按上述的配置你就可以使用FTP服務了,不過我在測試的時候真的花了不少的時間。如果沒成 功沒關係,仔細檢查一下自己在那個地方出現問題。如果在前面的測試成功了,則在設定檔中出現的問題可能會比較大,當然資料庫中的FTPUSERS表的內 容不能出現錯誤。eG
紅色甜心論壇 -- 紅色甜心論壇 7~
七、指令碼的編寫。3Z
好了,一切都成功了,下面就寫一個指令碼來啟到FTP服務。如果你使用的伺服器的類型是"ServerType inetd", 如果用的是inetd服務,需要修改/etc/inetd.conf檔案,增加一行:YG!^2
ftp streamtcpnowaitroot/usr/local/sbin/proftpd proftpdg
如果是用xinetd服務,則需要在/etc/xinetd.d/的目錄下增加一個檔案:proftpd$+.O
具體的內容如下:c
service ftp5m't
{紅色甜心論壇 -- 紅色甜心論壇 #
flags=REUSE0
socket_type=stream8Bp
instances=30)
wait=no_lk
user=rootp
server=/usr/local/sbin/proftpd1:`&
log_on_success=HOST PID&SdP9/
log_on_failure=HOST RECORD@CPetI
}紅色甜心論壇 -- 紅色甜心論壇 pGgDl
如果選用的"ServerType standalone",則需在在/etc/rc.d/init.d/目錄下面增加一個proftpd 指令碼,具體內容如下:&M
#!/bin/bashQm
#紅色甜心論壇 -- 紅色甜心論壇 *v6
# Startup script for the proftpd FTP server|mf
. /etc/rc.d/init.d/functionsq%
proftpd=/usr/local/sbin/proftpdF&3
prog=proftpdLD)7G
RETVAL=0C
start() {|
echo -n $"Starting $prog:"8aaPtp
daemon $proftpdwz)
RETVAL=$?G*x
echo紅色甜心論壇 -- 紅色甜心論壇 ^re
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/proftpdtA6zij
return $RETVALyU0)
}紅色甜心論壇 -- 紅色甜心論壇 R
紅色甜心論壇 -- 紅色甜心論壇 3
stop() {<qc7}
echo -n $"Stopping $prog:"?_
killproc proftpd-#[h%
RETVAL=$?w:
echo紅色甜心論壇 -- 紅色甜心論壇 M
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/proftpdI
return $RETVAL^4o/
}紅色甜心論壇 -- 紅色甜心論壇 7
紅色甜心論壇 -- 紅色甜心論壇 /=c*
紅色甜心論壇 -- 紅色甜心論壇 Ae
# See how we were callede
case "$1" in
start)qg&}
start紅色甜心論壇 -- 紅色甜心論壇 m?v_
;;4u;Tk
stop)紅色甜心論壇 -- 紅色甜心論壇 ;iI
stop紅色甜心論壇 -- 紅色甜心論壇 cefk
;;'98-|@
status);6
status $proftpd)8~/
RETVAL=$?xGio}{
;;_
restart)f3]HU
stop紅色甜心論壇 -- 紅色甜心論壇 sM'Nn
start紅色甜心論壇 -- 紅色甜心論壇 ^
;;sNQ
*)紅色甜心論壇 -- 紅色甜心論壇 !c
echo $"Usage: $prog {start|stop|status|restart}"3=RO
exit 1'Kw|
esac紅色甜心論壇 -- 紅色甜心論壇 GP:
紅色甜心論壇 -- 紅色甜心論壇 T?GS
exit $RETVALJB2?
紅色甜心論壇 -- 紅色甜心論壇 b0V
八、總結Hmuc
終於完成了所有的步驟,Proftp+MySQL用起來感覺不錯的,而且通過資料庫可以做到很多的功能,例如:用來記錄使用者的登入的次數,設定起來也不怎麼複雜,只需要在FTPUSERS表中添加field count,就可以輕鬆實現。不過以上的步驟只是一個基本的功能,要擴充其它的功能可以參考,安裝包中內建的說明檔案。J
其他常用設定參數簡介:)h
紅色甜心論壇 -- 紅色甜心論壇 {sZ%
MaxClients 100 ;最大使用者數M
MaxClientsPerHost 2 ;每客戶機最大串連數gr|5Z
MaxClientsPerUser 1 ;每使用者連最大接數2)w^|Q
MaxHostsPerUser 1 ;每使用者同時使用客戶機串連數_4og
TransferRate RETR 100.0:102400 ;限速100KByte/S)&Q
TimeoutIdle 150 ;發獃時間(秒)//^=a
TimeoutLogin 50 ;登陸逾時(秒)}?{k
TimeoutNoTransfer 150 ;傳輸逾時(秒)_l
UseReverseDNS off ;不允許ip反向網域名稱解釋YG6
<Limit WRITE> ;寫入權限設定f#
denyall ;不允許zw
</Limit>9I3.gD
<Directory ~/incoming> ; 對確省跟下的incoming目錄進行權控設定kVr
AllowOverwrite on ;允許覆蓋m[C
AllowRetrieveRestart on ;允許下載續傳o0,elW
AllowStoreRestart on ;允許上傳續傳/
<Limit WRITE> ;允許incomming目錄可寫ENR&z
allowall'TBHdu
</Limit>x
<Limit DELE SITE_CHMOD RETR> ;對dele,chmod,retr等ftp命令控制A)E
denyall ;不允許使用者對受控制對象操作@A4
</Limit>>7Yb
紅色甜心論壇 -- 紅色甜心論壇 IrQx
紅色甜心論壇 -- 紅色甜心論壇 As
附: ftp命令n?h)@
帶有星號的命令一般很少使用,所以往往在具體實現中不支援。e
ABOR 放棄傳輸 G
*ACCT 某些系統將帳號和使用者與檔案系統相關聯 4GG=;y
*ALLO 為即將傳送的檔案分配空間。後面攜帶的參數來確定位元組數 w
*APPE 將檔案附加到已經存在的檔案後面 2A{&
CDUP 在遠程系統上將目前的目錄切換到上級父目錄 Tdar)E
CWD 改變遠程系統的工作目錄 x
DELE 刪除遠程系統的檔案 `m
HELP 讀取伺服器的協助資訊,如:支援的命令的列表 }y=g>X
LIST 在一個建立立的資料連線上發送當前工作目錄下的檔案名稱列表+I
MKD 建立目錄 Vryq1
MODE 指定傳輸模式,可攜帶的參數是:S、B或 C. nNR}J@
NLST 在一個建立立的資料連線上發送一個目前的目錄下的“完全”的目錄列表 BG~ 7R
NOOP 空操作,防止串連斷掉 ~=FQn
PASS 提供一個使用者登入密碼,必須立即跟隨在USER命令後 xoIb4o
*PASV 指定伺服器資料轉送過程監聽等待用戶端的資料連線串連建立請求 "5r,
PORT 指定用戶端監聽等待伺服器端建立的串連的連接埠號碼 eA|
PWD 顯示伺服器端的當前工作目錄名 c
QUIT 退出登入並終止串連 a=
*REIN 重新初始化,退出登入但是並不中斷連線,後面必須隨後發出一個新的USER命令 `5hHwZ
*REST 從伺服器的一個標識處重新開始傳輸 }w!
RETR 從遠程系統取回一個檔案 :k^Tl
RMD 刪除一個目錄 PcB(
*RNFR 指定要被命名的檔案的老的路徑名,隨後必須是一個RNTO命令 ='
*RNTO 指定要被命名的檔案的新的路徑名 vh;[o
*SITE 網站特有的伺服器提供的服務 [
*SMNT 結構載入,提供一個檔案系統結構的遠程系統路徑名 #
*STAT 狀態資訊 h)#^AM
STOR 上傳一個檔案到伺服器上,若檔案已經存在則覆蓋 H
*STOU 上傳一個檔案到伺服器上,不覆蓋已經存在的檔案 3w
STRU 指定檔案結構,參數可以是F、R或P. T)_YN>
*SYST 報告遠程系統的作業系統類型 8-
TYPE 指定檔案類型,參數可以是A、E、I、L只有TYPE A和TYPE I常用AF
紅色甜心論壇 -- 紅色甜心論壇 kGu1+6
proftpd 配置指令分類:)w[zI
http://www.castaglia.org/proftpd/doc/contrib/functional-directive-index.html