出處:鳥哥的 Linux 新手討論區
http://phorum.....org這是我跟同學一起整理的ftp教學
有錯ㄉ話請指正喔!!!...^^
10-0 FTP SERVER摘要
FTP(File Transfer Protocol)檔案傳輸協定,是目前Internet最常被用來傳輸檔案的方法,它可以提供使用者上傳或下載檔案。由於FTP伺服器的服務功能相當好用,所以Linux在安裝光碟中就有WU-FTP Server,另外還有相當好用的PROFTP Server可在網路上下載供使用者安裝,使用者可在Linux文字模式下直接以ftp指令連接伺服器。
FTP伺服器除了提供擁有專屬帳號的使用者連接外,更提供了匿名式的檔案下載服務,使用者只要在帳號中填入anonymous,密碼則鍵入電子郵件地址,就能以匿名方式登入FTP伺服器來上傳或下載檔案,這也是FTP通訊協定得以盛行的原因之一。
10-1 WU-FTP 簡介
WU-FTPD 為 Washington Univ. in Saint Louis 所寫的FTP server程式。除了它原有 ftp server 的功能,主要地也增加了下列數項功能︰
1.可將使用者區分成不同的class,給予一些權限上的限制。
2.記錄 (log) 使用者所下的命令及傳送檔案的名稱。
3.可對不同網域做不同存取權限和可存取的時段。
4.提供user在下載檔案的時,可自動壓縮或解壓。
5.可記錄FTP Server使用情形。
6.可限定最多連線人數,以符合整體運作效能。
7.顯示相關訊息,讓使用者瞭解接收狀態。
8.可將FTP Server暫停,便於系統維護。
9.支援虛擬FTP主機(Virtual FTP Servers)。
10-2 WU-FTP 安裝與啟動
WU-FTP的安裝套件在Linux的安裝光碟就有,在安裝Linux系統時選取即可安裝WU-FTP。若是當初安裝系統時沒有安裝WU-FTP,則可經由下列的方式安裝。
[root@linux root]# mount /mnt/cdrom 將光碟機掛入/mnt/cdrom
[root@linux root]# cd /mnt/cdrom/RedHat/RPMS 切換到放置RPM檔案的目錄
[root@linux root]# rpm –ivh wu-ftpd-2.6.1-18.i386.rpm
如要從舊版升級至新版,請將參數-i改成-U即可
[root@linux root]# /etc/rc.d/init.d/xinetd reload 啟動FTP
要確認 FTP伺服器是否已啟動可利用telnet指令來測試:
WU-FTP Ver. 2.6.1-18有安全漏洞,可以讓hacker讀取Server上所有文件。必須升級至Ver. 2.6.1-20以修正漏洞。我們可以在http://www.redhat.com/apps/support/errata下載修正程式,執行
rpm –Fvh wu-ftpd-2.6.1-20.i386.rpm
安裝完成後修改/etc/xinetd.d/wu-ftpd檔,將disable設為no
service ftp{
disable = no ←改為no
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.ftpd
server_args = -l -a
log_on_success += DURATION USERID
log_on_failure += USERID
nice = 10
}
存檔後,要求xinetd重新讀取設定檔
[root@linux root]# /etc/rc.d/init.d/xinetd reload
經過以上步驟,WU-FTP安裝啟動完成。
10-3 WU-FTP 設定
設定檔/etc/ftpaccess
l 拒絕登入的Unix使用者與UID
deny-uid <使用者ID>
l 拒絕登入的Unix群組與GID
deny-gid <群組ID>
l 不拒絕的Unix使用者與UID
allow-uid <使用者ID>
l 不拒絕的Unix群組與GID
allow-gid <群組ID>
l 當作訪客Unix使用者與UID
guestuser <使用者ID>
l 當作訪客Unix群組與GID
guestgroup <群組ID>
l 允許登入時帳號或密碼輸入錯誤的次數,這個值設越小越好,以避免被hacker攻擊
loginfails 3
登入成功後顯示歡迎訊息
message <訊息檔> login
例如我們編寫一個訊息內容如下:
////////////////////////////////////////////////////////////////////////// WELCOME TO FTP site !!!
請大家多分享好用的軟體----^_^---thx!!/////////////////////////////////////////////////////////////////////////
你的來源IP是 %R
您是目前站上第 %N 位使用者
系統時間是: %T
主目錄為: %C
將此內容存成welcome.msg放在根目錄下,設定歡迎訊息
message /welcome.msg login
則登入成功後會顯示歡迎訊息
訊息檔中使用的參數:
%T FTP Server系統的時間
%C 目前所在目錄名稱
%E 管理員的E-Mail
%R FTP Client的主機名稱
%L FTP Server的主機名稱
%U Client登入的帳號
%M 最大連線人數
%N 目前連線人數
l上傳設定
upload /var/ftp/guestftp /upload yes guest guest dirs
說明:/var/ftp/guestftp FTP 所在目錄
/upload 上傳目錄
Yes 允許上傳
guest guest owner group
dirs 允許建立目錄
密碼檢查
passwd-check <none|trivial|rfc822> <enforce|warn>
檢查方式:
none 不檢查密碼
trivial 密碼中需有”@”
rfc822 要符合rfc822規定
回應:
enforce 中斷與client的連線
warn 顯示警告訊息
l 匿名FTP根目錄
anonymous-root <目錄>
l 訪客根目錄
guest-root <目錄>
l 限制 user 只能在 /home 目錄下活動
guest-root <FTP目錄>
restricted-uid
l 拒絕某IP或DomainName進入
deny <IP> <訊息檔>
ex: deny *.*.edu.tw /msgdeny
deny 140.92.0.0/16 /msgdeny
l利用real, guest, anonymous三種身分與client來源IP/HostName來定義群組,以便於管理。
class <class> <typelist> <addrglob>
ex: class admin real *.pccu.edu.tw
class local real, guest, anonymous *.pccu.edu.tw
class remote real, guest, anonymous
l 紀錄檔
log commands <類別>
ex: log command real,anonymous
將類別為real與anonymous的連線時所下的指令,紀錄到紀錄檔去。
log transfers <類別> <directions>
ex: log transfers real inbound,outbound
將類別為real的連線所下載/上傳的檔案全部紀錄到紀錄檔去。
l 限定某個類別在某時間的最大登入人數
limit <類別> <n> <times> <訊息檔>
ex: limit local 100 Any1800-0100 /msgtoomany
l 對類別設定其對於可否使用chmod, delete, overwrite, rename, umask等權限
chmod <yes|no> <類別>
delete <yes|no> <類別>
overwrite <yes|no> <類別>
rename <yes|no> <類別>
umask <yes|no> <類別>
ex: chmod yes class=admin
delete no anonymous, real
overwrote no class=remote
設定檔/etc/ftphost
l 允許某使用者從某個IP登入
allow <使用者ID> <IP>
ex: allow John 140.137.161.86
l 不允許某使用者從某個IP登入
deny <使用者ID> <IP>
ex: deny Mary 140.137.161.80
其他管理指令:
ftpwho :查閱目前登入FTP_Server的使用者。
ftpcount:計算目前登入的人數。
ftpshut :關閉FTP_Server。單純關閉ftp,當該Server同時提供其他服務時,可以選擇僅關避FTP SERVER,以保留其他服務。
ftpshut:<-l 分鐘><-d 分鐘><絕對時間><警告訊息>
10-4 ProFTP簡介
目前大多數站台的 FTP 服務,以採用 WU-FTPD 伺服器程式架設者居多,而且WU-FTPD 在效能上,一直有不錯的表現,程式版本更新的速度也不慢,不過,它卻不是一個夠安全的系統。
如果想找一個不錯的 FTP 伺服程式來取代 WU-FTPD, ProFTPD是另一個不錯得選擇!ProFTPD 的發展,一開始,便是定位在:成為一個安全且容易設定的 FTP 伺服器程式。
以下是 ProFTPD 的特點:
· 單一設定檔,設定風格接近 Apache 設定檔
· 每一目錄可用 .ftpaccess 來控制(類似 Apache 的 .htaccess)
· 易於設定多重虛擬主機以及匿名FTP
· 可讓管理人員選擇 standalone 或 inetd 的執行方式
· 匿名FTP不需要額外的目錄結構
· 原始碼開放,沒有 SITE EXEC 指令,安全性可受監控
· 根據系統檔案權限,可隱藏目錄或檔案
· 以較低權限的身份來執行,降低萬一被攻入的危險
· 記錄檔支援 utmp/wtmp,並和 wu-ftpd 相容,記錄格式也可擴充
支援 shadow password
10-5 開始安裝
1.以proftpd-1.2.4.tar.gz安裝為範例
步驟:
[root@linux root]#tar –zxvf proftpd-1.2.4.tar.gz
[root@linux proftpd-1.2.4]#cd proftpd-1.2.4
[root@linux proftpd-1.2.4]#./configure 執行組態設定檔make
[root@linux proftpd-1.2.4]#make install
2. ProFTPD 設定檔的位罝
用 RPM 檔安裝的 ProFTPD 設定檔在 /etc/proftpd.conf
若抓 tar.gz 檔回來安裝的,則設定檔在 /usr/local/etc/proftpd.conf
.
3. 啟動ProFTP
ProFTP啟動方式有兩種,一種是standalone,另一種則為inetd,若此Server為專門之FTP則建議採用Standalone方式啟動,若還有其他服務則建議採inetd啟動其效能較佳。
以下為inetd方式作為範例:
修改 /usr/local/etc/proftpd.conf
ServerType inetd
在 /etc/xinedtd.d/ 下建立 proftpd 檔,內容為 :
Service ftp {
disable = no ←預設為 yes,請改為 no
socket_type = stream
wait = no
user = root
server = /usr/local/sbin/proftpd
}
10-6 proftpd.conf 的設定範例:
# ServerName : 設定您的站台名稱 (”# ”號為註解)
ServerName "MY FTP SITE"
# ServerType : 設定 ProFTPD 的執行方式,可以是 standalone 或 inetd
# 此處是 inetd
ServerType inetd
# DefaultServer 用來設定 unknown 的連接是否由預設的主機來處理
DefaultServer on
# Port 21 是 FTP 標準的通道,inetd啟動的話無法變更port
Port 21
# 檔案安全濾網值設為022
Umask 022
# 可避免 Dos 攻擊的設定
MaxInstances 30
# 執行時的身份/組別權限
User nobody
Group nobody
#設定檔案能被覆寫.
<Directory /*>
AllowOverwrite on
</Directory>
#針對特定目錄設定存取的限制,如上傳目錄
<Directory uploads/*>
#予許來源讀取
<Limt READ>
#Deny All
Allow All
</Limit>
#允許來源儲存、建立目錄
<Limit STOR MKD>
Allow All
</Limit>
</Directory>
# 以下是匿名 FTP 的設定
<Anonymous ~ftp>
User ftp
Group ftp
AnonRequirePassword off
RequireValidShell off
#將用ftp身份登入的user權限設為等同anonymous
UserAlias anonymous ftp
# 設定匿名最大連線人數
MaxClients 10
#當使用者登入時顯示歡迎訊息 , welcome.mag為歡迎訊息檔名
#DisplayFirstChdir 是當切換目錄時的提示訊息
DisplayLogin welcome.msg
DisplayFirstChdir .message
#限制匿名使用者是有能寫入資料,此處設為不允許, Allow all 為允許
<Limit WRITE>
DenyAll
</Limit>
</Anonymous>
存檔之後,重新啟動 inetd :
/etc/rc.d/init.d/inet restart
10-7其他設定
設定一般user登入與否:
<Limit Login>
AllowAll 若不允許為 DenyAll </Limit>
設定一般user登入時的home目錄:
DefaultRoot <目錄位置>
若要設定根目錄為自已的home目錄:讓使用者無法切換到別人的home目錄
DefaultRoot ~
設定支援續傳:
AllowStoreRestart on
#若想使用Root身份登入,請加上:
RootLogin On
隱藏版本訊息:
ServerIdent On “”
設定一個IP的登入個數:
MaxClientsPerHost 1
設定Log檔的位置和檔名:
TransferLog <目錄位置><檔名>
匿名FTP來源限制:
<Limit Login>
Order Deny,Allow
Deny from .evil.net , .otherevil.net
Allow from all
</Limit>
若發現使用 CuteFtp 等軟體連上FTP時,無法改變檔案屬性,在proftpd.conf加入
AllowChmod true
隱藏某Group/User的檔案:
HideUser <使用者> / HideGroup <群組>
若設定完仍無法使用匿名登入,請確定在匿名使用者中,有加入:
RequireValidShell off