看板 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 軟體了
SmartFTP、FTPRush
用不慣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=
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
# 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 $PIDFILEfi
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 累積人氣: 1363
回列表(←)
分享