FTP 是File Transfer Protocol(檔案傳輸協議)的英文簡稱,而中文簡稱為“文傳協議”。用於Internet上的控制檔案的雙向傳輸。同時,它也是一個應用程式(Application)。基於不同的作業系統有不同的FTP應用程式,而所有這些應用程式都遵守同一種協議以傳輸檔案。在FTP的使用當中,使用者經常遇到兩個概念:"下載"(Download)和"上傳"(Upload)。"下載"檔案就是從遠端主機拷貝檔案至自己的計算機上;"上傳"檔案就是將檔案從自己的計算機中拷貝至遠端主機上。用Internet語言來說,使用者可通過客戶機程式向(從)遠端主機上傳(下載)檔案
 
ftp 概述

FTP採用客戶端/伺服器模型,客戶端和伺服器使用TCP建立連線。

在伺服器端,FTP有兩個預分配的的埠號,分別為20和21.其中,埠20用於傳送和接受FTP資料(ASCII碼或二進位制檔案),該資料埠只在傳輸資料是開啟,並在傳輸結束時關閉。埠21用於傳送和接受FTP的控制資訊,FTP伺服器通過偵聽這個埠來判斷是否有ftp客戶端的連線請求,FTP會話建立後,埠21的連線在會話期間始終保持開啟狀態。

在客戶端,當發出請求時動態分配埠號,選擇範圍為1024~65535.當一個FTP會話開始後,客戶端程式開啟一個控制埠(如1038),該端連線到伺服器上的21埠,接受和傳送控制信命令;需要傳輸資料時,客戶端再開啟第二個埠(如1039),連線到伺服器上的20埠。每當開始傳輸檔案時,客戶端程式會開啟一個新的資料埠,在檔案傳輸完畢後,再自動釋放該埠。

ftp 語法

該命令的語法格式如下所示:

ftp [-v] [-d] [--i] [-n] [-g] [-k realm] [-x] [-u] [host]

ftp命令主要選項說明

選項

說明

-d

啟動除錯模式

-u

關閉自動認證

-e

不記錄歷史指令

-i

關閉互動模式

-x

在成功認證之後,協商金鑰

-n

關閉自動登入功能

-p

傳輸檔案模式為被動模式

-v

程式執行時,顯示詳細的處理資訊

-k realm

使用Kerberos v4認證時,從realm中得到資訊

host

FTP伺服器的主機名/IP地址

-g

取消全域性檔名

ftp 內部命令

在客戶端訪問FTP時,如果沒有在命令列給出伺服器的主機名或IP,則客戶端將出現“ftp>”提示符,等待使用者輸入ftp內部命令。

常見ftp內部命令及其說明

內部命令

說明

ls

顯示伺服器上的目錄

get

從伺服器下載指定檔案到客戶端

put

從客戶端傳送指定檔案到伺服器

open

連線ftp伺服器

quit

斷開連線並退出ftp伺服器

cd directory

改變伺服器的當前目錄為directory

lcd directory

改變本地的當前目錄為directory

bye

退出ftp命令狀態

ascii

設定檔案傳輸方式為ASCII模式

binary

設定檔案傳輸方式為二進位制模式

執行本地主機命令

cd

切換遠端ftp伺服器上的目錄

cdup

上一層目錄

close

在不結束ftp程序的情況下,關閉與ftp伺服器的連線

delete

刪除遠端ftp伺服器上的檔案

get

下載

hash

顯示#表示下載進度

mdelete

刪除檔案,模糊匹配

mget

下載檔案,模糊匹配

mput

上傳檔案,模糊匹配

mkdir

在遠端ftp伺服器上,建立資料夾

newer

下載時,檢測是不是新檔案

prompt

關閉互動模式

put

上傳

pwd

顯示當前目錄

 
ftp使用的內部命令如下(中括號表示可選項):

  1.![cmd[args]]:在本地機中執行互動shell,exit回到ftp環境,如:!ls*.zip.

  2.$ macro-ame[args]:執行巨集定義macro-name.

  3.account[password]:提供登入遠端系統成功後訪問系統資源所需的補充口令。

  4.append local-file[remote-file]:將本地檔案追加到遠端系統主機,若未指定遠端系統檔名,則使用本地檔名。

  5.ascii:使用ascii型別傳輸方式。

  6.bell:每個命令執行完畢後計算機響鈴一次。

  7.bin:使用二進位制檔案傳輸方式。

  8.bye:退出ftp會話過程。

  9.case:在使用mget時,將遠端主機檔名中的大寫轉為小寫字母。

  10.cd remote-dir:進入遠端主機目錄。

  11.cdup:進入遠端主機目錄的父目錄。

  12.chmod mode file-name:將遠端主機檔案file-name的存取方式設定為mode,如:chmod 777 a.out。

  13.close:中斷與遠端伺服器的ftp會話(與open對應)。

  14.cr:使用asscii方式傳輸檔案時,將回車換行轉換為回行。

  15.delete remote-file:刪除遠端主機檔案。

  16.debug[debug-value]:設定除錯方式,顯示傳送至遠端主機的每條命令,如:deb up 3,若設為0,表示取消debug。

  17.dir[remote-dir][local-file]:顯示遠端主機目錄,並將結果存入本地檔案local-file。

  18.disconnection:同close。

  19.form format:將檔案傳輸方式設定為format,預設為file方式。

  20.get remote-file[local-file]:將遠端主機的檔案remote-file傳至本地硬碟的local-file。

  21.glob:設定mdelete,mget,mput的檔名擴充套件,預設時不擴充套件檔名,同命令行的-g引數。

  22.hash:每傳輸1024位元組,顯示一個hash符號(#)。

  23.help[cmd]:顯示ftp內部命令cmd的幫助資訊,如:help get。

  24.idle[seconds]:將遠端伺服器的休眠計時器設為[seconds]秒。

  25.image:設定二進位制傳輸方式(同binary)。

  26.lcd[dir]:將本地工作目錄切換至dir。

  27.ls[remote-dir][local-file]:顯示遠端目錄remote-dir,並存入本地檔案local-file。

  28.macdef macro-name:定義一個巨集,遇到macdef下的空行時,巨集定義結束。

  29.mdelete[remote-file]:刪除遠端主機檔案。

  30.mdir remote-files local-file:與dir類似,但可指定多個遠端檔案,如:mdir *.o.*.zipoutfile

  31.mget remote-files:傳輸多個遠端檔案。

  32.mkdir dir-name:在遠端主機中建一目錄。

  33.mls remote-file local-file:同nlist,但可指定多個檔名。

  34.mode[modename]:將檔案傳輸方式設定為modename,預設為stream方式。

  35.modtime file-name:顯示遠端主機檔案的最後修改時間。

  36.mput local-file:將多個檔案傳輸至遠端主機。

  37.newer file-name:如果遠端機中file-name的修改時間比本地硬碟同名檔案的時間更近,則重傳該檔案。

  38.nlist[remote-dir][local-file]:顯示遠端主機目錄的檔案清單,並存入本地硬碟的local-file。

  39.nmap[inpattern outpattern]:設定檔名對映機制,使得檔案傳輸時,檔案中的某些字元相互轉換,如:nmap $1.$2.$3[$1,$2].[$2,$3],則傳輸檔案a1.a2.a3時,檔名變為a1,a2。該命令特別適用於遠端主機為非UNIX機的情況。

  40.ntrans[inchars[outchars]]:設定檔名字元的翻譯機制,如ntrans 1R,則檔名LLL將變為RRR。

  41.open host[port]:建立指定ftp伺服器連線,可指定連線埠。

  42.passive:進入被動傳輸方式。

  43.prompt:設定多個檔案傳輸時的互動提示。

  44.proxy ftp-cmd:在次要控制連線中,執行一條ftp命令,該命令允許連線兩個ftp伺服器,以在兩個伺服器間傳輸檔案。第一條ftp命令必須為open,以首先建立兩個伺服器間的連線。

  45.put local-file[remote-file]:將本地檔案local-file傳送至遠端主機。

  46.pwd:顯示遠端主機的當前工作目錄。

  47.quit:同bye,退出ftp會話。

  48.quote arg1,arg2...:將引數逐字發至遠端ftp伺服器,如:quote syst.

  49.recv remote-file[local-file]:同get。

  50.reget remote-file[local-file]:類似於get,但若local-file存在,則從上次傳輸中斷處續傳。

  51.rhelp[cmd-name]:請求獲得遠端主機的幫助。

  52.rstatus[file-name]:若未指定檔名,則顯示遠端主機的狀態,否則顯示檔案狀態。

  53.rename[from][to]:更改遠端主機檔名。

  54.reset:清除回答佇列。

  55.restart marker:從指定的標誌marker處,重新開始get或put,如:restart 130。

  56.rmdir dir-name:刪除遠端主機目錄。

  57.runique:設定檔名唯一性儲存,若檔案存在,則在原檔案後加字尾..1,.2等。

  58.send local-file[remote-file]:同put。

  59.sendport:設定PORT命令的使用。

  60.site arg1,arg2...:將引數作為SITE命令逐字傳送至遠端ftp主機。

  61.size file-name:顯示遠端主機檔案大小,如:site idle 7200。

  62.status:顯示當前ftp狀態。

  63.struct[struct-name]:將檔案傳輸結構設定為struct-name,預設時使用stream結構。

  64.sunique:將遠端主機檔名儲存設定為唯一(與runique對應)。

  65.system:顯示遠端主機的作業系統型別。

  66.tenex:將檔案傳輸型別設定為TENEX機的所需的型別。

  67.tick:設定傳輸時的位元組計數器。

  68.trace:設定包跟蹤。

  69.type[type-name]:設定檔案傳輸型別為type-name,預設為ascii,如:type binary,設定二進位制傳輸方式。

  70.umask[newmask]:將遠端伺服器的預設umask設定為newmask,如:umask 3。

  71.user user-name[password][account]:向遠端主機表明自己的身份,需要口令時,必須輸入口令,如:user anonymous my@email。

  72.verbose:同命令行的-v引數,即設定詳盡報告方式,ftp伺服器的所有響應都將顯示給使用者,預設為on.

  73.?[cmd]:同help。

 
 
ftp 配置
 

#################匿名許可權控制###############

anonymous_enable=YES   #是否啟用匿名使用者
no_anon_password=YES   #匿名使用者login時不詢問口令

下面這四個主要語句控制這檔案和資料夾的上傳、下載、建立、刪除和重新命名。
anon_upload_enable=(yes/no);  #控制匿名使用者對檔案(非目錄)上傳許可權。
anon_world_readable_only=(yes/no); #控制匿名使用者對檔案的下載許可權
anon_mkdir_write_enable=(yes/no); #控制匿名使用者對資料夾的建立許可權
anon_other_write_enable=(yes/no); #控制匿名使用者對檔案和資料夾的刪除和重新命名

注:匿名使用者下載是使用的是nobody這個使用者,所以相應的O這個位置要有R許可權才能被下載。若想讓匿名使用者能上傳和刪除許可權,必需設定

write_enable=YES #全域性設定,是否容許寫入(無論是匿名使用者還是本地使用者,若要啟用上傳許可權的話,就要開啟他)
anon_root=(none) #匿名使用者主目錄
anon_max_rate=(0) #匿名使用者速度限制
anon_umask=(077) #匿名使用者上傳檔案時有掩碼(若想讓匿名使用者上傳的檔案能直接被匿名下載,就這設定這裡為073)
chown_uploads=YES #所有匿名上傳的檔案的所屬使用者將會被更改成chown_username
chown_username=whoever #匿名上傳檔案所屬使用者名稱

#################本地使用者許可權控制###############

write_enable=YES #可以上傳(全域性控制) 刪除,重新命名
local_umask=022  #本地使用者上傳檔案的umask
userlist_enable=YES #限制了這裡的使用者不能訪問
local_root  #設定一個本地使用者登入後進入到的目錄
user_config_dir  #設定使用者的單獨配置檔案,用哪個帳戶登陸就用哪個帳戶命名
download_enable  #限制使用者的下載許可權

chown_uploads=YES #所有匿名上傳的檔案的所屬使用者將會被更改成chown_username
chown_username=whoever #匿名上傳檔案所屬使用者名稱

chroot_list_enable=YES #如果啟動這項功能,則所有列在chroot_list_file之中的使用者不能更改根目錄
chroot_list_file=/etc/vsftpd/chroot_list #指定限制的使用者檔案

user_config_dir= #後面跟存放配置檔案的目錄。用來實現不同使用者不同許可權。
   #在vsftpd.conf檔案中加入這一句,
   #在相應的目錄裡面,為每個使用者建立自己的配置檔案,用來實現不同的許可權

可以通過以下三條配置檔案來控制使用者切換目錄。
chroot_list_enable=YES/NO   #設定是否啟用chroot_list_file配置項指定的使用者列表檔案。
      #如果啟動這項功能,則所有列在chroot_list_file之中的使用者不能更改根目錄 .預設值為yes。

chroot_list_file=/etc/vsftpd/chroot_list #指出被鎖定在自家目錄中的使用者的列表檔案。

chroot_list_enable=YES
通過與chroot_local_user=YES/NO搭配能實現以下幾種效果:
1、當chroot_list_enable=YES,chroot_local_user=YES時,在/etc/vsftpd.chroot_list檔案中列出的使用者,可以切換到其他目錄;未在檔案中列出的使用者,不能切換到其他目錄。
2、當chroot_list_enable=YES,chroot_local_user=NO時,在/etc/vsftpd.chroot_list檔案中列出的使用者,不能切換到其他目錄;未在檔案中列出的使用者,可以切換到其他目錄。
3、當chroot_list_enable=NO,chroot_local_user=YES時,所有的使用者均不能切換到其他目錄。
4、當chroot_list_enable=NO,chroot_local_user=NO時,所有的使用者均可以切換到其他目錄。

下面是個例項,希望對大家有用:

1、只能上傳。不能下載、刪除、重新命名。
cmds_allowed=FEAT,REST,CWD,LIST,MDTM,MKD,NLST,PASS,PASV,PORT,PWD,QUIT,RMD,SIZE,STOR,TYPE,USER,ACCT,APPE,CDUP,HELP,MODE,NOOP,REIN,STAT,STOU,STRU,SYST

對於引數的詳細的解釋
cmds_allowed=ABOR,ACCT,APPE,CWD,CDUP,DELE,HELP,LIST,MODE,MDTM,MKD,NOOP,NLST,PASS,PASV,PORT,PWD,QUIT,REIN,RETR,RMD,RNFR,RNTO,SITE,SIZE,STOR,STAT,STOU,STRU,SYST,TYPE,USER

CWD - change working directory 更改目錄
DELE - delete a remote file 刪除檔案
LIST - list remote files 列目錄
MKD - make a remote directory 新建資料夾
NLST - name list of remote directory
PWD - print working directory 顯示當前工作目錄
RETR - retrieve a remote file 下載檔案
RMD - remove a remote directory 刪除目錄
RNFR - rename from 重新命名
RNTO - rename to 重新命名
STOR - store a file on the remote host 上傳檔案

# ABOR - abort a file transfer 取消檔案傳輸
# CWD - change working directory 更改目錄
# DELE - delete a remote file 刪除檔案
# LIST - list remote files 列目錄
# MDTM - return the modification time of a file 返回檔案的更新時間
# MKD - make a remote directory 新建資料夾
# NLST - name list of remote directory
# PASS - send password
# PASV - enter passive mode
# PORT - open a data port 開啟一個傳輸埠
# PWD - print working directory 顯示當前工作目錄
# QUIT - terminate the connection 退出
# RETR - retrieve a remote file 下載檔案
# RMD - remove a remote directory
# RNFR - rename from
# RNTO - rename to
# SITE - site-specific commands
# SIZE - return the size of a file 返回檔案大小
# STOR - store a file on the remote host 上傳檔案
# TYPE - set transfer type
# USER - send username

# less common commands:

# ACCT* - send account information
# APPE - append to a remote file
# CDUP - CWD to the parent of the current directory
# HELP - return help on using the server
# MODE - set transfer mode
# NOOP - do nothing
# REIN* - reinitialize the connection
# STAT - return server status
# STOU - store a file uniquely
# STRU - set file transfer structure
# SYST - return system type

2、只能下載。不能上傳、刪除、重新命名。write_enable=NO
3、只能上傳、刪除、重新命名。不能下載。download_enable=NO

4、只能下載、刪除、重新命名。不能上傳。
cmds_allowed=FEAT,REST,CWD,LIST,MDTM,MKD,NLST,PASS,PASV,PORT,PWD,QUIT,RMD,RNFR,RNTO,RETR,DELE,SIZE,TYPE,USER,ACCT,APPE,CDUP,HELP,MODE,NOOP,REIN,STAT,STOU,STRU,SYST

###################虛擬使用者設定###################

虛擬使用者使用PAM認證方式。
pam_service_name=vsftpd  #設定PAM使用的名稱,預設值為/etc/pam.d/vsftpd。

check_shell=YES   #(注意:僅在沒有pam驗證版本時有用,是否檢查使用者有一個有效的shell來登入 )
guest_enable= YES/NO  #啟用虛擬使用者。預設值為NO。
guest_username=ftp  #這裡用來對映虛擬使用者。預設值為ftp。
virtual_use_local_privs=YES/NO #當該引數啟用(YES)時,虛擬使用者使用與本地使用者相同的許可權。
    #當此引數關閉(NO)時,虛擬使用者使用與匿名使用者相同的許可權。預設情況下此引數是關閉的(NO)。

###################訪問控制設定###################

兩種控制方式:一種控制主機訪問,另一種控制使用者訪問。

1、控制主機訪問:
tcp_wrappers=YES/NO

設定vsftpd是否與tcp wrapper相結合來進行主機的訪問控制。預設值為YES。如果啟用,則vsftpd伺服器會檢查/etc/hosts.allow 和/etc/hosts.deny 中的設定,來決定請求連線的主機,是否允許訪問該FTP伺服器。這兩個檔案可以起到簡易的防火牆功能。

比如:若要僅允許192.168.10.1—192.168.10.254的使用者可以連線FTP伺服器,

則在
/etc/hosts.allow
/etc/hosts.deny
檔案中新增以下內容:

其格式如下:

限制的服務:ip(網段)
vsftpd:192.168.1.
vsftpd:192.168.1.12
vsftpd:192.168.1.0/255.255.255.0這裡不能寫成192.168.1.0/24

2、控制使用者訪問:

vsftpd.ftpusers  #用於儲存不允許進行FTP登入的本地使用者帳號。就是vsftp使用者的黑名單

vsftpd.user_list

(1)設定禁止vsftpd.user_list檔案中的使用者登入:要在主配置檔案vsftpd.conf中修改如下兩項,
userlist_enable=yes
userlist_deny=yes
說明:配置完以後,除了vsftpd.ftpusers檔案和vsftpd.user_list檔案中記錄的ftp使用者不能登入vsftp服務以外,其他的ftp使用者都可以登入。

(2)設定只允許vsftpd.user_list檔案中的使用者登入;同樣的道理要把主配置檔案vsftpd.conf 中的語句修改如下兩項: 
userlist_enable=yes
userlist_deny=no
 說明:配置完以後,只允許vsftpd.user_list檔案中記錄的ftp使用者能登入vsftp服務,其他的ftp使用者都不可以登入。

###################超時設定##################

idle_session_timeout=600 #空閒連線超時
data_connection_timeout=120 #資料傳輸超時
ACCEPT_TIMEOUT=60  #PAVS請求超時
connect_timeout=60  #PROT模式連線超時

################伺服器功能選項###############

xferlog_enable=YES    #開啟日記功能
xferlog_std_format=YES   #使用標準格式
log_ftp_protocol=NO    #當xferlog_std_format關閉且本選項開啟時,記錄所有ftp請求和回覆,當除錯比較有用.
pasv_enable=YES    #允許使用pasv模式
pasv_promiscuous+NO    #關閉安全檢查,小心呀.
port_enable=YES    #允許使用port模式
prot_promiscuous    #關閉安全檢查
tcp_wrappers=YES    #開啟tcp_wrappers支援
pam_service_name=vsftpd   #定義PAM 所使用的名稱,預設為vsftpd。
nopriv_user=nobody    #當伺服器運行於最底層時使用的使用者名稱
pasv_address=(none)    #使vsftpd在pasv命令回覆時跳轉到指定的IP地址.(伺服器聯接跳轉?)

#################伺服器效能選項##############
ls_recurse_enable=YES  #是否能使用ls -R命令以防止浪費大量的伺服器資源
one_process_model  #是否使用單程序模式
listen=YES   繫結到listen_port指定的埠,既然都綁定了也就是每時都開著的,就是那個什麼standalone模式
text_userdb_names=NO   #當使用者登入後使用ls -al 之類的指令查詢該檔案的管理權時,預設會出現擁有者的UID,而不是該檔案擁有者的名     #稱。若是希望出現擁有者的名稱,則將此功能開啟。

use_localtime=NO    #顯示目錄清單時是用本地時間還是GMT時間,可以通過mdtm命令來達到一樣的效果
#use_sendfile=YES    #測試平臺優化

################資訊類設定################

ftpd_banner=welcome to FTP .  #login時顯示歡迎資訊.如果設定了banner_file則此設定無效
dirmessage_enable=YES   #允許為目錄配置顯示資訊,顯示每個目錄下面的message_file檔案的內容
setproctitle_enable=YES   #顯示會話狀態資訊,關!

############## 檔案定義 ##################

chroot_list_file=/etc/vsftpd/vsftpd.chroot_list  #定義不能更改使用者主目錄的檔案
userlist_file=/etc/vsftpd/vsftpd.user_list  #定義限制/允許使用者登入的檔案
banner_file=/etc/vsftpd/banner    #定義登入資訊檔案的位置
banned_email_file=/etc/vsftpd.banned_emails  #禁止使用的匿名使用者登陸時作為密碼的電子郵件地址
xferlog_file=/var/log/vsftpd.log   #日誌檔案位置
message_file=.message     #目錄資訊檔案

############## 目錄定義 #################

user_config_dir=/etc/vsftpd/userconf  #定義使用者配置檔案的目錄
local_root=webdisk    #此項設定每個使用者登陸後其根目錄為/home/username/webdisk
       #定義本地使用者登陸的根目錄,注意定義根目錄可以是相對路徑也可以是絕對路徑.相對路徑是針對使用者家目錄      #來說的.
anon_root=/var/ftp     #匿名使用者登陸後的根目錄

#############使用者連線選項#################

max_clients=100    #可接受的最大client數目
max_per_ip=5    #每個ip的最大client數目
connect_from_port_20=YES   #使用標準的20埠來連線ftp
listen_address=192.168.0.2   #繫結到某個IP,其它IP不能訪問
listen_port=2121    #繫結到某個埠
ftp_data_port=2020    #資料傳輸埠
pasv_max_port=0    #pasv連線模式時可以使用port 範圍的上界,0 表示任意。預設值為0。
pasv_min_port=0    #pasv連線模式時可以使用port 範圍的下界,0 表示任意。預設值為0。

##############資料傳輸選項#################

anon_max_rate=51200  #匿名使用者的傳輸比率(b/s)
local_max_rate=5120000  #本地使用者的傳輸比率(b/s)

##############安全選項#################

Idle_session_timeout=600 #(使用者會話空閒後10分鐘)
Data_connection_timeout=120 #(將資料連線空閒2分鐘斷)
Accept_timeout=60  #(將客戶端空閒1分鐘後斷)
Connect_timeout=60  #(中斷1分鐘後又重新連線)
Local_max_rate=50000  #(本地使用者傳輸率50K)
Anon_max_rate=30000  # (匿名使用者傳輸率30K)

Pasv_min_port=50000  # (將客戶端的資料連線埠改在
Pasv_max_port=60000  #50000—60000之間)

Max_clients=200   #(FTP的最大連線數)
Max_per_ip=4   #(每IP的最大連線數)
Listen_port=5555  #(從5555埠進行資料連線)

以上如果有什麼不全或錯誤的地方,請大家與我聯絡,我及時改進,謝謝

【案例1】建立基於虛擬使用者的FTP伺服器,並根據以下要求配置FTP伺服器。

(1)配置FTP匿名使用者的主目錄為/var/ftp/anon。下載頻寬限制為100kB/s

(2)建立一個名為abc,口令為xyz的FTP賬戶。下載頻寬限制為500kB/s。

(3)設定FTP伺服器同時登入到FTP伺服器的最大連結數為100;每個IP最大連結數為3;使用者空閒時間超過限值為5分鐘。

mkdir /var/fpt/anon

useradd abc
passwd abc

vim /etc/vsftpd/vsftpd.conf

主要內容如下

anonymous_enable=YES
anon_root=/var/ftp/anon
anon_max_rate=100000
# Uncomment this to allow local users to log in.
local_enable=YES
local_max_rate=500000
max_clients=100
max_per_ip=3
connect_timeout=300

以上是本地的LOCAL使用者

下面是用虛擬使用者來實現

vim /etc/vsftpd/vuser

內容如下

tom
123

生成資料庫檔案
db_load -T -t hash -f /etc/vsftpd/vuser /etc/vsftpd/vuser.db
chmod 600 /etc/vsftpd/vuser.db

vim /etc/pam.d/vsftpd

註釋掉原來的內容

然後加入

auth        required    pam_userdb.so   db=/etc/vsftpd/vuser
account     required    pam_userdb.so   db=/etc/vsftpd/vuser

最後編輯VSFTPD.CONF加入下面兩句

guest_enable=YES
guest_username=abc

大家可以自行測試。

到此,案例一完成

【案例2】
1、新建一分割槽,10G空間,ext3 檔案系統,掛在到 /ftp下,作為 ftp伺服器資料存放地方。

2、四個部門:dep1,dep2, dep3, dep4,分別對應目錄 /ftp/dep1,/ftp/dep2,/ftp/dep3,/ftp/dep4。另外設定一個公共目錄 /ftp/public。

3、五個使用者:admin,user1,user2,user3,user4。其中:user 1/2/3/4分別對應部門dep 1/2/3/4,他們只能訪問自己所屬部門的目錄和public目錄。如:user1只能訪問dep1和public目錄,不能訪問其它目錄。admin為管理員使用者,可以訪問 ftp 伺服器上的任何目錄。

4、使用者訪問許可權限制:user1/2/3/4在所能訪問的目錄,具有上傳檔案、下載檔案的功能,但是不能夠刪除檔案、更改檔案許可權等功能。admin管理員使用者對所有目錄具有檔案上傳、下載、刪除、許可權更改等功能。

5、對每個部門定製一個 quota,設定該賬戶的檔案配額為1000個;磁碟配額為2G。

6、匿名使用者不能訪問。

第一、增加一塊硬碟,然後分割槽,把分割槽掛載情況寫入/etc/fstab

# fdisk /dev/hdb
# mkfs.ext3 /dev/hdb1
# mkidr /ftp
# mount /dev/hdb1 /ftp -o usrquota,grpquota

# vim /etc/fstab
加入下面一句

/dev/hdb1               /ftp                    ext3    defaults,usrquota,grpquota      0 0

第二、建立使用者組和使用者和相應的資料夾並更改許可權,達到題目要求

# groupadd dep1
# groupadd dep2
# groupadd dep3
# groupadd dep4
# groupadd boobooke

# usradd  -G dep1,boobooke user1
# usradd  -G dep2,boobooke user2
# usradd  -G dep3,boobooke user3
# usradd  -G dep4,boobooke user4
# usradd  -G dep1,dep2,dep3,dep4,boobooke admin

# passwd user1
# passwd user2
# passwd user3
# passwd user4
# passwd admin

# mkdir /ftp/dep1
# mkdir /ftp/dep2
# mkdir /ftp/dep3
# mkdir /ftp/dep4
# mkdir /ftp/public

# chown uesr1:dep1 /ftp/dep1
# chown uesr2:dep2 /ftp/dep2
# chown uesr3:dep3 /ftp/dep3
# chown uesr4:dep4 /ftp/dep4
# chown admin:boobooke /ftp/public

# chmod 770 /ftp/dep1
# chmod 770 /ftp/dep2
# chmod 770 /ftp/dep3
# chmod 770 /ftp/dep4
# chmod 770 /ftp/pubic

最終結果如下

-rw------- 1 root  root      8192 Jul 26 11:46 aquota.group
-rw------- 1 root  root      7168 Jul 26 11:46 aquota.user
drwxrwx--- 2 user1 dep1      4096 Jul 25 20:47 dep1
drwxrwx--- 2 user2 dep2      4096 Jul 25 20:47 dep2
drwxrwx--- 2 user3 dep3      4096 Jul 25 20:47 dep3
drwxrwx--- 2 user4 dep4      4096 Jul 25 20:47 dep4
drwx------ 2 root  root     16384 Jul 25 20:44 lost+found
drwxrwx--- 2 admin boobooke  4096 Jul 25 20:48 public

第三、建立quota,配置磁碟配額

#mount /dev/hdb1 /ftp -o usrquota,grpquota
# quotacheck -cuvg /dev/sdb1
# quotaon -a
# edquota -g dep1

Disk quotas for group dep1 (gid 503):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/hdb1                         0    1024000    2048000          0      500     1000

# edquota -g -p dep1 dep2 dep3 dep4(-u -g將源使用者組和群組的quota設定套用至其他使用者或群組。)

第四、編輯VSFTPD.CONF

# vim /etc/vsftpd/vsftpd.conf

anonymous_enable=NO

加入
local_root=/ftp
user_config_dir=/etc/vsftpd/ftp_config_dir

開啟chroot

chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

第五、建立使用者的獨立檔案

# mkdir /etc/vsftpd/ftp_config_dir
# vim /etc/vsftpd/ftp_config_dir/user1

cmds_allowed=ABOR,ACCT,APPE,CWD,CDUP,HELP,LIST,MODE,MDTM,NOOP,NLST,PASS,PASV,PORT,PWD,QUIT,REIN,RETR,SITE,SIZE,STOR,STAT,STOU,STRU,SYST,TYPE,USER

# cp /etc/vsftpd/ftp_config_dir/user1 /etc/vsftpd/ftp_config_dir/user2
# cp /etc/vsftpd/ftp_config_dir/user1 /etc/vsftpd/ftp_config_dir/user3
# cp /etc/vsftpd/ftp_config_dir/user1 /etc/vsftpd/ftp_config_dir/user4