FTP採用客戶端/伺服器模型,客戶端和伺服器使用TCP建立連線。
在伺服器端,FTP有兩個預分配的的埠號,分別為20和21.其中,埠20用於傳送和接受FTP資料(ASCII碼或二進位制檔案),該資料埠只在傳輸資料是開啟,並在傳輸結束時關閉。埠21用於傳送和接受FTP的控制資訊,FTP伺服器通過偵聽這個埠來判斷是否有ftp客戶端的連線請求,FTP會話建立後,埠21的連線在會話期間始終保持開啟狀態。
在客戶端,當發出請求時動態分配埠號,選擇範圍為1024~65535.當一個FTP會話開始後,客戶端程式開啟一個控制埠(如1038),該端連線到伺服器上的21埠,接受和傳送控制信命令;需要傳輸資料時,客戶端再開啟第二個埠(如1039),連線到伺服器上的20埠。每當開始傳輸檔案時,客戶端程式會開啟一個新的資料埠,在檔案傳輸完畢後,再自動釋放該埠。
該命令的語法格式如下所示:
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時,如果沒有在命令列給出伺服器的主機名或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 |
顯示當前目錄 |
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。
#################匿名許可權控制###############
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