配置FTP服務(wù)器(MySQL+Proftpd)
用MySQL+Proftpd配置FTP服務(wù)器。FTP(File Transfer Protocol)是internet中的一項(xiàng)常用而且重要的互聯(lián)網(wǎng)協(xié)議,廣泛應(yīng)用于internet中,然而傳統(tǒng)的FTP服務(wù)中的帳號都是用服務(wù)器中的系統(tǒng)用戶,這樣也為也會(huì)系統(tǒng)安全留下了隱患,用MySQL進(jìn)行用戶認(rèn)證,很好地避免這種隱患。它利用數(shù)據(jù)庫來提供用戶及其認(rèn)證,把FTP的帳號映射于系統(tǒng)用戶,從而避免了使用系統(tǒng)用戶。這樣可以達(dá)到比較安全的目的。
用MySQL+Proftpd配置FTP服務(wù)器,需要有中間包mod_sql,本文所講的,假設(shè)你的服務(wù)器中已經(jīng)安裝好了MySQL,具體過程:
一、獲起必須的安裝包(mod_sql,proftpd)。
Proftpd的安裝包可以通過http://www.proftpd.net 獲得,注意要支持MySQL認(rèn)證最低的版本為1.2.5。
Mod_sql安裝包可以通過http://www.lastditcheffort.org/~aah/proftpd/mod_sql/ 獲得。
二、包的安裝
解開安裝包:把proftpd-1.2.8.tar.gz 拷貝到/usr/local/src的目錄下,用命令:
tar -gzvf proftpd-1.2.8.tar.gz
解開,這時(shí)產(chǎn)生了一個(gè)proftpd-1.2.8 的目錄。然后進(jìn)入該目錄中的contrib目錄:
cd proftpd-1.2.8/contrib/
把中間包mod_sql拷貝到該目錄中,再解開:
tar -gzvf mod_sql-4.0.8.tar.gz
配置使Proftpd支持MySQL認(rèn)證:
./configure -with-modules=mod_sql:mod_sql_mysql -with-includes=/usr/includes/mysql with-libraries=/usr/lib/mysql
注意:-with-includes選項(xiàng)是指MySQL的頭文件所在的目錄;-with-libraries選項(xiàng)是指MySQL的庫文件所在的目錄。對于不同的環(huán)境可能會(huì)是不同的目錄。
進(jìn)行編譯:
- make
安裝:
- make install
安裝完之后,可以按下列步驟進(jìn)行測試,Proftpd是否能正常工作:
- sh sample-configurations/PFTEST.install
測試的所需要的臨時(shí)文件被放置在/tmp/PFTEST目錄中,運(yùn)行命令:
- ./proftpd -n -d 5 -c /tmp/PFTEST/PFTEST.conf
如果能正常運(yùn)行,你可以發(fā)現(xiàn)有很多的信息而且最后一行會(huì)出現(xiàn):
- ProFTPD 1.2.8 (built ***) standalone mode STARTUP
說明服務(wù)啟動(dòng)了,它用的端口是2021,你可以用用戶proftpd與密碼 proftpd進(jìn)行登錄測試。如果正常,你可以做下列準(zhǔn)備;否則要檢查安裝是否正確。
#p#
三、為FTP服務(wù)建立相應(yīng)的數(shù)據(jù)庫及其表
1、你可以為此服務(wù)建立專門的數(shù)據(jù)庫,也可以放在其它的數(shù)據(jù)庫中。在此我專門建立一個(gè)專門的數(shù)據(jù)庫FTP:
create database FTP;
2、然后在這個(gè)數(shù)據(jù)庫中建立一個(gè)用戶表FTPUSERS,這個(gè)表是必須的:
use FTP;
- create table FTPUSERS (
- userid TEXT NOT NULL,
- passwd TEXT NOT NULL,
- uid INT NOT NULL,
- gid INT NOT NULL,
- home TEXT,
- shell TEXT
- );
此表格是為了用戶認(rèn)證所需要的,其中userid、passwd是必不可少的,userid是用做FTP服務(wù)的用戶名;passwd是指此用戶的密碼;uid是系統(tǒng)用戶的ID,也就是所映射的系統(tǒng)用戶;gid是所屬系統(tǒng)組的ID;home是該用戶所在的HOME目錄;shell可以為該用戶指定相應(yīng)的shell。當(dāng)然你可以建立更多的字段,例如:用來記錄用戶登錄次數(shù)的count,或者是日期的date,如果你對配置熟悉了之后,你可以根據(jù)自己的喜歡添加更多的功能。在此就不多講。
3、如果你想需要所有的功能,你還可以添加另外一個(gè)需要的表:FTPGRPS,也就是確定組的表格,當(dāng)然也可以不用,這里講一個(gè)它的格式:
- create table FTPGRPS (
- grpname TEXT NOT NULL,
- gid SMALLINT NOT NULL,
- members TEXT NOT NULL,
- );
其中g(shù)rpname是組的名稱,gid是系統(tǒng)組的ID,members是組的成員。注意:多成員,他們之間要用逗號隔開,不能使用空格。
4、為空表格插入記錄:
- INSERT INTO FTPUSERS (userid, passwd, uid, gid, home, shell)
- VALUES ('user1', '999999', '1000', '1000', '/home/ftp/user1', "");
按此格式你可以插入這每一個(gè)用戶添加一個(gè)記錄。
如果你要想應(yīng)用到更多的功能,且建立了組的表格,你也要為此添加記錄,不過一定要注意在members的字段多個(gè)成員一定要用逗號隔開。
#p#
四、為FTP用戶建立相應(yīng)的系統(tǒng)用戶
在本例中,只整個(gè)FTP服務(wù)只提供一個(gè)有效的系統(tǒng)用戶FTPUSR和組FTPGRP,當(dāng)然你也可以設(shè)置多個(gè)系統(tǒng)用戶。但出于安全的考慮,我只設(shè)一個(gè),用他來啟動(dòng)FTP daemon,并把所有的FTP用戶映射過這個(gè)用戶。
先建立FTPGRP組:
groupadd -g 1000 -r FTPGRP
建立FTPUSR用戶:
adduser -u 1000 -g 1000 -d /home/FTP -s /bin/bash -r FTPUSR
為FTPUSR建立HOME,把所有的FTP user 活動(dòng)空間全放在此目錄下:
mkdir /home/FTP
chown FTPUSR /home/FTP
chgrp FTPGRP /home/FTP
#p#
五、設(shè)置配置文件
Proftpd的配置文件proftpd.conf在/usr/local/etc/目錄下,針對不用的認(rèn)證可以使用不同的配置文件。使用MySQL認(rèn)證,可以把sample-configurations/mod_sql.conf拷貝到/usr/local/etc下面并將其改名為proftpd.conf
修改proftpd.conf文件,具體內(nèi)容如下:
#設(shè)置FTP服務(wù)器的名稱:
ServerName"My FTP Server"
#設(shè)置FTP服務(wù)器的類型:
ServerType standalone
DefaultServer on
#設(shè)置根,可以限制用戶在某個(gè)地方活動(dòng),增強(qiáng)服務(wù)器的安全性。
DefaultRoot ~
#設(shè)置FTP服務(wù)端口號,標(biāo)準(zhǔn)的FTP服務(wù)端口是21。
Port 21
#設(shè)置新建文件或目錄時(shí),設(shè)置權(quán)限的掩碼:
Umask 022
#設(shè)置系統(tǒng)日志文件:
SystemLog /var/log/ftp.syslog
#設(shè)置記錄文件傳輸?shù)娜罩疚募?/p>
TransferLog /var/log/ftp.transferlog
#設(shè)置最大的嘗試登錄的次數(shù),如果超過自動(dòng)斷開連接:
MaxLoginAttempts 3
#設(shè)置MySQL認(rèn)證:
#數(shù)據(jù)庫聯(lián)接的信息,DatabaseName是數(shù)據(jù)庫名, HostName是主機(jī)名,
#Port是端口號,UserName是連接數(shù)據(jù)庫的用戶名,Password是密碼。
SQLConnectInfo DatabaseName@HostName:Port UserName Password
#例如SQLConnectInfo proftpd@localhost root 123456
#數(shù)據(jù)庫認(rèn)證的類型:
SQLAuthTypes Backend Plaintext
#指定用來做用戶認(rèn)證的表的有關(guān)信息。
SQLUserInfo FTPUSERS userid passwd uid gid home shell
#設(shè)置如果shell為空時(shí)允許用戶登錄:
RequireValidShell off
#數(shù)據(jù)庫的鑒別,這里是用于用戶的方式:
SQLAuthenticate users
#如果home目錄不存在,則系統(tǒng)會(huì)為根據(jù)它的home項(xiàng)新建一個(gè)目錄:
SQLHomedirOnDemand on
#防止DoS攻擊,設(shè)置最大的了進(jìn)程:
MaxInstances 30
#設(shè)置正常服務(wù)的系統(tǒng)用戶與組:
User FTPUSR
Group FTPGRP
#設(shè)置用戶登錄時(shí)顯示的信息及進(jìn)入各個(gè)子目錄中的信息:
DisplayLogin welcome.msg
DisplayFirst Chdir.message
#設(shè)置最大的登錄數(shù):
MaxClients 10
#支持?jǐn)帱c(diǎn)續(xù)傳:
AllowRetrieveRestart on
#p#
六、測試
完成了文件的配置,你可以啟動(dòng)Proftpd服務(wù)了,用來測試是否成功:
/usr/local/sbin/proftpd -n
這里你可以發(fā)現(xiàn)服務(wù)已經(jīng)啟動(dòng)了,你可以在其它的地方進(jìn)行登錄,如果按上述的配置你就可以使用FTP服務(wù)了,不過我在測試的時(shí)候真的花了不少的時(shí)間。如果沒成功沒關(guān)系,仔細(xì)檢查一下自己在那個(gè)地方出現(xiàn)問題。如果在前面的測試成功了,則在配置文件中出現(xiàn)的問題可能會(huì)比較大,當(dāng)然數(shù)據(jù)庫中的FTPUSERS表的內(nèi)容不能出現(xiàn)錯(cuò)誤。
七、腳本的編寫
一切都成功了,下面就寫一個(gè)腳本來啟到FTP服務(wù)。
如果你使用的服務(wù)器的類型是"ServerType inetd", 如果用的是inetd服務(wù),需要修改/etc/inetd.conf文件,增加一行:
ftp streamtcpnowaitroot/usr/local/sbin/proftpd proftpd
如果是用xinetd服務(wù),則需要在/etc/xinetd.d/的目錄下增加一個(gè)文件:proftpd
具體的內(nèi)容如下:
- service ftp
- {
- flags=REUSE
- socket_type=stream
- instances=30
- wait=no
- user=root
- server=/usr/local/sbin/proftpd
- log_on_success=HOST PID
- log_on_failure=HOST RECORD
- }
如果選用的"ServerType standalone",則需在在/etc/rc.d/init.d/目錄下面增加一個(gè)proftpd 腳本,具體內(nèi)容如下:
- #!/bin/bash
- #
- # Startup script for the proftpd FTP server
- . /etc/rc.d/init.d/functions
- proftpd=/usr/local/sbin/proftpd
- prog=proftpd
- RETVAL=0
- start() {
- echo -n $"Starting $prog:"
- daemon $proftpd
- RETVAL=$?
- echo
- [ $RETVAL -eq 0 ] && touch /var/lock/subsys/proftpd
- return $RETVAL
- }
- stop() {
- echo -n $"Stopping $prog:"
- killproc proftpd
- RETVAL=$?
- echo
- [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/proftpd
- return $RETVAL
- }
- # See how we were called
- case "$1" in
- start)
- start
- ;;
- stop)
- stop
- ;;
- status)
- status $proftpd
- RETVAL=$?
- ;;
- restart)
- stop
- start
- ;;
- *)
- echo $"Usage: $prog {start|stop|status|restart}"
- exit 1
- esac
- exit $RETVAL
#p#
八、總結(jié)
終于完成了所有的步驟,Proftp+MySQL用起來感覺不錯(cuò)的,而且通過數(shù)據(jù)庫可以做到很多的功能。例如:用來記錄用戶的登錄的次數(shù),設(shè)置起來也不怎么復(fù)雜,只需要在FTPUSERS表中添加field count,就可以輕松實(shí)現(xiàn)。不過以上的步驟只是一個(gè)基本的功能,要擴(kuò)展其它的功能可以參考,安裝包中自帶的說明文件。大家學(xué)會(huì)如何利用MySQL和Proftpd配置FTP服務(wù)器了么?
【編輯推薦】