顯示廣告
隱藏 ✕
看板 Knuckles
作者 Knuckles(阿德)
標題 Re: [Ubuntu] 用ProFTPD架設FTP server
時間 2009年01月26日 Mon. PM 05:03:39


這幾天又開始研究linux上的ftp server
都不知道到底花了多少時間在這上面了 = =

有些人下載東西時連線會斷斷續續的,尤其是Hinet ADSL的人
搞得連線記錄裡好幾面都是同一個人
但是他們連Windows下的G6 FTP server就沒有問題
裝了另一個Linux下的FTP server軟體 glftpd 來試試看,好像還是一樣...
反正Linux就是跟Hinet不合嗎 囧

◎ 設定 ProFTPD,使 FileZilla 連線時的「自動偵測字碼集」生效

雖然這個問題沒解決,但是看到了這篇文章 使 ProFTPD 支援 UTF-8
原來加點設定後,就可以讓 FileZilla 的「自動偵測字碼集」生效
也就是不用再加上「強制使用UTF-8」的設定了

而且設定後,也可以使用下面這兩個支援 unicode 的 ftp client 軟體了
SmartFTPFTPRush
用不慣FileZilla的話也可以換這兩個試試,不過這兩個不是免費軟體 
                                           FTP Rush變成免費軟體了

設定方法: 重新編譯 ProFTPD 時加上參數: ./configure --enable-nls
           如此就能加上 mod_lang 模組
           接著在 proftpd.conf 中加上 LangEngine on 即可

這樣連線時,FileZilla會送出「指令: FEAT」,而 ProFTPD 會回應下面的features訊息
    回應:
	
211-Features:
    ....
    回應:
	
 UTF8
    ....
    回應:
	
211 End
features 的種類會依據 server 打開的功能而有所不同,重點是會顯示 UTF8
接著 FileZilla 就會送出「指令: OPTS UTF8 ON」,ProFTPD會「回應: 200 UTF8 set to on」
這樣 FileZilla 就會自動將字碼集設定為 UTF8 了

不過原本安裝 ProFTPD 時是使用 apt-get 來安裝的
現在改成自行要自行編譯安裝時又吃了不少苦頭 = =

◎ 自行編譯安裝 ProFTPD

先安裝 build-essential
$ sudo apt-get install build-essential

到官網 http://www.proftpd.org/ 抓最新的 proftpd-1.3.2rc4.tar.gz
解壓縮後進入 proftpd-1.3.2rc4 目錄
$ sudo ./configure --prefix=/usr/local/proftpd --enable-autoshadow --enable-auth-pam
-enable-dso --enable-nls --enable-shadow
其中 --prefix=/usr/local/proftpd 代表proftpd的安裝路徑
     --enable-nls 代表使用 mod_lang 模組
$sudo make
$sudo make install

因為安裝好並沒有在 /etc/init.d/ 下面建立一個可以啟動、關閉的檔案,需要自己建立一個,內容是:
(參考: http://www.castaglia.org/proftpd/doc/contrib/ProFTPD-mini-HOWTO-Stopping.html )
#!/bin/sh
# chkconfig: 345 85 15
# description: ProFTPD

# ProFTPD files
FTPD_BIN=/usr/local/proftpd/sbin/proftpd
FTPD_CONF=/usr/local/proftpd/etc/proftpd.conf
PIDFILE=/usr/local/proftpd/var/proftpd.pid

# If PIDFILE exists, does it point to a proftpd process?

if [ -f $PIDFILE ]; then
  pid=cat $PIDFILE
fi

if [ ! -x $FTPD_BIN ]; then
  echo "$0: $FTPD_BIN: cannot execute"
  exit 1
fi

case $1 in

  start)
    if [ -n "$pid" ]; then
      echo "$0: proftpd [PID $pid] already running"
      exit
    fi

    if [ -r $FTPD_CONF ]; then
      echo "Starting proftpd..."
      $FTPD_BIN -c $FTPD_CONF

    else
      echo "$0: cannot start proftpd -- $FTPD_CONF missing"
    fi
    ;;

  stop)
    if [ -n "$pid" ]; then
      echo "Stopping proftpd..."
      kill -TERM $pid

    else
      echo "$0: proftpd not running"
      exit 1
    fi
    ;;

  restart)
    if [ -n "$pid" ]; then
      echo "Rehashing proftpd configuration"
      kill -HUP $pid

    else
      echo "$0: proftpd not running"
      exit 1
    fi
    ;;

  *)
    echo "usage: $0 {start|stop|restart}"
    exit 1
    ;;

esac

exit 0

存為 /etc/init.d/proftpd,記得要加上執行的權限 #sudo chmod 755 /etc/init.d/proftpd
就可以使用 /etc/init.d/proftpd start、/etc/init.d/proftpd stop、/etc/init.d/proftpd restart
來開啟、關閉、重新開啟 ProFTPD

執行下面這行,使開機時會自動執行 proftpd
$ chkconfig --add proftpd

可是用這個方法,如果不正常關機的話,會沒有執行到 /etc/init.d/proftpd stop
導致 /usr/local/proftpd/var/proftpd.pid 沒有被刪掉
使得開機時 /etc/init.d/proftpd start 會以為 proftpd 已經在執行了而沒有啟動
必需手動刪除那個pid檔後再手動執行
$sudo rm /usr/local/proftpd/var/proftpd.pid
$sudo /etc/init.d/proftpd start

◎ 我的proftpd設定檔 /usr/local/proftpd/etc/proftpd.conf

ServerName
	
	
	
"My FTP"
ServerType
	
	
	
standalone
DefaultServer
	
	
	
on
MultilineRFC2228
	
	
on
ShowSymlinks
	
	
	
on

# Port 21 is the standard FTP port.
Port
	
	
	
	
21

# Don't use IPv6 support by default.
UseIPv6
	
	
	
	
off

# Umask 022 is a good standard umask to prevent new dirs and files
# from being group and world writable.
Umask
	
	
	
	
022

TimeoutNoTransfer
	
	
600
TimeoutStalled
	
	
	
600
TimeoutIdle
	
	
	
300

#使ProFTPD的時間為本地時間而不是GMT(格林威治時間)
SetEnv TZ :/etc/localtime
TimesGMT off

#Don't show welcome message until user has authenticated
DeferWelcome
	
	
	
off
DisplayLogin                    /var/ftp/welcome.msg
DisplayChdir              
	
.message true
ListOptions                
	
"-l"

DenyFilter
	
	
	
*.*/

# 禁止root帳號登入
RootLogin
	
	
	
off
RequireValidShell
	
	
off

# To prevent DoS attacks, set the maximum number of child processes
# to 30.  If you need to allow more than 30 concurrent connections
# at once, simply increase this value.  Note that this ONLY works
# in standalone mode, in inetd mode you should use an inetd server
# that allows you to limit maximum number of processes per service
# (such as xinetd).
MaxInstances
	
	
	
30
MaxClients
	
	
	
30 "上線人數已滿"
MaxClientsPerUser
	
	
9
MaxClientsPerHost
	
	
3

# Set the user and group under which the server will run.
User
	
	
	
	
nobody
Group
	
	
	
	
nogroup

# 設定直接覆蓋、支援續傳、支援FXP
AllowOverwrite
	
	
	
on
AllowStoreRestart
	
	
on
AllowForeignAddress
	
	
on

SystemLog   /var/log/proftpd/proftpd.log
#TransferLog /var/log/proftpd/xferlog

#log一些自定義格式,根據需要調整或者用默認
LogFormat myxfer "%t %u "%m %f" %a %b bytes %T sec"
LogFormat myauth  "%t %u "%r" %S %a"

ExtendedLog /var/log/proftpd/transfer.log read,write myxfer
ExtendedLog /var/log/proftpd/login.log auth myauth

#關閉 ProFTPD IP 反查功能
UseReverseDNS off
IdentLookups off

#參觀帳號
TransferRate RETR 0.001 user ftp_guest
TransferRate STOR 0.001 user ftp_guest

#一般的使用者加入ftp群組,家目錄都設在 /home/ftp
#進階的使用者加入ftp-adv與ftp群組,有各自的家目錄,且可以存取 /home/ftp
#所以要限制ftp群組的使用者在/home/ftp下,
#而ftp-adv的使用者只限制在 /home 之下
DefaultRoot ~ ftp,!lab,!ftp-adv
DefaultRoot /home


# Bar use of SITE CHMOD by default
<Limit SITE_CHMOD>
  DenyAll
</Limit>

#使用 mod_lang 模組使 ftp client 可使用指令 FEAT 得知 server 的字碼集為何
LangEngine on

--
※ 來源: DISP BBS (http://disp.twbbs.org)
※ 作者: Knuckles  來自: 140.112.175.130  時間: 2009-01-26 17:03:39
※ 編輯: Knuckles  來自: 140.112.175.130  時間: 2009-01-26 17:19:19
※ 編輯: Knuckles  來自: 140.112.175.130  時間: 2009-01-26 17:26:43
※ 編輯: Knuckles  來自: 140.112.175.130  時間: 2009-01-30 02:30:09
※ 編輯: Knuckles  來自: 140.112.175.130  時間: 2009-05-31 15:30:00
※ 編輯: Knuckles  來自: 114.43.116.76  時間: 2009-11-17 11:58:25
推 Knuckles:修正了一下開機時沒有自動執行的問題
	
>>114.43.116.76 11-17 12:00
※ 編輯: Knuckles  來自: 114.43.116.76  時間: 2009-11-17 12:04:57
※ 編輯: Knuckles  時間: 2010-12-11 15:36:45  來自: 111-248-6-110.dynamic.hinet.net
現在使用apt-get裝的proftpd,設定檔可以直接加上 LangEngine on
不需要自己編譯了...
所以這篇的重點只剩下設定檔要加上 LangEngine on
※ 編輯: Knuckles 時間: 2011-04-04 08:28:53 來自: 111-248-5-73.dynamic.hinet.net
※ 看板: KnucklesNote 文章推薦值: 1 目前人氣: 0 累積人氣: 1360 
※ 文章分類: Ubuntu 安裝與設定
分享網址: 複製 已複製
terrykyo 轉錄至看板 terrykyo 時間:2011-04-04 01:56:10
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇