國內(nèi)關(guān)于proftp設(shè)置的文檔實在太少,只能看著官方文檔慢慢學(xué)習(xí),特把學(xué)習(xí)經(jīng)驗分享給大家。
proftp+mysql+quota。
安裝proftp之前,必須先做一個工作,假如你的mysql是自己編譯的,那就必須先修改/etc/ld.so.conf,否則后面運(yùn)行proftp會報錯。
vi /etc/ld.so.conf
添加下面一行:
/usr/local/mysql/lib/mysql
注意大家如果mysql的安裝路徑于我不一樣,則填寫相應(yīng)的路徑,有關(guān)mysql的編譯安裝請參考《Linux+Apache+Mysql+PHP典型配置》。
1、下載相關(guān)軟件
wget ftp://ftp.proftpd.org/distrib/source/proftpd-1.2.9.tar.gz
下載proftp的最新版本1.2.9
wget http://www.castaglia.org/proftpd ... tatab-1.2.11.tar.gz
這是配合proftp的磁盤限額的模塊
2、解壓編譯
tar zvxf proftpd-1.2.9.tar.gz
tar zvxf proftpd-mod-quotatab-1.2.11.tar.gz
cp mod_quotatab/*.c proftpd-1.2.9/contrib/
cp mod_quotatab/*.h proftpd-1.2.9/contrib/
vi proftpd-1.2.9/contrib/mod_sql_mysql.c
找到#include 這一行,將mysql.h改成你的系統(tǒng)中此文件所在的路徑,如/usr/local/mysql/include/mysql/mysql.h
編譯:
以下為引用的內(nèi)容:
./configure \
--prefix=/usr/local/proftpd \
--with-modules=mod_sql:mod_sql_mysql:mod_quotatab\
:mod_quotatab_sql \
--with-includes=/usr/local/mysql/include/mysql \
--with-libraries=/usr/local/mysql/lib/mysql
make
make install |
ok, 現(xiàn)在我們可以來啟動proftp了,只要
/usr/local/proftpd/sbin/proftpd
用你的ftp客戶端試驗以下,應(yīng)該可以正常登陸,包括匿名和linux用戶名可以。
其實默認(rèn)的proftp滿足日常的服務(wù)器管理用還是綽綽有余的,有個地方還是要修改一下,就是默認(rèn)proftp的配置文件不支持ftp續(xù)傳,所以我們只要vi /usr/local/proftpd/etc/proftpd.conf
添加以下兩行
以下為引用的內(nèi)容:
AllowRetrieveRestart on
AllowStoreRestart on |
重新啟動以下proftp,就可以正常續(xù)傳文件了。
創(chuàng)建proftpd腳本
只要在proftp的源代碼目錄
cp proftpd-1.2.9/contrib/dist/rpm/proftpd.init.d /etc/rc.d/init.d/proftpd
記得修改proftpd文件,一般要修改proftpd的實際路徑
chmod 755 /etc/rc.d/init.d/proftpd
ok
以后就可以用這個教本來啟動,停止,重啟proftp
呵呵,今天就講這些,明天講些proftp的一些基礎(chǔ)配置
上次我們講了proftp的基本安裝,由于我們后面有關(guān)于mysql和quota的設(shè)置,所以編譯的時候把相應(yīng)的模塊都編譯進(jìn)去了,如果你不需要mysql和磁盤限額的功能,完全可以不需要這么編譯。
這里要講一個非常實用的命令,/usr/local/proftpd/sbin/ftpshut
這個命令還是比較實用的,因為你可能需要不斷的調(diào)整你的服務(wù)器,而這個命令就非常靈活,可以在不停止proftpd進(jìn)程的前提下,定時停止ftp連接,這里將會詳細(xì)說它是怎么使用的。
ftpshut [ -l min ] [ -d min ] time [ warning-message ... ]
-l min: 在ftp關(guān)閉服務(wù)之前的幾分鐘內(nèi),嘗試建立新的ftp連接均不被接受
-d min: 在ftp關(guān)閉服務(wù)之前的幾分鐘內(nèi),已經(jīng)建立的ftp連接將被中止
time: 在多少時間后,服務(wù)器將關(guān)閉ftp服務(wù),格式有兩種
+number 經(jīng)過number分鐘后關(guān)閉
MMHH 在今天MM:HH服務(wù)器將關(guān)閉
注意,這里我們用這個命令是把ftp服務(wù)給停了,但實際的proftpd進(jìn)程還沒停止,所以一般調(diào)試ftp會使用到這個命令。
舉例:
再經(jīng)過30分鐘后,F(xiàn)TP服務(wù)將關(guān)閉,在這之前的20分鐘不可接受任何新的ftp連接,已經(jīng)建立的在服務(wù)關(guān)閉前10分鐘強(qiáng)制斷線,并在客戶端顯示“FTP Server Will shutdown at time”
ftpshut -l 20 -d 10 +30 "FTP Server Will shutdown at time"
其實ftpshut就是產(chǎn)生/etc/shutmsg ,你只要刪除這個文件ftp又可以重新服務(wù),或者直接ftpshut -R
好了,開始講一些proftpd的基本配置吧,其實大家如果熟悉apache的配置的話,你會發(fā)現(xiàn)proftpd的設(shè)置基本都是類似的,它的配置基本格式是
以下為引用的內(nèi)容:
#全局設(shè)置
設(shè)置項目1 參數(shù)1
設(shè)置項目2 參數(shù)2
#某個目錄的設(shè)置
<Directory "路徑名">
...
...
</Directory>
#關(guān)于匿名用戶的設(shè)置
<Anonymous "匿名登陸的目錄">
...
...
<Limit 限制動作>
...
...
</Limit>
</Anonymous>
我們用到的比較多的可能是Limit的使用,Limit大致有以下動作,基本能覆蓋全部的權(quán)限了,大家靈活使用就是了。
CMD:Change Working Directory 改變目錄
MKD:MaKe Directory 建立目錄的權(quán)限
RNFR: ReName FRom 更改目錄名的權(quán)限
DELE:DELEte 刪除文件的權(quán)限
RMD:ReMove Directory 刪除目錄的權(quán)限
RETR:RETRieve 從服務(wù)端下載到客戶端的權(quán)限
STOR:STORe 從客戶端上傳到服務(wù)端的權(quán)限
READ:可讀的權(quán)限,不包括列目錄的權(quán)限,相當(dāng)于RETR,STAT等
WRITE:寫文件或者目錄的權(quán)限,包括MKD和RMD
DIRS:是否允許列目錄,相當(dāng)于LIST,NLST等權(quán)限,還是比較實用的
ALL:所有權(quán)限
LOGIN:是否允許登陸的權(quán)限
針對上面這個Limit所應(yīng)用的對象,又包括以下范圍
AllowUser 針對某個用戶允許的Limit
DenyUser 針對某個用戶禁止的Limit
AllowGroup 針對某個用戶組允許的Limit
DenyGroup 針對某個用戶組禁止的Limit
AllowAll 針對所有用戶組允許的Limit
DenyAll 針對所有用戶禁止的Limit
|
關(guān)于限制速率的參數(shù)為:
TransferRate STOR|RETR 速度(Kbytes/s) user 使用者
下面我們以例子來解說proftp的配置,這樣大家可能更加容易理解。
以下為引用的內(nèi)容:
1、ftp服務(wù)器支持?jǐn)帱c(diǎn)續(xù)傳,且最大支持同時10人在線,每個ip只允許一個連接;
2、允許ftpusers用戶組只能訪問自己的目錄,而不能訪問上級或者其他目錄;
3、用戶登陸服務(wù)器時不顯示ftp服務(wù)器版本信息,以增加安全性;
4、建立一個kaoyan的ftp帳戶,屬于ftpusers組,kaoyan用戶只允許下載,沒有可寫的權(quán)限。下載速率限制在50Kbytes/s。
5、建立一個upload用戶,也屬于ftpusers組,同kaoyan用戶的宿主目錄一樣,允許upload用戶上傳文件和創(chuàng)建目錄的權(quán)限,但不允許下載,并且不允許刪除目錄和文件的權(quán)限,上傳的速率控制在100Kbytes/s |
先是前期的用戶和組添加以及目錄的權(quán)限設(shè)置
以下為引用的內(nèi)容:
group add ftpusers
useradd -d /home/kaoyan -g ftpusers -s /bin/fales kaoyan
useradd -d /home/kaoyan -g ftpusers -s /bin/fales upload
chown -R kaoyan:upload /home/kaoyan
chmod -R 775 /home/kaoyan |
如果你只想ftpusers組的用戶訪問,可以設(shè)置成770都行。
設(shè)置/usr/local/proftpd/etc/proftpd.conf
注意#表示注釋,對設(shè)置沒影響,可以不寫
以下為引用的內(nèi)容:
ServerName "Frank's FTP Server"
ServerType standalone
DefaultServer on
Port 21
Umask 022
MaxInstances 30 #最多有30個proftpd的PID
User nobody
Group nobody
TimeoutStalled 10
MaxClients 10 #最多允許10個用戶在線
MaxClientsPerHost 1 "對不起,一個IP只允許一個連接"
AllowStoreRestart on
#允許斷點(diǎn)續(xù)傳(上傳),斷點(diǎn)續(xù)續(xù)(下載)是默認(rèn)支持的,不用設(shè)置
DisplayLogin welcome.msg #歡迎詞文件
ServerIdent off #屏蔽服務(wù)器版本信息
DefaultRoot ~ ftpusers #設(shè)置ftpusers組只能訪問自己的目錄
<Directory />
AllowOverwrite on
</Directory>
<Directory /home/kaoyan>
<Limit WRITE> #不允許寫
DenyUser kaoyan
</Limit>
<Limit RMD RNFR DELE RETR> #不允許刪除,改名,下載
DenyUser upload
</Limit>
TransferRate RETR 50 user kaoyan
TransferRate STOR 100 user upload
</Directory>
|
我這里實現(xiàn)的方式還可以通過
以下為引用的內(nèi)容:
<Anonymous ~kaoyan>
...
...
</Anonymous>
<><Anonymous ~upload>
...
...
</Anonymous>
|
而且更加靈活,具體用那種方式,看大家了,我只是給大家入個門而已
前面的兩個,我想大家對proftp的設(shè)置應(yīng)該有些認(rèn)識,是不是跟apache的配置差不多吧。我想配置過Serv_U服務(wù)器的,再稍微看一下proftp的配置規(guī)則,應(yīng)該能馬上能配置出一個強(qiáng)大的proftp服務(wù)器。
這里我們再講一些proftp的其他參數(shù)配置:
MaxHostsPerUser 1 "對不起,每個帳戶最多允許來源ip為1個"
#MaxHostsPerUser 對防止ftp帳號還是比較有用的。
MaxClientsPerUser 1 "對不起,每個帳戶在每個客戶端最多可以同時登陸1次"
#這個參數(shù)可以防止多線程軟件下載對服務(wù)器的破壞
MaxClientsPerHost 1 "對不起,同一個客戶端只能最多1個帳號可以登陸"
#比如ftp服務(wù)端有好多帳戶你都有,但也只能用1個帳號登陸
呵呵,這三個Max參數(shù)比較容易搞暈,大家可要搞清他們的含義哦
WtmpLog on
#是否要把ftp記錄在日志中,如果不想可以設(shè)置成off屏蔽掉log日志。
TimeoutIdle 600
#客戶端idel時間設(shè)置,默認(rèn)就是600秒
DisplayLogin welcome.msg
#設(shè)置ftp登陸歡迎信息文件
關(guān)于歡迎文件的設(shè)置包含如下參數(shù)
%T 目前的時間
%F 所在硬盤剩下的容量
%C 目前所在的目錄
%R Client 端的主機(jī)名稱
%L Server 端的主機(jī)名稱
%U 使用者帳戶名稱
%M 最大允許連接人數(shù)
%N 目前的服務(wù)器連接人數(shù)
%E FTP服務(wù)器管理員的 email
%i 本次上傳的文件數(shù)量
%o 本次下載的文件數(shù)量
%t 本次上傳+下載的文件數(shù)
知道這些參數(shù),我們就可以寫出一個友好的歡迎語
vi /home/kaoyan/welcome.msg
歡迎您%U, 這是Frank的測試FTP服務(wù)器;
目前時間是:%T;
本服務(wù)器最多允許%M個用戶連接數(shù);
目前服務(wù)器上已有%N個用戶連接數(shù);
目前你所在的目錄是%C;
目錄所在的硬盤還剩下%F字節(jié)。
讓proftp支持現(xiàn)在流行的FXP傳輸方式,默認(rèn)是不支持的。
只要在服務(wù)端設(shè)置
AllowForeignAddress on
PassivePorts 49152 65534 #端口也可自己指定喜歡的
千萬別忘了在客戶端也要設(shè)置成支持FXP哦,否則想我試驗了好幾次,一直以為服務(wù)器沒設(shè)置好,其實就是客戶端沒設(shè)置,呵呵。
如何讓root能登陸,默認(rèn)proftp是不支持root登陸,我們可以設(shè)置讓root也能登陸ftp,不過我在這里還是建議大家最好不要讓root能登陸ftp,設(shè)置如下
RootLogin on
如何禁止某個地址訪問ftp
比如禁止10.1.1網(wǎng)段的機(jī)器訪問ftp,可以這么設(shè)置
以下為引用的內(nèi)容:
<Limit LOGIN>
Order deny,allow
Deny from 10.1.1.
Allow from all
</Limit> |
虛擬ftp的建立,一般用于一臺ftp服務(wù)器有好多ip地址,或者ftp用不同的端口,基本設(shè)置語法是:
比如我們要做一個端口是5555的ftp服務(wù)器:
以下為引用的內(nèi)容:
<VirtualHost 210.51.0.124>
ServerName "Frank FTP Server"
Port 5555
...
<Directory 目錄>
...
<Limit 動作>
...
</Limit>
...
</Directory>
</VirtualHost> |
至于虛擬主機(jī)中的其他設(shè)置跟我以前講的基本差不多
上傳/下載比率設(shè)置,我想用過Serv_U的朋友一定知道這個功能的使用,我們這里讓proftp也實現(xiàn)這個功能。
要實現(xiàn)功能注意編譯的時候加入ratio模塊,否則proftp默認(rèn)是不支持,假設(shè)有個帳戶ftp1的ftp目錄在/home/kaoyan ,然后我們設(shè)置ftp1的上傳/下載比率是1:2(即上傳1M,就可以下載2M)
以下為引用的內(nèi)容:
touch /home/kaoyan/ratio.dat
touch /home/kaoyan/ratio.tmp
chmod -R 666 /home/kaoyan |
在proftpd.conf設(shè)置如下
以下為引用的內(nèi)容:
Ratios on
SaveRatios on
RatioFile /home/kaoyan/ratio.dat
RatioTempFile /home/kaoyan/ratio.tmp |
在相應(yīng)的設(shè)置項里添加
以下為引用的內(nèi)容:
UserRatio ftp1 0 0 2 1000
#UserRatio "使用者帳戶" fileratio filequota byteratio bytequota
# fileratio :以文件為基礎(chǔ)的比率,通常不限制,故為 0
# filequota :預(yù)設(shè)置能下載多少文件,不限制時為 0
# byteratio :就是上傳/下載的比例,如果數(shù)字為2,表示1:2
# bytequota :預(yù)設(shè)置能下載多少 KBytes 的文件
#上面設(shè)置的就是1:2的比率,默認(rèn)只允許下載1M的文件 |
重啟一下,以后ftp1就可以啟用上傳/下載比率了
今天我們講proftp+mysql+quota的應(yīng)用,我想大家最期待的就是這個了吧
1、首先我們建立相應(yīng)的用戶和用戶組
以下為引用的內(nèi)容:
groupadd -g 5500 ftpgroup
adduser -u 5500 -s /bin/false -d /bin/null -c "proftpd user" -g ftpgroup ftpuser |
2、操作數(shù)據(jù)庫
以下為引用的內(nèi)容:
mysql mysql -uroot -ppassword
create database ftpdb
grant select, update on ftpdb.* to proftpd@localhost identified by 'password'
use ftpdb
CREATE TABLE `ftpgroup` (
`groupname` varchar(16) NOT NULL default '',
`gid` smallint(6) NOT NULL default '5500',
`members` varchar(16) NOT NULL default '',
KEY `groupname` (`groupname`)
) TYPE=MyISAM COMMENT='ProFTP group table';
INSERT INTO `ftpgroup` VALUES ('ftpgroup', 5500, 'ftpuser');
CREATE TABLE `ftpquotalimits` (
`name` varchar(30) default NULL,
`quota_type` enum('user','group','class','all') NOT NULL default 'user',
`per_session` enum('false','true') NOT NULL default 'false',
`limit_type` enum('soft','hard') NOT NULL default 'soft',
`bytes_in_avail` float NOT NULL default '0',
`bytes_out_avail` float NOT NULL default '0',
`bytes_xfer_avail` float NOT NULL default '0',
`files_in_avail` int(10) unsigned NOT NULL default '0',
`files_out_avail` int(10) unsigned NOT NULL default '0',
`files_xfer_avail` int(10) unsigned NOT NULL default '0'
) TYPE=MyISAM;
CREATE TABLE `ftpquotatallies` (
`name` varchar(30) NOT NULL default '',
`quota_type` enum('user','group','class','all') NOT NULL default 'user',
`bytes_in_used` float NOT NULL default '0',
`bytes_out_used` float NOT NULL default '0',
`bytes_xfer_used` float NOT NULL default '0',
`files_in_used` int(10) unsigned NOT NULL default '0',
`files_out_used` int(10) unsigned NOT NULL default '0',
`files_xfer_used` int(10) unsigned NOT NULL default '0'
) TYPE=MyISAM;
CREATE TABLE `ftpuser` (
`id` int(10) unsigned NOT NULL auto_increment,
`userid` varchar(32) NOT NULL default '',
`passwd` varchar(32) NOT NULL default '',
`uid` smallint(6) NOT NULL default '5500',
`gid` smallint(6) NOT NULL default '5500',
`homedir` varchar(255) NOT NULL default '',
`shell` varchar(16) NOT NULL default '/sbin/nologin',
`count` int(11) NOT NULL default '0',
`accessed` datetime NOT NULL default '0000-00-00 00:00:00',
`modified` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`id`)
) TYPE=MyISAM COMMENT='ProFTP user table';
|
注意這里大家根據(jù)實際情況填寫自己數(shù)據(jù)庫的用戶名和密碼,如果大家對數(shù)據(jù)庫操作不熟悉的話,不妨可以用phpmyadmin來操作。
3、配置proftp文件
以下為引用的內(nèi)容:
ServerName "Frank's FTP Server" ServerType standalone DefaultServer on
Port 21
Umask 022
MaxInstances 30
MaxLoginAttempts 3
User nobody
Group nobody
MaxHostsPerUser 1 "Sorry, you may not connect more than one time."
MaxClientsPerUser 2 "Only one such user at a time."
MaxClientsPerHost 3 "Sorry, you may not connect more than one time."
RootLogin off
RequireValidShell off
TimeoutStalled 10
MaxClients 10
AllowForeignAddress on
AllowStoreRestart on
ServerIdent off
DefaultRoot ~ ftpgroup
SQLAuthTypes Backend Plaintext
#Backend表示用戶認(rèn)證方式為MySQL數(shù)據(jù)庫的認(rèn)證方式
#Plaintext表示明文認(rèn)證方式,排在最前面的為最先使用的方式
SQLAuthenticate users* groups*
# databasename@host database_user user_password
SQLConnectInfo ftpdb@localhost proftpd password
SQLUserInfo ftpuser userid passwd uid gid homedir shell
SQLGroupInfo ftpgroup groupname gid members
SQLHomedirOnDemand on
#如果用戶主目錄不存在,則系統(tǒng)會根據(jù)此用戶在用戶數(shù)據(jù)表中的homedir字段的值新建一個目錄
# Update count every time user logs in
SQLLog PASS updatecount
SQLNamedQuery updatecount UPDATE "count=count+1,accessed=now() WHERE userid='%u'" ftpuser
# Update modified everytime user uploads or deletes a file
SQLLog STOR,DELE modified
SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser
QuotaEngine on
QuotaDirectoryTally on
QuotaDisplayUnits Mb
QuotaShowQuotas on
QuotaLog "/var/log/quota"
SQLNamedQuery get-quota-limit SELECT "name, quota_type, per_session, limit_type, bytes_in_avail, bytes_out_avai
l, bytes_xfer_avail, files_in_avail, files_out_avail, files_xfer_avail FROM ftpquotalimits WHERE name = '%{0}'
AND quota_type = '%{1}'"
SQLNamedQuery get-quota-tally SELECT "name, quota_type, bytes_in_used, bytes_out_used, bytes_xfer_used, files_i
n_used, files_out_used, files_xfer_used FROM ftpquotatallies WHERE name = '%{0}' AND quota_type = '%{1}'"
SQLNamedQuery update-quota-tally UPDATE "bytes_in_used = bytes_in_used + %{0}, bytes_out_used = bytes_out_used
+ %{1}, bytes_xfer_used = bytes_xfer_used + %{2}, files_in_used = files_in_used + %{3}, files_out_used = files_
out_used + %{4}, files_xfer_used = files_xfer_used + %{5} WHERE name = '%{6}' AND quota_type = '%{7}'" ftpquota
tallies
SQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}" ftpquotatallies
QuotaLimitTable sql:/get-quota-limit
QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally
|
ok,就這么簡單,重啟一下proftp服務(wù)就已經(jīng)能使用proftp+mysql+quota的功能
我們可以在數(shù)據(jù)庫ftpuser添加一個虛擬用戶
INSERT INTO `ftpuser` VALUES (1, 'test', 'ftppasswd', 5500, 5500, '/home/test', '/sbin/nologin');
大家可以在phpmyadmin里直接操作添加一個用戶,相信不用我教大家怎么添加吧
如果你想設(shè)置quota,只要在ftpquotalimits表里設(shè)置一下就行了,這個表里的各個參數(shù)分別代表:
以下為引用的內(nèi)容:
quotalimits表
name: - 用戶帳號
quota type: - user, group, class, all (we use user)
per_session: - true or false (we use true)
limit_type: - 硬限制 or 軟限制 (我們一般用硬限制)
bytes_in_avail: - 允許上傳的字節(jié)數(shù)
bytes_out_avail: - 允許下載的字節(jié)數(shù)
bytes_xfer_avail: - 允許傳輸?shù)淖止?jié)數(shù)(包括上傳/下載)
files_in_avail: - 允許上傳的文件數(shù)
files_out_avail: - 允許下載的文件數(shù)
files_xfer_avail: - 允許傳輸?shù)奈募䲠?shù)(包括上傳/下載) |
老實說用mysql和quota模塊來驗證用戶和設(shè)置磁盤限額,但我總覺得還是不夠完善,因為在這個方法中,數(shù)據(jù)庫表里還沒有相應(yīng)的權(quán)限的字段,所以說相應(yīng)用戶的權(quán)限還是得用實際得用戶即mysql對應(yīng)得uid和gid來控制權(quán)限,那天要是mysql數(shù)據(jù)庫也能完全控制權(quán)限就好了。 本文出自:億恩科技【1tcdy.com】
服務(wù)器租用/服務(wù)器托管中國五強(qiáng)!虛擬主機(jī)域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]
|