FTP協議介紹:
FTP協議是一種檔案傳輸協議,作用在應用層,功能是實作服務器和客戶端之間進行的檔案傳輸(C/S架構),傳輸時使用的是TCP連接的明文傳輸(命令通道,資料流通道),FTP協議需要兩次TCP握手操作,才能進行連接,
命令通道:客戶端會隨機獲取一個大于1024以上的埠來與FTP服務器端的21號埠來進行連接,這個程序需要三次握手,實作連接后客戶端便可以通過這個連接來對FTP服務器執行命令,查詢檔案名、下載、上傳等命令都是利用這個通道來執行的,
而FTP有兩種傳輸方式:
- 服務器主動的post模式
- 服務器被動的pasv模式
FTP作業方式:
POST模式:
通知FTP服務器端使用主動連接且告知連接的埠號
FTP服務器的埠21號主要用在命令通道的執行,客戶端在需要資料的情況下,會告知服務器端要用什么方式來連接,如果是主動連接,客戶端會先隨機啟用一個埠,且通過命令通道告知FTP服務器這兩個資訊,并等待FTP服務器的連接,
FTP服務器主動向客戶端連接
FTP服務器由命令通道了解客戶端的需求后,會主動地由port 20向客戶端的資料埠連接,這個連接也會經過三次握手,此時FTP的客戶端與服務器端會建立兩個通道連接,分別用在命令通道與資料通道,而默認FTP服務器端使用的主動連接埠就是port 20,
資料傳輸通道是在有資料傳輸的行為時才會建立的通道,并不是一開始連接到FTP服務器就立刻建立的通道,
port 21主要接收來自客戶端的主動連接,port 20則為FTP服務器主動連接至客戶端,
PASV模式:
客戶端選擇被動式連接模式
客戶端通過命令通道發出被動式連接要求,并等待服務器的回應,
FTP服務器啟動資料埠,并通知客戶端連接
FTP服務器能夠處理被動式連接,此時FTP服務器會先啟動一個監聽埠,這個埠號碼可以是隨機的,也可以自定義某一范圍的埠,然后FTP服務器會通過命令通道port21告知客戶端這個已經啟動的埠port pasv,并等待客戶端的連接,
客戶端隨機取用大于1024的埠進行連接
然后客戶端會隨機取用一個大于1024的埠號來進行對主機的port pasv連接,如果一切都沒有問題的話,那么FTP資料就可以通過客戶端的隨機埠和服務端的port pasv來傳送了,
FTP在Linux的配置:
linux上安裝ftp組件:
//vsftpd版本的ftp雖然功能少但是安全
[root@localhost ~]# yum install vsftpd -y
//組態檔/etc/vsftpd/vsftpd.conf
//下載時產生的檔案
[root@lxb ~]# rpm -qc vsftpd
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf
//此時會產生幾個組態檔:
[root@localhost vsftpd]# ls
ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh
//vsftpd.conf為主組態檔
//user_list的生效與vsftpd.conf內的userlist_enable和userlist_deny配置有關
//userlist_enable=YES 是否借助vsftpd的阻擋機制來處理某些不受歡迎的賬號
FTP的主組態檔內容:
-
①匿名登錄:
//FTP支持三種登錄方式:匿名用戶,用戶用戶,虛擬用戶
[root@localhost vsftpd]# vim vsftpd.conf
//匿名用戶配置
//匿名登錄配置
anonymous_enable=YES/NO 是否允許匿名用戶登錄vsftpd主機
no_anon_password=YES/NO 匿名登入時,是否詢問密碼
ftp_username=ftp 定義匿名登入的使用者名稱
//匿名用戶操作配置
anon_upload_enable=YES/NO 是否允許匿名用戶上傳檔案
anon_world_readable_only=YES/NO 是否允許匿名登入者下載可閱讀的檔案
anon_mkdir_write_enable=YES/NO 是否允許匿名登入者有新增目錄的權限
//匿名用戶權限配置
anon_other_write_enable=YES/NO 是否允許匿名登入者洗掉或者重命名
chown_uploads=YES/NO 是否改變匿名用戶上傳檔案(非目錄)的屬主
chown_username=username 匿名用戶上傳檔案(非目錄)的屬主名
anon_umask=077 匿名登入者新增或上傳檔案時的umask 值
write_enable=YES/NO 是否允許登陸用戶有寫權限,屬于全域設定,默認值為YES
//登錄目錄權限
anon_root=/var/ftp !!!使用匿名登入時,所登入的目錄,默認值為/var/ftp
//注意ftp目錄不能是777的權限屬性,即匿名用戶的家目錄不能有777的權限,
//匿名登錄要求:
deny_email_enable=YES/NO
//使用匿名登入,則會要求輸入email address,若輸入的email address 在此檔案內,則不允許進入
banned_email_file=/etc/vsftpd/banner_emails
//此檔案用來輸入email address,只有在deny_email_enable=YES時,才會使用到此檔案
-
②用戶登錄
//本地用戶設定
local_enable=YES/NO 是否允許本地用戶登入
local_root=/home/username 本地用戶登入的默認目錄
write_enable=YES/NO 是否允許登陸用戶有寫權限
local_umask=022 本地用戶新增檔案時的umask值
file_open_mode=0755 本地用戶上傳檔案后的檔案權限,與chmod所使用的數值相同
-
③虛擬登錄
-
虛擬用戶的配置
虛擬用戶配置在 /etc/vsftpd/vsftpd.conf
guest_enable=YES
guest_username=lxb
virtual_use_local_privs=YES
pam_service_name=ftppam
//virtual_use_local_privs=YES
//表示本地虛擬用戶特權開啟表示和本地用戶訪問時的權限一樣,如果為NO表示虛擬用戶和匿名用戶是相同的權限
//pam_service_name= ftppam
//設定PAM認證模塊名稱為 ftppam
-
虛擬用戶登錄檔案創建
//在etc/vsftpd下創建一個檔案來存放虛擬登錄檔案
[root@localhost vsftpd]# vim vitualuserlist
vuser1
vuser1
vuser2
vuser2
-
虛擬用戶檔案轉化為資料庫
//此時將vuserlist的檔案轉化為資料庫檔案vitualuserlist.ab
db_load -T -t hash -f /etc/vsftpd/vitualuserlist vitualuserlist.ab
//此時查看是否產生vuserlist.db這個檔案
[root@localhost vsftpd]# ls
1 ftpusers user_list vsftpd_conf_migrate.sh vitualuserlist.db
chroot_list_file message vsftpd.conf vitualuserlist
-
配置虛擬用戶的PAM項
//此時進入/etc/pam.d目錄中,查看是否存在ftppam這個檔案(前面配置的)
//此時配置 ftppam
[root@localhost pam.d]# vim ftppam
auth required pam_userdb.so db=/etc/vsftpd/vitualuserlist
account required pam_userdb.so db=/etc/vsftpd/vitualuserlist
//auth 對用戶的身份識別
//account 對賬戶的屬性檢查
//required 一票否決,必須驗證成功才能登陸
//pam_userdb.so 具體使用模塊
//db 引數
-
④其他項配置
-
歡迎語設定
dirmessage_enable=YES/NO 是否設定歡迎語
message_file=.messag
設定目錄訊息檔案,可將要顯示的資訊寫入該檔案(默認為.messag )
banner_file=/etc/vsftpd/banner 當使用者登入時,會顯示此設定所在的檔案內容
ftpd_banner= XXX 歡迎陳述句
//banner_file是檔案的形式,而ftpd_banner 則是字串的形式
-
控制用戶是否允許切換到上級目錄
配置這個權限時,需要注意寫allow_writeable_chroot=YES,否則未在檔案的用戶無法登陸
- 當chroot_list_enable=YES,chroot_local_user=YES時,在/etc/vsftpd.chroot_list檔案中列出的用戶,可以切換到其他目錄;未在檔案中列出的用戶,不能切換到其他目錄
- 當chroot_list_enable=YES,chroot_local_user=NO時,在/etc/vsftpd.chroot_list檔案中列出的用戶,不能切換到其他目錄;未在檔案中列出的用戶,可以切換到其他目錄
- 當chroot_list_enable=NO,chroot_local_user=YES時,所有的用戶均不能切換到其他目錄
- 當chroot_list_enable=NO,chroot_local_user=NO時,所有的用戶均可以切換到其他目錄
//在默認配置下,本地用戶登入FTP后可以使用cd命令切換到其他目錄
allow_writeable_enable=YES
//啟用allow_writeable_enable, 不然卸載chroot中的用戶無法登錄
chroot_list_file=/etc/vsftpd.chroot_list
//用于指定用戶串列檔案,控制哪些用戶可以切換到用戶家目錄的上級目錄
chroot_local_user=YES/NO
//用于指定用戶串列檔案中的用戶是否允許切換到上級目錄
chroot_list_enable=YES/NO
//設定是否啟用chroot_list_file配置項指定的用戶串列檔案
-
資料傳輸模式設定
FTP在傳輸資料時,可以使用二進制方式,也可以使用ASCII模式來上傳或下載資料,
設定是否啟用ASCII 模式上傳資料,默認值為NO
ascii_upload_enable=YES/NO
設定是否啟用ASCII 模式下載資料,默認值為NO
ascii_download_enable=YES/NO
-
訪問控制設定
兩種控制方式:一種控制主機訪問,另一種控制用戶訪問,
控制主機訪問
設定vsftpd是否與tcpwrapper相結合來進行主機的訪問控制,默認值為YES,如果啟用,則vsftpd服務器會檢查/etc/hosts.allow 和/etc/hosts.deny 中的設定,來決定請求連接的主機,是否允許訪問該FTP服務器,這兩個檔案可以起到簡易的防火墻功能,
比如:若要僅允許192.168.220.1—192.168.220.255用戶可以連接FTP服務器,則在/etc/hosts.allow檔案中添加以下內容:
vsftpd:192.168.220. :allow all:all :deny控制用戶訪問
對于用戶的訪問控制可以通過/etc目錄下的vsftpd.user_list和ftpusers檔案來實作,
控制用戶訪問FTP的檔案,里面寫著用戶名稱,一個用戶名稱一行
userlist_file=/etc/vsftpd.user_list是否啟用vsftpd.user_list檔案
userlist_enable=YES/NO --- 默認為no決定vsftpd.user_list檔案中的用戶是否能夠訪問FTP服務器,若設定為YES,則vsftpd.user_list檔案中的用戶不允許訪問FTP,若設定為NO,則只有vsftpd.user_list檔案中的用戶才能訪問FTP,
userlist_deny=YES/NO --- 默認為yes/etc/vsftpd/ftpusers檔案專門用于定義不允許訪問FTP服務器的用戶串列(注意:如果userlist_enable=YES,userlist_deny=NO,此時如果在vsftpd.user_list和ftpusers中都有某個用戶時,那么這個用戶是不能夠訪問FTP的,即ftpusers的優先級要高),默認情況下vsftpd.user_list和ftpusers,這兩個檔案已經預設定了一些不允許訪問FTP服務器的系統內部賬戶,如果系統沒有這兩個檔案,那么新建這兩個檔案,將用戶添加進去即可,
-
訪問速率設定
設定匿名登入者使用的最大傳輸速度,單位為B/s,0 表示不限制速度,默認值為0
anon_max_rate=0
本地用戶使用的最大傳輸速度,單位為B/s,0 表示不限制速度,預設值為0
local_max_rate=0
-
超時時間設定
設定建立FTP連接的超時時間,單位為秒,默認值為60
accept_timeout=60**
PORT 方式下建立資料連接的超時時間,單位為秒,默認值為60
connect_timeout=60
設定建立FTP資料連接的超時時間,單位為秒,默認值為120
data_connection_timeout=120
設定多長時間不對FTP服務器進行任何操作,則斷開該FTP連接,單位為秒,默認值為300
idle_session_timeout=300
-
日志檔案設定
//總開關為
xferlog_enable= YES/NO
是否啟用上傳/下載日志記錄,如果啟用,則上傳與下載的資訊將被完整紀錄在xferlog_file 所定義的檔案中,默認開啟
xferlog_enable= YES/NO
設定日志檔案名和路徑,默認值為/var/log/vsftpd.log
xferlog_file=/var/log/vsftpd.log
如果啟用,則日志檔案將會寫成xferlog的標準格式,如同wu-ftpd 一般,默認值為no
xferlog_std_format=YES/NO
如果啟用此選項,所有的FTP請求和回應都會被記錄到日志中,默認日志檔案在/var/log/vsftpd.log,啟用此選項時,xferlog_std_format不能被激活,這個選項有助于除錯,默認值為NO
log_ftp_protocol=YES/NO
-
定義用戶組態檔
在vsftpd中,可以通過定義用戶組態檔來實作不同的用戶使用不同的配置,
user_config_dir=/etc/vsftpd/userconf
設定用戶組態檔所在的目錄,當設定了該配置項后,用戶登陸服務器后,系統就會到/etc/vsftpd/userconf目錄下,讀取與當前用戶名相同的檔案,并根據檔案中的配置命令,對當前用戶進行更進一步的配置,
?
例如:定義user_config_dir=/etc/vsftpd/userconf,且主機上有使用者 test1,test2,那么我們就在user_config_dir 的目錄新增檔案名為test1和test2兩個檔案,若是test1登入,則會讀取user_config_dir 下的test1這個檔案內的設定,默認值為無,利用用戶組態檔,可以實作對不同用戶進行訪問速度的控制,在各用戶組態檔中定義local_max_rate=XX,
即可,
舉例:
配置項: user_config_dir=/etc/vsftpd/config
?
cat /etc/vsftpd/config/admini
anon_world_readable_only=NO //關閉只可讀
anon_upload_enable=YES //允許上傳
anon_mkdir_write_enable=YES //允許新建目錄
anon_other_write_enable=YES //允許修改目錄/檔案名稱,洗掉
local_root=/var/www/ruibiaofangxuan/home //家目錄映射
cat /etc/vsftpd/config/ruibiaofangxuan
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
local_root=/var/www/ruibiaofangxuan/home
-
FTP的作業方式與埠設定
FTP有兩種作業方式:PORT FTP(主動模式)和PASV FTP(被動模式)
設定FTP服務器建立連接所監聽的埠,默認值為21
listen_port=21
指定FTP使用20埠進行資料傳輸,默認值為YES
connect_from_port_20=YES/NO
設定在PORT方式下,FTP資料連接使用的埠,默認值為20
ftp_data_port=20
若設定為YES,則使用PASV作業模式;若設定為NO,則使用PORT模式,默認值為YES,即使用PASV作業模式
pasv_enable=YES/NO(YES)
在PASV作業模式下,資料連接可以使用的埠范圍的最大埠,0 表示任意埠,默認值為0
pasv_max_port=0
在PASV作業模式下,資料連接可以使用的埠范圍的最小埠,0 表示任意埠,默認值為0
pasv_min_port=0
-
與連接相關的設定
設定vsftpd服務器是否以standalone模式運行,以standalone模式運行是一種較好的方式,
此時listen必須設定為YES,此為默認值,
建議不要更改,有很多與服務器運行相關的配置命令,需要在此模式下才有效,
若設定為NO,則vsftpd不是以獨立的服務運行,要受到xinetd服務的管控,功能上會受到限制,
listen=YES/NO(YES)
設定vsftpd允許的最大連接數,默認值為0,表示不受限制,若設定為100時,則同時允許有100個連接,超出的將被拒絕,只有在standalone模式運行才有效,
max_clients=0
設定每個IP允許與FTP服務器同時建立連接的數目,默認值為0,表示不受限制,只有在standalone模式運行才有效,
max_per_ip=0
設定FTP服務器在指定的IP地址上偵聽用戶的FTP請求,若不設定,則對服務器系結的所有IP地址進行偵聽,只有在standalone模式運行才有效,
listen_address=IP地址
設定每個與FTP服務器的連接,是否以不同的行程表現出來,默認值為NO,此時使用ps aux |grep ftp只會有一個vsftpd的行程,若設定為YES,則每個連接都會有一個vsftpd的行程,
setproctitle_enable=YES/NO(NO)
-
其他設定
設定在執行ls –la之類的命令時,是顯示UID、GID還是顯示出具體的用戶名和組名
默認值為NO,即以UID和GID方式顯示,若希望顯示用戶名和組名,則設定為YES
text_userdb_names= YES/NO
此功能,則允許登入者使用ls –R(可以查看當前目錄下子目錄中的檔案)這個指令,默認值為NO
ls_recurse_enable=YES/NO
此功能,所有檔案的擁有者與群組都為ftp,也就是使用者登入使用ls -al之類的指令,所看到的檔案擁有者跟群組均為ftp,默認值為no
hide_ids=YES/NO
如果設定為NO,所有的檔案都不能下載到本地,檔案夾不受影響,默認值為YES
download_enable=YES/NO
配置匿名用戶登錄:
[root@lxb vsftpd]# vim vsftpd.conf
anonymous_enable=yes
no_anon_password=no
ftp_username=ftp
//設定允許匿名登錄,免密,登錄id為ftp
//此時在cmd命令下,顯示可以匿名登錄,此時只能輸入ftp才行做到免密登錄
//此時可以發現匿名登錄沒有洗掉和創建權限

而想要設定下載權限,則需要在/etc/vsftpd/vsftpd.conf 進行修改
[root@lxb vsftpd]# vim vsftpd.conf
anon_mkdir_write_enable=yes
//設定虛擬用戶可以下載功能
anon_upload_enable=YES
//設定匿名用戶上傳檔案
anon_mkdir_write_enable=YES
//設定匿名登入者有新增目錄的權限
anon_other_write_enable=YES
//設定匿名登入者洗掉或者重命名
//
chown_uploads=YES/NO 是否改變匿名用戶上傳檔案(非目錄)的屬主
chown_username=ftp 匿名用戶上傳檔案(非目錄)的屬主名
!!!檔案創建需要在虛擬機上存在O的權限
ftp> mkdir ftp_client
550 Create directory operation failed.
ftp> mkdir ftp_client
257 "/ftp_client" created
ftp> delete hello
250 Delete operation successful.
ftp> quit
221 Goodbye.
//在虛擬機上
[root@lxb ftp]# ll
總用量 0
drwx------. 2 ftp ftp 6 12月 24 22:40 ftp_client
drwxr-xr-x. 2 root root 6 4月 22 2021 pub
//檔案的用戶和組為ftp
配置真實用戶登錄:
//配置用戶登錄(此時需要關閉匿名登錄權限)
[root@lxb ~]# vim /etc/vsftpd/vsftpd.conf
# 本地登錄
local_enable=YES
write_enable=yes
allow_writeable_chroot=no
//此時重啟服務,發現需要使用本機存在的用戶,又發現此時可以上下切換檔案夾
//不同于匿名用戶,此時可以切換檔案夾
C:\Users\14202>ftp 192.168.220.234
連接到 192.168.220.234,
220 (vsFTPd 3.0.3)
200 Always in UTF8 mode.
用戶(192.168.220.234:(none)): lxb
331 Please specify the password.
密碼:
230 Login successful.
ftp> cd ..
250 Directory successfully changed.
ftp> cd ..
250 Directory successfully changed.
ftp> cd ..
250 Directory successfully changed.
ftp> pwd
257 "/" is the current directory
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
bin
boot
dev
etc
haha.crt
hehe.key
home
index.html
lib
lib64
media
mima
mnt
nfs
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
www
226 Directory send OK.
ftp: 收到 155 位元組,用時 0.04秒 3.60千位元組/秒,
ftp>
如果需要設定切換檔案夾權限,則需要設定chroot_list_enable和chroot_local_user
此時要注意的是,設定切換目錄權限時,allow_writeable_chroot=YES ,如果寫該項,且chroot的三個重要檔案去掉注釋,則未寫在chroot_list檔案的用戶無法登錄!!!
//配置chroot權限
[root@localhost vsftpd]# vim vsftpd.conf
allow_writeable_chroot=yes
chroot_local_user=yes
chroot_list_enable=yes
chroot_list_file=/etc/vsftpd/chroot_list_file
//然后配置chroot_list_file的用戶
[root@localhost vsftpd]# cat chroot_list_file
lxb
//此時創建一個新用戶
[root@localhost home]# useradd nihao
[root@localhost home]# echo "123" | passwd --stdin nihao
Changing password for user nihao.
passwd: all authentication tokens updated successfully.
//啟動默認上級后,虛擬用戶無法訪問其他目錄
C:\Users\14202>ftp 192.168.220.134
連接到 192.168.220.134,
220 (vsFTPd 3.0.3)
200 Always in UTF8 mode.
用戶(192.168.220.134:(none)): ftp
331 Please specify the password.
密碼:
230 Login successful.
ftp> pwd
257 "/" is the current directory
ftp> cd /home
550 Failed to change directory.
ftp> quit
221 Goodbye.
//重新登陸lxb和nihao用戶
C:\Users\14202>ftp 192.168.220.134
連接到 192.168.220.134,
220 (vsFTPd 3.0.3)
200 Always in UTF8 mode.
用戶(192.168.220.134:(none)): lxb
331 Please specify the password.
密碼:
230 Login successful.
ftp> pwd
257 "/home/lxb" is the current directory
ftp> cd /
250 Directory successfully changed.
ftp> pwd
257 "/" is the current directory
ftp> quit
221 Goodbye.
C:\Users\14202>ftp 192.168.220.134
連接到 192.168.220.134,
220 (vsFTPd 3.0.3)
200 Always in UTF8 mode.
用戶(192.168.220.134:(none)): nihao
331 Please specify the password.
密碼:
230 Login successful.
ftp> pwd
257 "/" is the current directory
ftp> cd home
550 Failed to change directory.
ftp>
//發現lxb用戶可以自由切換目錄,而nihao用戶無法自由切換
配置虛擬用戶登錄:
//配置虛擬登錄權限(登錄用戶為lxb,需要是本地的用戶)
[root@localhost vsftpd]# vim vsftpd.conf
#匿名登錄
guest_enable=yes
guest_username=lxb
virtual_use_local_privs=yes
pam_service_name=ftppam
//配置的pam權限的檔案名字叫ftppam
//此時去配置匿名用戶
[root@localhost vsftpd]# cat vuserlist
vuser1 //用戶1
vuser1 //密碼1
vuser2 //用戶2
vuser2 //密碼2
//然后把vuserlist轉化為資料庫檔案
[root@localhost vsftpd]# db_load -T -t hash -f /etc/vsftpd/vuserlist vuserlist.ab
//然后去配置pam權限
[root@localhost ~]# cd /etc/pam.d/
[root@localhost pam.d]# cat ftppam
auth required pam_userdb.so db=/etc/vsftpd/vuserlist
account required pam_userdb.so db=/etc/vsftpd/vuserlist
//重啟服務,并使用虛擬用戶
C:\Users\14202>ftp 192.168.220.134
連接到 192.168.220.134,
220 (vsFTPd 3.0.3)
200 Always in UTF8 mode.
用戶(192.168.220.134:(none)): vuser1
331 Please specify the password.
密碼:
230 Login successful.
ftp> quit
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/395010.html
標籤:AI


