• <ul id="mayc0"></ul>
    <ul id="mayc0"><center id="mayc0"></center></ul>
    <strike id="mayc0"><input id="mayc0"></input></strike>
    <ul id="mayc0"></ul>
  • 始創于2000年 股票代碼:831685
    咨詢熱線:0371-60135900 注冊有禮 登錄
    • 掛牌上市企業
    • 60秒人工響應
    • 99.99%連通率
    • 7*24h人工
    • 故障100倍補償
    您的位置: 網站首頁 > 幫助中心>文章內容

    proftp配置全功略 FTP

    發布時間:  2012/8/14 11:22:39
     國內關于proftp設置的文檔實在太少,只能看著官方文檔慢慢學習,特把學習經驗分享給大家。

    proftp+mysql+quota。

    安裝proftp之前,必須先做一個工作,假如你的mysql是自己編譯的,那就必須先修改/etc/ld.so.conf,否則后面運行proftp會報錯。 
    vi /etc/ld.so.conf

    添加下面一行:

    /usr/local/mysql/lib/mysql

    注意大家如果mysql的安裝路徑于我不一樣,則填寫相應的路徑,有關mysql的編譯安裝請參考《Linux+Apache+Mysql+PHP典型配置》。

    1、下載相關軟件

    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改成你的系統中此文件所在的路徑,如/usr/local/mysql/include/mysql/mysql.h

    編譯:

     

    以下為引用的內容:
    ./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, 現在我們可以來啟動proftp了,只要

    /usr/local/proftpd/sbin/proftpd

    用你的ftp客戶端試驗以下,應該可以正常登陸,包括匿名和linux用戶名可以。

    其實默認的proftp滿足日常的服務器管理用還是綽綽有余的,有個地方還是要修改一下,就是默認proftp的配置文件不支持ftp續傳,所以我們只要vi /usr/local/proftpd/etc/proftpd.conf

    添加以下兩行

     

    以下為引用的內容:
    AllowRetrieveRestart on
    AllowStoreRestart on

     

    重新啟動以下proftp,就可以正常續傳文件了。

    創建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的一些基礎配置

    上次我們講了proftp的基本安裝,由于我們后面有關于mysql和quota的設置,所以編譯的時候把相應的模塊都編譯進去了,如果你不需要mysql和磁盤限額的功能,完全可以不需要這么編譯。

    這里要講一個非常實用的命令,/usr/local/proftpd/sbin/ftpshut

    這個命令還是比較實用的,因為你可能需要不斷的調整你的服務器,而這個命令就非常靈活,可以在不停止proftpd進程的前提下,定時停止ftp連接,這里將會詳細說它是怎么使用的。

    ftpshut [ -l min ] [ -d min ] time [ warning-message ... ]

    -l min: 在ftp關閉服務之前的幾分鐘內,嘗試建立新的ftp連接均不被接受

    -d min: 在ftp關閉服務之前的幾分鐘內,已經建立的ftp連接將被中止

    time: 在多少時間后,服務器將關閉ftp服務,格式有兩種

    +number 經過number分鐘后關閉

    MMHH 在今天MM:HH服務器將關閉

    注意,這里我們用這個命令是把ftp服務給停了,但實際的proftpd進程還沒停止,所以一般調試ftp會使用到這個命令。

    舉例:

    再經過30分鐘后,FTP服務將關閉,在這之前的20分鐘不可接受任何新的ftp連接,已經建立的在服務關閉前10分鐘強制斷線,并在客戶端顯示“FTP Server Will shutdown at time”

    ftpshut -l 20 -d 10 +30 "FTP Server Will shutdown at time"

    其實ftpshut就是產生/etc/shutmsg ,你只要刪除這個文件ftp又可以重新服務,或者直接ftpshut -R

    好了,開始講一些proftpd的基本配置吧,其實大家如果熟悉apache的配置的話,你會發現proftpd的設置基本都是類似的,它的配置基本格式是

     

    以下為引用的內容:

    #全局設置
    設置項目1 參數1
    設置項目2 參數2

    #某個目錄的設置
    <Directory "路徑名">
    ...
    ...
    </Directory>

    #關于匿名用戶的設置
    <Anonymous "匿名登陸的目錄">
    ...
    ...
    <Limit 限制動作>
    ...
    ...
    </Limit>
    </Anonymous>

    我們用到的比較多的可能是Limit的使用,Limit大致有以下動作,基本能覆蓋全部的權限了,大家靈活使用就是了。

    CMD:Change Working Directory 改變目錄
    MKD:MaKe Directory 建立目錄的權限
    RNFR: ReName FRom 更改目錄名的權限
    DELE:DELEte 刪除文件的權限
    RMD:ReMove Directory 刪除目錄的權限
    RETR:RETRieve 從服務端下載到客戶端的權限
    STOR:STORe 從客戶端上傳到服務端的權限
    READ:可讀的權限,不包括列目錄的權限,相當于RETR,STAT等
    WRITE:寫文件或者目錄的權限,包括MKD和RMD
    DIRS:是否允許列目錄,相當于LIST,NLST等權限,還是比較實用的
    ALL:所有權限
    LOGIN:是否允許登陸的權限

    針對上面這個Limit所應用的對象,又包括以下范圍

    AllowUser 針對某個用戶允許的Limit
    DenyUser 針對某個用戶禁止的Limit
    AllowGroup 針對某個用戶組允許的Limit
    DenyGroup 針對某個用戶組禁止的Limit
    AllowAll 針對所有用戶組允許的Limit
    DenyAll 針對所有用戶禁止的Limit

     

    關于限制速率的參數為:

    TransferRate STOR|RETR 速度(Kbytes/s) user 使用者

    下面我們以例子來解說proftp的配置,這樣大家可能更加容易理解。

     

    以下為引用的內容:
    1、ftp服務器支持斷點續傳,且最大支持同時10人在線,每個ip只允許一個連接;
    2、允許ftpusers用戶組只能訪問自己的目錄,而不能訪問上級或者其他目錄;
    3、用戶登陸服務器時不顯示ftp服務器版本信息,以增加安全性;
    4、建立一個kaoyan的ftp帳戶,屬于ftpusers組,kaoyan用戶只允許下載,沒有可寫的權限。下載速率限制在50Kbytes/s。
    5、建立一個upload用戶,也屬于ftpusers組,同kaoyan用戶的宿主目錄一樣,允許upload用戶上傳文件和創建目錄的權限,但不允許下載,并且不允許刪除目錄和文件的權限,上傳的速率控制在100Kbytes/s

     

    先是前期的用戶和組添加以及目錄的權限設置

     

    以下為引用的內容:
    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組的用戶訪問,可以設置成770都行。

    設置/usr/local/proftpd/etc/proftpd.conf

    注意#表示注釋,對設置沒影響,可以不寫

     

    以下為引用的內容:

    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 
    #允許斷點續傳(上傳),斷點續續(下載)是默認支持的,不用設置
    DisplayLogin welcome.msg #歡迎詞文件
    ServerIdent off #屏蔽服務器版本信息
    DefaultRoot ~ ftpusers #設置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>

     

    我這里實現的方式還可以通過

     

    以下為引用的內容:

    <Anonymous ~kaoyan>

    ...

    ...

    </Anonymous>

    <><Anonymous ~upload>

    ...

    ...

    </Anonymous>

     

    而且更加靈活,具體用那種方式,看大家了,我只是給大家入個門而已

    前面的兩個,我想大家對proftp的設置應該有些認識,是不是跟apache的配置差不多吧。我想配置過Serv_U服務器的,再稍微看一下proftp的配置規則,應該能馬上能配置出一個強大的proftp服務器。

    這里我們再講一些proftp的其他參數配置:

    MaxHostsPerUser 1 "對不起,每個帳戶最多允許來源ip為1個"

    #MaxHostsPerUser 對防止ftp帳號還是比較有用的。

    MaxClientsPerUser 1 "對不起,每個帳戶在每個客戶端最多可以同時登陸1次"

    #這個參數可以防止多線程軟件下載對服務器的破壞

    MaxClientsPerHost 1 "對不起,同一個客戶端只能最多1個帳號可以登陸"

    #比如ftp服務端有好多帳戶你都有,但也只能用1個帳號登陸

    呵呵,這三個Max參數比較容易搞暈,大家可要搞清他們的含義哦

    WtmpLog on

    #是否要把ftp記錄在日志中,如果不想可以設置成off屏蔽掉log日志。

    TimeoutIdle 600

    #客戶端idel時間設置,默認就是600秒

    DisplayLogin welcome.msg

    #設置ftp登陸歡迎信息文件

    關于歡迎文件的設置包含如下參數

    %T 目前的時間

    %F 所在硬盤剩下的容量

    %C 目前所在的目錄

    %R Client 端的主機名稱

    %L Server 端的主機名稱

    %U 使用者帳戶名稱

    %M 最大允許連接人數

    %N 目前的服務器連接人數

    %E FTP服務器管理員的 email

    %i 本次上傳的文件數量

    %o 本次下載的文件數量

    %t 本次上傳+下載的文件數

    知道這些參數,我們就可以寫出一個友好的歡迎語

    vi /home/kaoyan/welcome.msg

    歡迎您%U, 這是Frank的測試FTP服務器;

    目前時間是:%T;

    本服務器最多允許%M個用戶連接數;

    目前服務器上已有%N個用戶連接數;

    目前你所在的目錄是%C;

    目錄所在的硬盤還剩下%F字節。

    讓proftp支持現在流行的FXP傳輸方式,默認是不支持的。

    只要在服務端設置

    AllowForeignAddress on

    PassivePorts 49152 65534 #端口也可自己指定喜歡的

    千萬別忘了在客戶端也要設置成支持FXP哦,否則想我試驗了好幾次,一直以為服務器沒設置好,其實就是客戶端沒設置,呵呵。

    如何讓root能登陸,默認proftp是不支持root登陸,我們可以設置讓root也能登陸ftp,不過我在這里還是建議大家最好不要讓root能登陸ftp,設置如下

    RootLogin on

    如何禁止某個地址訪問ftp

    比如禁止10.1.1網段的機器訪問ftp,可以這么設置

     

    以下為引用的內容:
    <Limit LOGIN>
    Order deny,allow
    Deny from 10.1.1.
    Allow from all
    </Limit>

     

    虛擬ftp的建立,一般用于一臺ftp服務器有好多ip地址,或者ftp用不同的端口,基本設置語法是:

    比如我們要做一個端口是5555的ftp服務器:

     

    以下為引用的內容:
    <VirtualHost 210.51.0.124>
    ServerName "Frank FTP Server"
    Port 5555
    ...
    <Directory 目錄>
    ...
    <Limit 動作>
    ...
    </Limit>
    ...
    </Directory>
    </VirtualHost>

     

    至于虛擬主機中的其他設置跟我以前講的基本差不多

    上傳/下載比率設置,我想用過Serv_U的朋友一定知道這個功能的使用,我們這里讓proftp也實現這個功能。

    要實現功能注意編譯的時候加入ratio模塊,否則proftp默認是不支持,假設有個帳戶ftp1的ftp目錄在/home/kaoyan ,然后我們設置ftp1的上傳/下載比率是1:2(即上傳1M,就可以下載2M)

     

    以下為引用的內容:
    touch /home/kaoyan/ratio.dat
    touch /home/kaoyan/ratio.tmp
    chmod -R 666 /home/kaoyan

     

    在proftpd.conf設置如下

     

    以下為引用的內容:
    Ratios on
    SaveRatios on
    RatioFile /home/kaoyan/ratio.dat
    RatioTempFile /home/kaoyan/ratio.tmp

     

    在相應的設置項里添加

     

    以下為引用的內容:
    UserRatio ftp1 0 0 2 1000
    #UserRatio "使用者帳戶" fileratio filequota byteratio bytequota
    #  fileratio :以文件為基礎的比率,通常不限制,故為 0 
    #  filequota :預設置能下載多少文件,不限制時為 0 
    #  byteratio :就是上傳/下載的比例,如果數字為2,表示1:2 
    #  bytequota :預設置能下載多少 KBytes 的文件
    #上面設置的就是1:2的比率,默認只允許下載1M的文件

     

    重啟一下,以后ftp1就可以啟用上傳/下載比率了

    今天我們講proftp+mysql+quota的應用,我想大家最期待的就是這個了吧

    1、首先我們建立相應的用戶和用戶組

     

    以下為引用的內容:
    groupadd -g 5500 ftpgroup
    adduser -u 5500 -s /bin/false -d /bin/null -c "proftpd user" -g ftpgroup ftpuser

     

    2、操作數據庫

     

    以下為引用的內容:

    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';

     

    注意這里大家根據實際情況填寫自己數據庫的用戶名和密碼,如果大家對數據庫操作不熟悉的話,不妨可以用phpmyadmin來操作。

    3、配置proftp文件

     

    以下為引用的內容:

    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表示用戶認證方式為MySQL數據庫的認證方式 
    #Plaintext表示明文認證方式,排在最前面的為最先使用的方式
    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
    #如果用戶主目錄不存在,則系統會根據此用戶在用戶數據表中的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服務就已經能使用proftp+mysql+quota的功能

    我們可以在數據庫ftpuser添加一個虛擬用戶

    INSERT INTO `ftpuser` VALUES (1, 'test', 'ftppasswd', 5500, 5500, '/home/test', '/sbin/nologin');

    大家可以在phpmyadmin里直接操作添加一個用戶,相信不用我教大家怎么添加吧

    如果你想設置quota,只要在ftpquotalimits表里設置一下就行了,這個表里的各個參數分別代表:

     

    以下為引用的內容:
    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: - 允許上傳的字節數
    bytes_out_avail: - 允許下載的字節數
    bytes_xfer_avail: - 允許傳輸的字節數(包括上傳/下載)
    files_in_avail: - 允許上傳的文件數
    files_out_avail: - 允許下載的文件數
    files_xfer_avail: - 允許傳輸的文件數(包括上傳/下載)

     

    老實說用mysql和quota模塊來驗證用戶和設置磁盤限額,但我總覺得還是不夠完善,因為在這個方法中,數據庫表里還沒有相應的權限的字段,所以說相應用戶的權限還是得用實際得用戶即mysql對應得uid和gid來控制權限,那天要是mysql數據庫也能完全控制權限就好了。


    本文出自:億恩科技【www.vbseamall.com】

    服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質保障!--億恩科技[ENKJ.COM]

  • 您可能在找
  • 億恩北京公司:
  • 經營性ICP/ISP證:京B2-20150015
  • 億恩鄭州公司:
  • 經營性ICP/ISP/IDC證:豫B1.B2-20060070
  • 億恩南昌公司:
  • 經營性ICP/ISP證:贛B2-20080012
  • 服務器/云主機 24小時售后服務電話:0371-60135900
  • 虛擬主機/智能建站 24小時售后服務電話:0371-60135900
  • 專注服務器托管17年
    掃掃關注-微信公眾號
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權所有  地址:鄭州市高新區翠竹街1號總部企業基地億恩大廈  法律顧問:河南亞太人律師事務所郝建鋒、杜慧月律師   京公網安備41019702002023號
      0
     
     
     
     

    0371-60135900
    7*24小時客服服務熱線