索引:
| 18.1 何謂 FTP 及 FTP 的連線流程 | ||
| 18.1.1 | FTP 簡介 | |
| 18.1.2 | FTP 的連線流程 | |
| 18.2 架設 Pure-ftpd Server | ||
| 18.2.1 | 查詢套件安裝及檢視套件內容 | |
| 18.2.2 | 設定 Pure-ftpd Server | |
| 18.2.3 | 設定虛擬帳號 | |
| 18.3 架設 vsftpd Server | ||
| 18.3.1 | 查詢套件安裝及檢視套件內容 | |
| 18.3.2 | 設定 vsftpd Server | |
| 18.3.3 | vsftpd 的綜合範例說明 | |
18.1 何謂 FTP 及 FTP 的連線流程
18.1.1 FTP 簡介
FTP (File Transfer Protocol) 是在網際網路上已行之多年的檔案傳輸協定,透過這個通訊協定,可以將遠端電腦的檔案資料傳送回本機端 (下載),也可以把本機的檔案資料傳輸至遠端電腦 (上傳) ﹔而所謂的 FTP Server,就是一部專門提供給用戶端進行檔案上傳與下載服務的伺服器。
我們都知道 Web Server 是用 http 來做資料傳輸的協定,其除了可讓 Client 端瀏覽網頁外,同時也提供檔案上傳與下載的服務,不過它比較適用於小檔案的傳輸,而在對大檔案傳輸時,所表現的穩定度及傳輸效率就不那麼高了。所以想改善 http 傳輸檔案上的缺失及效能,最好的方式就是架設一台 FTP Server 了。
用來架設 FTP Server 的軟體有好幾種,其中最老牌的算是 wu-ftpd,不過也由於其樹大招風的關係,使得在安全性方面會有比較大的隱憂。不過還好後來又陸續發展出一些安全性較佳的伺服器軟體,比方像 proftpd、vsftpd 及 pure-ftpd 等,而本章將會針對 pure-ftpd 及 vsftpd 這兩個伺服器軟體來做介紹。
18.1.2 FTP 的連線流程
在還沒開始介紹流程之前,要先來了解一下兩台電腦間 TCP 連線建立的過程:
|
當 Client 向 Server 提出主動連線請求時,會送出連線過程的第一個 TCP 封包給對方,而此時 TCP 封包中的 SYN (同步旗標) 位元值設定為 1,代表的是一個連線的啟動 ﹔接著 Server 端也必須啟動自己的連線並做回應的確認,因此會向 Client 端送出連線過程的第二個封包,此時該封包的 SYN 及 ACK (回應確認旗標) 位元值皆設定為 1 ﹔最後在 Client 端收到對方的封包後,必須做回應確認的動作,因此會送出連線過程的第三個封包給 Server,此時封包的 ACK 位元值設定為 1。至此雙方的連線才正式建立起來,這就是所謂的 TCP Three-Way Handshake ( TCP 三段式交握 )。
了解了 TCP 連線建立的觀念後,底下就來說明 FTP 連線的過程。不過在此之前,要先了解的是,FTP Client 能採取的連線模式有兩種,分別是主動模式 (Active mode) 及被動模式 (Passive mode),所以接著會以這兩種不同模式來敘述連線過程。
| 主動模式下的 FTP 連線 | ||
| 當 FTP Client 一開始要連上 FTP Server 時,會先隨機產生一個大於 1024 的 port ( 假設 3000 port ),來主動對 FTP Server 的 21 port 做連線,等完成了 TCP 三段式交握後,連線才正式建立起來,而這個 3000 port 與 21 port 所建立的連線通道,就叫做命令通道 (command channel )。之所以會稱其為命令通道,當然是只能執行一些基本指令而已囉。 現在若是 Client 端想要下載或上傳資料時,還要另外建立起一條資料通道 (data channel ) 來作為資料傳輸使用。由於 Client 是採取主動模式 (可以想像 Client 要求 Server 做主動連線,也就是 Server 主動連 Client ),因此本身會再開啟另一個大於 1024 的 port ( 假設 5000 port ),然後透過命令通道通知 Server 已準備好這個 data channel 的連接埠,接著 Server 就以 20 port 來主動與 Client 端的 5000 port 建立連線,就在完成了另一次的三段式交握後,此 data channel 便建立起來,至此 Client 方可開始做資料傳輸。 | ||
| 被動模式下的 FTP 連線 | ||
| 一開始 command channel 的建立,與上面所述相同,不再重複,這裡只針對 data channel 的建立做說明。由於此時 Client 是希望採取被動模式 (可以想像 Client 要求 Server 做被動連線,也就是 Client 主動連 Server),所以會先透過 command channel 來通知 Server 這個訊息,Sever 收到後就隨機開啟一個大於 1024 的 port (假設 8000 port),並經由 command channel 知會 Client 已準備好 data channel 的連接埠,接著 Client 也隨機開啟一個大於 1024 的 port (假設 9000 port) 來主動與 Server 建立連線,而完成的三段式交握後,此 8000 port 與 9000 port 之間的 data channel 便建立起來了。 |
18.2 架設 Pure-ftpd Server
18.2.1 安裝套件及檢視套件內容
| 套 件 名 稱 | 簡 單 描 述 |
| pure-ftpd | pure-ftpd Server 的主要套件。 |
suse:~ # rpm -ql pure-ftpd
|
| suse:~ # chkconfig pure-ftpd 35 |
18.2.2 設定 Pure-ftpd Server
一般登入 FTP 最常見的兩種身分,一為匿名 (Anonymous) 登入,一為使用真實帳號 (Real User) 登入。
如果以匿名使用者來說,其登入 FTP 時的預設根目錄位置,就是自己的家目錄,您可以觀察在 /etc/passwd 中 ftp (anonymous) 帳號的家目錄在哪,查到了嗎,沒錯,就是 /srv/ftp 啦。
那 Real User 又如何呢 ? 由於 SuSE 預設是不允許使用真實帳號來登入系統的,因此就算您透過認證的方式來登入 FTP 也沒用,因為最後還是會變成以匿名身分來登入的 ﹔當然也可以藉由修改設定檔來讓 Real User 登入,不過記得還是要把 Real User 限定在根目錄 (預設為自己的家目錄)下活動噢,比如使用者 barry 連線進來後,他就只能對 /home/barry 做存取,而無法存取其他的目錄 。
那為何要限制使用者所能存取的目錄呢 ? 理由很簡單,因為您不能保證 Real User 對其他目錄不會亂搞一通啊,當您取消了這個限制之後,就等於讓使用者可以自由存取系統上的任何目錄,這樣在無形之中,也會對系統安全構成一大威脅。
有了以上的基本認知之後,接著就來設定 Pure-ftpd 了。
| suse:~ # vi /etc/pure-ftpd/pure-ftpd.conf # Cage in every user in his home directory ChrootEveryone yes # 限定每一個使用者都只能在自己家目錄下活動。當設定成 no 時,則 Real User 就能對 # 其他的目錄做存取,不過還要搭配 "AnonymousOnly no" 來使用才行。 # If the previous option is set to "no", members of the following group # won't be caged. Others will be.If you don't want chroot()ing anyone, # just comment out ChrootEveryone and TrustedGID. # TrustedGID 100 # 當您將註解拿掉後,GID 100 的群組成員,會被視為信任的使用者,因此可以存取家目錄 # 以外的其他目錄。此時無論 ChrootEveryone 設定為何,都是一樣的結果。 # Maximum number of simultaneous users MaxClientsNumber 10 # 限定最大連線數為 10。 # Maximum number of sim clients with the same IP address MaxClientsPerIP 3 # 限定同一來源端位址的最大連線數為 3。 # List dot-files even when the client doesn't send "-a". DisplayDotFiles yes # 這個參數設定成 yes 時,則 Client 可以看到檔名是以 "." 作開始的隱藏檔。 # Don't allow authenticated users - have a public anonymous FTP only. AnonymousOnly yes # 是否只允許匿名登入。當您希望 Real User 也能登入時,就設定成 no。 # Disallow anonymous connections. Only allow authenticated users. NoAnonymous no # 是否不允許匿名登入。當設定成 no,表示允許匿名登入,但如果希望只有 # Real User 能經由認證登入時,這裡就設定成 yes 吧。 # Syslog facility (auth, authpriv, daemon, ftp, security, user, local*) # The default facility is "ftp". "none" disables logging. SyslogFacility ftp # 您可以在 /etc/syslog.conf 裡使用 ftp 這個 facility,來告知 syslogd 要將 ftp 的 # 相關訊息紀錄到哪裡。 # Don't resolve host names in log files. Logs are less verbose, but it # uses less bandwidth. Set this to "yes" on very busy servers or # if you don't have a working DNS. DontResolve yes # 紀錄檔內容是否不需解析來源端 ip 所對應的主機名稱。 # Maximum idle time in minutes (default = 15 minutes) MaxIdleTime 15 # 設定 FTP Client 端的閒置時間為 15 分鐘。 # PureDB user database (see README.Virtual-Users) # PureDB /etc/pure-ftpd/pureftpd.pdb # 這是使用虛擬帳號登入時,所依據的認證資料庫。 # If you want to enable PAM authentication, uncomment the following line. PAMAuthentication yes # 是否使用 PAM 認證模組,來對使用者作認證。 # If you want simple Unix (/etc/passwd) authentication, uncomment this. # UnixAuthentication yes # 是否依照 UNIX 傳統的 /etc/passwd 來做認證。 # Are anonymous users allowed to create new directories ? AnonymousCanCreateDirs no # 是否允許 anonymous 建立目錄。 # Port range for passive connections replies. - for firewalling. # PassivePortRange 30000 50000 # 當 Client 端採用被動模式來建立資料通道時,FTP Server 預計所要使用 data channel # 連接埠的範圍。 # Upload/download ratio for anonymous users. # AnonymousRatio 1 10 # 設定 anonymous 上傳/下載比率。 # 如以 1:10 而言,當 anonymous 上傳了 1MB 的資料後,就能夠下載 10MB 的資料。 # Upload/download ratio for all users. This directive superscedes # the previous one. # UserRatio 1 10 # 設定 All User 上傳/下載比率。當 AnonymousRatio 及 UserRatio 都做設定時, # 是以 UserRatio 為主。 # Disallow downloading of files owned by "ftp", ie. # files that were uploaded but not validated by a local admin. AntiWarez yes # 匿名使用者要下載檔案時,如檔案擁有者是 ftp 的話,則不允許被下載。 # 當 FTP 站台開放 anonymous 上傳時 (上傳之後的檔案擁有者為 ftp),為了防止有些人 # 可能會上傳一些有問題的檔案來供人下載,所以才會使用這個參數來做控管 ; 而在管理者 # 確認上傳的檔案沒問題後,就可以把此檔的擁有者做個改變,這樣就能提供正常下載了, # 當然相關權限還是要設定好就是了。 # IP address/port to listen to (default=all IP and port 21). # Bind 127.0.0.1,21 # 設定 FTP Server 要在哪個介面位址監聽哪個 port。預設是允許在所有介面位址監聽 21 port。 # Maximum bandwidth for anonymous users in KB/s # AnonymousBandwidth 8 # 設定 anonymous 最大上傳、下載頻寬,單位為KB/s。 # Maximum bandwidth for *all* users (including anonymous) in KB/s. # Use AnonymousBandwidth *or* UserBandwidth, both makes no sense. # UserBandwidth 8 # 設定 All User 最大上傳、下載頻寬。當 AnonymousBandwidth 及 UserBandwidth # 都做設定時,是以 UserBandwidth 為主。 # File creation mask. <umask for files>:<umask for dirs> . # 177:077 if you feel paranoid. Umask 177:077 # 設定使用者所上傳檔案、目錄 (含建立新目錄) 的預設權限。 # 177:077 表示檔案的預設權限為 600,目錄為 700。 # Minimum UID for an authenticated user to log in. MinUID 40 # 設定能允許 Real User 認證登入的最小 UID 為 40,也就是說 UID 40 以上 (含40) # 的使用者方可認證登入。 # 如果您想要允許 root 登入的話,那這個地方請先註解起來,並且在 /etc/ftpusers 檔案 # 中,將 root 帳號移除。/etc/ftpusers 是用來設定拒絕登入 FTP 的使用者名單。 # Users can't delete/write files beginning with a dot ('.') # even if they own them. If TrustedGID is enabled, this group # will have access to dot-files, though. ProhibitDotFilesWrite yes # 是否要禁止使用者刪除或修改隱藏檔,即使使用者就是該隱藏檔的擁有者。 # 設定 yes 就表示要禁止啦。 # Prohibit *reading* of files beginning with a dot (.history, .ssh...) ProhibitDotFilesRead no # 是否要禁止使用者讀取隱藏檔內容。 # Never overwrite files. When a file whoose name already exist is uploaded, # it get automatically renamed to file.1, file.2, file.3, ... AutoRename yes # 是否開啟自動更名的功能。當設定成 yes ,表示上傳檔案時,若對方目錄內已經存在 # 一個同檔名的檔案,則會將上傳的那個檔案,作自動更名的動作。 # Disallow anonymous users to upload new files (no = upload is allowed) AnonymousCantUpload yes # 是否要拒絕 anonymous 上傳。如要開放匿名使用者上傳檔案的話,就設定成 no。 # 另外要允許上傳目錄時,除了這裡要設定成 no 以外,AnonymousCanCreateDirs 參數 # 需設定成 yes 才行。 # Disallow the CHMOD command. Users can't change perms of their files. # NoChmod yes # 是否要拒絕使用者執行 chmod 指令來修改權限。 # Allow users to resume and upload files, but *NOT* to delete them. # KeepAllFiles yes # 當設定成 yes 時,表示使用者無法刪除伺服器上的檔案。 # Automatically create home directories if they are missing # CreateHomeDir yes # 當使用者家目錄不存在時,是否要自動建立起來。 # This option is useful with servers where anonymous upload is # allowed. As /var/ftp is in /var, it save some space and protect # the log files. When the partition is more that X percent full, # new uploads are disallowed. MaxDiskUsage 99 # 假使我們將 anonymous 的家目錄改成 /var/ftp (修改 /etc/passwd ),然後又設定允許 # 匿名使用者上傳,那這個參數就很好用了,因為當 /var partition 的使用空間達 99% 時, # 就不允許匿名使用者再上傳資料,不然 /var/log 目錄下的那些記錄檔可就無法持續 # 記錄一些重要資訊了。 # Set to 'yes' if you don't want your users to rename files. NoRename yes # 是否要拒絕使用者對檔案重新命名。 |
由於這裡我們是打算以 standalone 的方式來啟動 pure-ftpd,因此設定完成後,第一次啟動 FTP Server,請執行:
| suse:~ # rcpure-ftpd start |
以後設定檔如有做任何的修改,請記得重新啟動 pure-ftpd。另外您也可嘗試使用 xinetd 的方式來啟動 FTP,請讀者自行練習。
18.2.3 設定虛擬帳號 (Virtual User)
您可以為 pure-ftpd 的用戶端建立虛擬帳號,這個帳號有別於一般使用者登入系統的帳號。而設立虛擬帳號的好處是,除了可與一般帳號做個區隔外,還可以針對每個虛擬帳號設定其個別的上下載頻寬、可使用檔案數、使用空間大小、限制連線時間及來源端控管等等,有意思吧。
接著就開始來設定虛擬帳號,請參考以下的步驟。
步驟一:設定 pure-ftpd.conf
| suse:~ # vi /etc/pure-ftpd/pure-ftpd.conf # 找到以下兩個參數,並確定前面的註解符號有拿掉。 PureDB /etc/pure-ftpd/pureftpd.pdb CreateHomeDir yes # 重新啟動 pure-ftpd 服務: suse:~ # rcpure-ftpd restart |
步驟二:建立虛擬帳號所共用的 ftp 專屬帳號
| # 先新增專屬帳號的主要群組: suse:~ # groupadd virtualgrp # 建立 ftp 專屬帳號: suse:~ # useradd -g virtualgrp -m virtualuser |
步驟三:使用 pure-pw 指令來建立虛擬帳號
| suse:~ # pure-pw useradd tina -u virtualuser -d /home/virtualuser/tina Password: Enter it again: # 一開始先新增一個 tina 的虛擬帳號,並指定其家目錄位置。新增完畢後,您應可以在 # /etc/pure-ftpd/ 目錄下找到一個叫 pureftpd.passwd 的檔案,而這個檔案就類似於 # /etc/passwd 啦,只不過它是屬於虛擬帳號的 password file。 suse:~ # pure-pw mkdb # 依據 pureftpd.passwd 來建立認證資料庫 /etc/pure-ftpd/pureftpd.pdb。 # 將來要是 pureftpd.passwd 有異動,須執行 "pure-pw mkdb",以更新資料庫內容。 # 其實您在建立虛擬帳號的同時,就可以使用 -m 參數來把 pureftpd.pdb 給順便建立起來: suse:~ # pure-pw useradd tina -u virtualuser -d /home/virtualuser/tina -m # -m 參數會幫我們自動更新資料庫,因此使用了這個參數後,即不必再執行 "pure-pw mkdb" 了。 |
設定完成後,趕快用 tina 這個虛擬帳號來登入看看。如果沒問題的話,再來看 pure-pw 指令的其他用法:
| suse:~ # pure-pw usermod tina -t 100 -T 50 -q 1 -Q 10 -n 30 -N 2 \ > -z 1400-2230 -r 192.168.5.0/24,192.168.1.0/24 -m # 參數說明: # -t、-T:設定下載及上傳頻寬。 # -q、-Q:設定上傳/下載比率。 # -n:限定可使用的檔案數。 # -N:限制可使用的空間大小(MB)。 # -z:限定連線時間。 # -r:允許存取的來源端。 # 檢驗一下設定後的結果: suse:~ # pure-pw show tina Login : tina Password : $2a$07$m72FgmY91h39TISEorGy3sotL5ufknZ2O UID : 1010 (virtualuser) GID : 2001 (virtualgrp) Directory : /home/virtualuser/tina/./ Full name : Download bandwidth : 100 Kb (enabled) Upload bandwidth : 50 Kb (enabled) Max files : 30 (enabled) Max size : 2 Mb (enabled) Ratio : 1:10 (enabled:enabled) Allowed client IPs : 192.168.5.0/24,192.168.1.0/24 Time restrictions : 1400-2230 (enabled) # 修改 tina 的密碼: suse:~ # pure-pw passwd tina -m Password: Enter it again: # 刪除 tina 帳號: suse:~ # pure-pw userdel tina -m |
最後要跟各位補充一點,當啟用虛擬帳號的功能後,平常存在於 /etc/passwd 中的帳號還是可以正常登入 FTP,但若虛擬帳號設定成與一般登入帳號相同時,則是會以虛擬帳號為主的。
18.3 架設 vsftpd Server
18.3.1 所需套件及檢視套件內容
| 套 件 名 稱 | 簡 單 描 述 |
| vsftpd | vsftpd Server 的主要套件。 |
suse:~ # rpm -ql vsftpd
|
18.3.2 設定 vsftpd Server
這裡我們打算以 xinetd 的方式來啟動 vsftpd,因此請先至 /etc/xinetd.d/vsftpd 檔案去做修改:
| suse:~ # vi /etc/xinetd.d/vsftpd service ftp { socket_type = stream protocol = tcp wait = no user = root server = /usr/sbin/vsftpd disable = no ← 把 yes 改成 no 即可。 } |
接著請重新啟動 xinetd:
| suse:~ # rcxinetd restart Shutting down xinetd: done Starting INET services. (xinetd) done |
這樣 vsftpd 的服務就已經啟動了。再來開始進一步探討 vsftpd.conf 的設定內容。
| suse:~ # vi /etc/vsftpd.conf ###### Local FTP user Settings ###### # You may specify an explicit list of local users to chroot( ) to their home # local authenticated users. The default is 0 (unlimited). # local_max_rate=7200 # 預設為 0。設定 realuser 上傳及下載的傳輸速率,單位為 bytes/sec。而預設值 0 表示不設限。 # user_config_dir=/etc/vsftpd/limitdir # 可以利用這個參數來個別設定使用者的傳輸頻寬,比如想限定使用者 barry 的上傳下載頻寬, # 可以至 /etc/vsftpd/limitdir 目錄下去建立一個 barry 檔案 ,然後再把 local_max_rate # 參數設定進去就行了。 # guest_enable=YES # 預設為 NO。當 realuser 登入時,是否要將其身份轉換成訪客。若設定成 YES 時,則可以 # 利用 guest_username 參數來指定訪客的身份,如未指定,則預設為 ftp。 # guest_username=guest # 預設為 ftp。當 guest_username=YES 時才有作用。 ###### Anonymus FTP user Settings ###### # Allow anonymous FTP? anonymous_enable=YES # 預設為 YES。是否允許匿名使用者 (anonymous) 登入。 # Anonymous users will only be allowed to download files which are # world readable. # anon_world_readable_only=yes # 預設為 YES。當設定成 yes,表示匿名使用者下載檔案時,如果 others 對此檔案具有 # 可讀的權限,則允許下載。 # 舉個例子,假使您的 FTP 允許 anonymous 上傳,且上傳後該檔案權限為 600 ( 此時 others # 對此檔案不具有可讀權限 ),則此參數設定為 yes 的情況下, anonymous 是不允許對這些 # 檔案進行下載的。 # This option represents a directory which vsftpd will try to change into # after an anonymous login. # anon_root=/ftp/anondir # 預設為不啟用。想改變 anonymous 預設登入的根目錄位置,就設定這個參數吧 ! # Uncomment this to allow the anonymous FTP user to upload files. This only # has an effect if the above global write enable is activated. Also, you will # obviously need to create a directory writable by the FTP user. # anon_upload_enable=YES # 預設為 NO。是否允許匿名使用者上傳檔案。如果設定允許的話,則在 Server 上, # 您必須事先建立一個可以讓 anonymous 擁有寫入權限的目錄才行。 # Default umask for anonymus users is 077. You may wish to change this to 022, # if your users expect that (022 is used by most other ftpd's) # anon_umask=022 # 預設為 077。設定 anonymous 上傳檔案目錄時的預設權限。 # Uncomment this if you want the anonymous FTP user to be able to create # new directories. # anon_mkdir_write_enable=YES # 預設為 NO。是否允許匿名使用者上傳或建立目錄。 # Uncomment this to enable anonymus FTP users to perform other write operations # like deletion and renaming. # anon_other_write_enable=YES # 預設為 NO。是否允許匿名使用者具備其他的寫入權限,比如刪除檔案目錄,或對檔案目錄 # 重新命名等。 # If you want, you can arrange for uploaded anonymous files to be owned by # a different user. Note! Using "root" for uploaded files is not # recommended! # chown_uploads=YES # 預設為 NO。匿名使用者上傳檔案後,是否允許安排檔案的擁有者為另一個使用者而非 ftp。 # 若設定成 YES,可搭配 chown_username 參數,去指定該檔案的擁有者是誰,如沒指定,則預 # 設為 root。請注意這裡是只針對上傳的檔案而言,目錄在這個地方並不適用。 # chown_username=whoever # 預設為 root。需搭配 chown_uploads=YES 來設定。 # The maximum data transfer rate permitted, in bytes per second, for anonymous # authenticated users. The default is 0 (unlimited). # anon_max_rate=7200 # 預設為 0。設定 anonymous 上傳及下載的傳輸速率, 0 表示不設限。 ###### Log Settings ###### # Log to the syslog daemon instead of using an logfile. syslog_enable=YES # 預設為 NO。當設定成 YES 時,會把原本要紀錄到 /var/log/vsftpd.log 中的 ftp 資訊, # 改依 syslogd daemon 所主要參考的檔案 syslog.conf,來決定把 ftp 相關訊息 # 紀錄到哪裡,以 SUSE 而言,就是指 /var/log/messages。 # Uncomment this to log all FTP requests and responses. # log_ftp_protocol=YES # 預設為 NO。是否要將所有 ftp 的需求及回應都紀錄下來。 # Activate logging of uploads/downloads. # xferlog_enable=YES # 預設為 NO。是否要將 ftp 的上傳/下載資訊記錄下來。 # 若設定 YES,則預設會紀錄在 /var/log/vsftpd.log 檔案中。 # You may override where the log file goes if you like. The default is shown # below. # vsftpd_log_file=/var/log/vsftpd.log # 這是 vsftpd 預設的紀錄檔。 # If you want, you can have your log file in standard ftpd xferlog format # Note: This disables the normal logging unless you enable dual_log_enable below. # xferlog_std_format=YES # 預設為 NO。是否以 wu-ftpd 標準的 xferlog 格式,來作為記錄檔的紀錄格式。當設定成 YES # 時,預設的紀錄檔為 /var/log/xferlog。 # You may override where the log file goes if you like. The default is shown # below. # xferlog_file=/var/log/xferlog # 當 xferlog_std_format=YES 時,預設就是記錄在這個檔案。 # Enable this to have booth logfiles. Standard xferlog and vsftpd's # own style log. # dual_log_enable=YES # 預設為 NO。當設定為 YES 時,會同時將 ftp 資訊紀錄在 /var/log/xferlog 及 /var/log/vsftpd.log 中。 ###### Transfer Settings ###### # Make sure PORT transfer connections originate from port 20 (ftp-data). connect_from_port_20=YES # 預設為 NO。在主動模式下建立資料通道時,是否啟用 20 port。 # You may change the default value for timing out an idle session. # idle_session_timeout=600 # 預設為 300 秒。設定閒置時間為何。若設定 100 秒,就表示使用者在 100 秒內 # 都沒執行任何命令動作時,將會被斷線。 # You may change the default value for timing out a data connection. # data_connection_timeout=120 # 預設為 300 秒。設定資料傳輸時所能閒置的秒數。 # ascii_upload_enable=YES # 預設為 NO。是否允許以 ASCII 格式來上傳資料。 # ascii_download_enable=YES # 預設為 NO。是否允許以 ASCII 格式來下載資料。 # Set to NO if you want to disallow the PASV method of obtaining a data # connection. # pasv_enable=YES # port_enable=YES # 預設皆為 YES。是否允許 client 端使用主動模式或被動模式來建立連線。 # PAM setting. Do NOT change this unless you know what you do! pam_service_name=vsftpd # 預設為 ftp。這裡是指定 vsftpd 所使用 pam 模組服務的名稱,其路徑為 /etc/pam.d/vsftpd。 # Set listen=YES if you want vsftpd to run standalone listen=NO # 預設為 NO。是否以 standalone 的方式來啟動 vsftpd 服務。由於我們當初是規劃使用 # xinetd 的方式,因此需確定 listen 設定為 NO。 # listen_port=21 # 預設為 21 port。設定於建立命令通道時所使用的 port number。 # tcp_wrappers=YES # 預設為 NO。是否讓 /usr/sbin/vsftpd 支援 tcp_wrappers。若設定成 YES,則連線進來的 # 封包將會經過 /etc/hosts.allow 及 /etc/hosts.deny 的過濾。 # 這個參數是特別針對以 standalone 方式來啟動 vsftpd 服務而設計的,若您是使用 xinetd # 來啟動的話,則不管 tcp_warppers 參數設定為何,都會使用到 tcpd 的過濾機制。 # max_clients=20 # 預設為 0。以 standalone 來啟動 vsftpd 前提下,限定 client 端的最大連線數為何。 # 預設值 0, 表示不限制連線數。 # pasv_min_port=8000 # pasv_max_port=9000 # 預設皆為 0。設定被動模式下建立資料通道時,所啟用的 data port number 的範圍。 # 預設值 0 ,表示 any port 之意。 |
設定檔修改過後,請記得重新啟動 xinetd。
以上只是列舉部分設定參數來做說明而已,如讀者對其他 vsftpd 的參數有興趣的話,可 " man vsftpd.conf " 來自行查閱。
18.3.3 vsftpd 的綜合範例練習
以下舉個實際的設定範例給大家參考。所要求的事項如下:
- 一般設定部分:
˙ 當使用者登入 FTP 站台時,會看到如下的歡迎訊息:
############################################
########## Welcome to barry's FTP Site ###########
############################################˙ 請讓 vsftpd 使用本地端的時間。
- Realuser 設定部分:
˙ 允許 realuser 能登入 FTP,且除了使用者 barry 及 david 外,其他 realuser 都只能以自己的家目錄作為登入時預設的根目錄位置。 ˙ 拒絕 tina 及 mary 這兩個帳號登入 FTP。 ˙ 設定使用者 barry 及 david 的上傳/下載頻寬為 200 KB/sec,其他 realuser 則為 80 KB/sec。
- Anonymous 設定部分:
˙ 允許 anonymous 可以上傳檔案 (請事先建立 /srv/ftp/upload 目錄,來提供給 anonymous 上傳檔案用) 及下載 ,而上傳後的檔案,無法馬上提供給其他人下載,亦無法被刪除。 ˙ 設定 anonymous 的上傳/下載頻寬為 50 KB/sec。
- Log 設定部分:
將使用者上傳/下載的資訊,同時紀錄在 /var/log/vsftpd.log 及 /var/log/xferlog 中。
- 檔案傳輸設定部分:
˙ 使用者閒置三分鐘沒執行任何命令動作,將會被斷線。另外在做資料傳輸時,如果閒置時間超過兩分鐘,也會被斷線。 ˙ 不允許使用 ASCII 格式來上傳/下載資料。 ˙ 以 xinetd 方式來啟動 vsftpd。
| suse:~ # vi /etc/vsftpd.conf ###### 一般設定 ###### write_enable=YES banner_file=/etc/welcomefile use_localtime=YES ###### RealUser 相關設定 ###### local_enable=YES chroot_local_user=YES chroot_list_enable=YES chroot_list_file=/etc/vsftpd.chroot_list local_max_rate=80000 user_config_dir=/etc/limitdir ###### Anonymous 相關設定 ###### anonymous_enable=YES anon_world_readable_only=YES anon_upload_enable=YES anon_umask=077 anon_mkdir_write_enable=NO anon_other_write_enable=NO anon_max_rate=50000 ###### Log 相關設定 ###### xferlog_enable=YES vsftpd_log_file=/var/log/vsftpd.log xferlog_std_format=YES xferlog_file=/var/log/xferlog dual_log_enable=YES ###### 檔案傳輸設定 ###### idle_session_timeout=180 data_connection_timeout=120 ascii_upload_enable=NO ascii_download_enable=NO pam_service_name=vsftpd listen=NO |
完成後請重新啟動 xinetd:
| suse:~ # rcxinetd restart Shutting down xinetd: done Starting INET services. (xinetd) done |
接著就開始針對相關參數所指定的檔案目錄做相關設定囉:
| 1. 設定登入 FTP 時的顯示訊息: suse:~ # vi /etc/welcomefile ########################################### ########## Welcome to barry's FTP Site ########## ########################################### 2. 設定只有 barry 及 david 登入後,不會被侷限在家目錄下活動: suse:~ # vi /etc/vsftpd.chroot_list barry david 3. 拒絕 mary 及 tina 登入 FTP 站台: suse:~ # vi /etc/ftpusers mary tina # 要讓 /etc/ftpusers 這個檔案產生效用,須確定在 vsftpd.conf 中的 pam_service_name 參數 # 指定為 vsftpd 才行。由於這裡牽涉到 PAM 模組設定的問題,所以就先不提了。 4. 限定 barry 及 david 的最大傳輸速度: suse:~ # mkdir /etc/limitdir suse:~ # vi /etc/limitdir/barry local_max_rate=200000 # david 的做法,也請如法炮製一番。 5. 設定 anonymous 的上傳目錄: suse:~ # mkdir /srv/ftp/upload suse:~ # chown ftp /srv/ftp/upload # 將上傳目錄的擁有者改為 ftp,不然 anonymous 是無法上傳資料的噢。 |
















