ftp服务及配置
目錄FTP介紹FTP協(xié)議FTP客戶端與服務(wù)端的溝通流程文件傳輸方式文件傳輸模式Port模式(主動模式)Passive模式(被動模式)認證方式三種登錄方式的服務(wù)配置及實例匿名登錄系統(tǒng)用戶登錄虛擬賬戶登錄ftp服務(wù)常見參數(shù)參數(shù)實例anonymous_enable 是否允許匿名登錄anon_upload_enable 是否允許匿名用戶上傳文件anon_mkdir_enable 是否允許匿名用戶創(chuàng)建文件anon_other_write_enable 是否允許匿名用戶刪除文件allow_writeable_chroot/chroot_local_user 是否禁錮用戶于家目錄中,無法切換目錄
FTP介紹
FTP文件傳輸協(xié)議(File Transfer Protocol),用于Internet上的控制文件的雙向傳輸,是一個應(yīng)用程序。工作在TCP/IP協(xié)議族的應(yīng)用層,其傳輸層協(xié)議是TCP協(xié)議,目的在于提高文件傳輸?shù)墓蚕硇院涂煽啃裕腔诳蛻?服務(wù)器模式工作的
FTP協(xié)議
FTP會建立兩個連接,將命令與數(shù)據(jù)分開傳輸,正是因為這樣,提高了傳輸效率。
| 連接端口 | 作用 |
|---|---|
| 控制端口:21 | 基于tpc協(xié)議,建立控制連接 |
| 傳輸端口:20 | 上傳/下載文件 |
每一個FTP命令發(fā)送后,F(xiàn)TP服務(wù)器就會返回一個字符串,其中包含一個響應(yīng)碼和一些說明信息,其中響應(yīng)碼主要用于判斷命令是否被成功執(zhí)行。
FTP客戶端與服務(wù)端的溝通流程
步驟:
建立控制連接
客戶端以一個隨機端口(大于1023)以TCP層根據(jù)服務(wù)器的IP,三次握手之后與服務(wù)端的21端口建立連接。這個TCP連接稱為控制連接,用戶發(fā)出的FTP命令和服務(wù)器的回應(yīng)都是依靠該連接來傳送的,在用戶退出前一直存在。
建立數(shù)據(jù)連接
在控制連接的基礎(chǔ)上,客戶端會以控制連接的隨機端口+1的端口號來對服務(wù)端進行連接
關(guān)閉FTP
當用戶退出FTP時,客戶端發(fā)送退出命令,之后控制連接被關(guān)閉,F(xiàn)TP服務(wù)結(jié)束。
文件傳輸方式
| 傳輸方式 | 解釋 |
|---|---|
| ASCLL傳輸方式 | 文件傳輸時FTP會自動調(diào)整文件的內(nèi)容以便于把文件解析為另外那臺計算機存儲文本文件的格式。 |
| 二進制傳輸方式 | 二進制傳輸時,在拷貝任何非文本文件時,F(xiàn)TP會逐字拷貝,不會對這些文件進行處理。 |
文件傳輸模式
Port模式(主動模式)
三次握手建立控制連接,PortA 為隨機端口號
由于客戶端的端口是隨機的,所以客戶端要先告知服務(wù)端自己的控制傳輸?shù)亩丝谔?br />
服務(wù)端根據(jù)提供的端口號主動連接客戶端
Passive模式(被動模式)
客戶端傳輸PASV給服務(wù)端,表明這是一次被動傳輸
由于被動模式的服務(wù)端端口號是隨機的,所以服務(wù)端需要告知客戶端傳輸控制的端口號
客戶端得知端口號后,訪問服務(wù)端
認證方式
匿名登錄
服務(wù)器上系統(tǒng)用戶登錄
虛擬賬戶登錄
三種登錄方式的服務(wù)配置及實例
匿名登錄
[root@localhost ~]# yum install -y vsftpd 安裝服務(wù)
[root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf 修改主配置文件
......
anonymous_enable=YES
......
local_umask=022
anon_umask=022 為上傳的文件設(shè)置默認權(quán)限
......
anon_upload_enable=YES 設(shè)置上傳權(quán)限
#
......
# new directories.
anon_mkdir_write_enable=YES 為ftp用戶設(shè)置寫權(quán)限
anon_other_write_enalbe=YES 為ftp賬戶設(shè)置刪除權(quán)限
[root@localhost vsftpd]# setfacl -m u:ftp:rwx /var/ftp/pub/ 設(shè)置文件特殊控制,將匿名用戶ftp設(shè)置與共享文件的高級權(quán)限
[root@localhost vsftpd]# getfacl /var/ftp/pub/
getfacl: Removing leading '/' from absolute path names
# file: var/ftp/pub/
# owner: root
# group: root
user::rwx
user:ftp:rwx
group::r-x
mask::rwx
other::r-x
[root@localhost vsftpd]# systemctl enable --now vsftpd 啟動服務(wù)
windows效果
windows上傳文件
系統(tǒng)用戶登錄
[root@localhost vsftpd]# useradd ftp_user 添加用戶,共享用戶的家目錄
[root@localhost vsftpd]# id ftp_user
uid=1002(ftp_user) gid=1002(ftp_user) groups=1002(ftp_user)
[root@localhost vsftpd]# passwd ftp_user 為用戶設(shè)置密碼
Changing password for user ftp_user.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully
windows效果
上傳文件
linux服務(wù)端查看上傳的文件
[root@localhost vsftpd]# ll /home/ftp_user
total 0
drwxr-xr-x. 2 ftp_user ftp_user 6 Oct 14 16:09 新文件夾
虛擬賬戶登錄
[root@localhost ~]# useradd -d /var/ftproot/ -s /sbin/nologin test
[root@localhost ~]# id test
uid=1003(test) gid=1003(test) groups=1003(test) 創(chuàng)建系統(tǒng)用戶。家目錄即為共享目錄
vsftpd配置目錄下新建虛擬賬戶及密碼
[root@localhost vsftpd]# vim vu.list
it
123456
it2
123456
it3
123456
[root@localhost vsftpd]# db_load -T -t hash -f /etc/vsftpd/vu.list /etc/vsftpd/vu.db 對虛擬賬號進行加密操作
[root@localhost vsftpd]# chmod 600 vu.* 安全起見,為兩個用戶文件設(shè)置權(quán)限
[root@localhost vsftpd]# cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak 備份用戶配置文件
[root@localhost pam.d]# vim vsftpd
#%PAM-1.0
auth required pam_userdb.so db=/etc/vsftpd/vu
account required pam_userdb.so db=/etc/vsftpd/vu 為虛擬用戶進行認證
[root@localhost pam.d]# cd /etc/vsftpd/
[root@localhost vsftpd]# vim vsftpd.conf
.......
# Make sure, that one of the listen options is commented !!
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
guest_enable=YES
guest_username=test 指定用戶名
user_config_dir=/etc/vsftpd/share_dir 指定虛擬賬戶配置文件的地址
allow_writeable_chroot=YES
[root@localhost vsftpd]# cd /etc/vsftpd/share_dir/
[root@localhost share_dir]# touch it 在配置文件下新建單個虛擬賬戶的配置文件
[root@localhost share_dir]# vim it
anon_upload_enable=YES 為虛擬用戶it配置上傳權(quán)限
anon_mkdir_write_enable=YES 寫入權(quán)限
windows效果
利用虛擬用戶it登錄共享目錄,并寫入123文件
ftp服務(wù)常見參數(shù)
| 參數(shù)名稱 | 含義 |
|---|---|
| anonymous_enable=YES | 允許匿名用戶登錄 |
| anon_upload_enable=YES | 允許匿名用戶上傳 |
| anon_mkdir_write_enable=YES | 允許匿名用戶創(chuàng)建目錄 |
| anon_other_write_enable=YES | 允許匿名用戶刪除目錄 |
| allow_writeable_chroot=YES | 允許被禁錮的用戶家目錄有寫權(quán)限 |
| local_umask=022 | 設(shè)置上傳遮罩碼 |
| chroot_local_user=YES | 禁錮所有的ftp本地用戶于家目錄中 |
參數(shù)實例
anonymous_enable 是否允許匿名登錄
默認不允許匿名方式登錄
修改配置文件
[root@localhost pam.d]# !vim
vim /etc/vsftpd/vsftpd.conf
......
#
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=YES 設(shè)置為YES
......
anon_upload_enable 是否允許匿名用戶上傳文件
默認并無權(quán)限上傳文件
修改配置文件
......
# When SELinux is enforcing check for SE bool allow_ftpd_anon_write, allow_ftpd_
full_access
anon_upload_enable=YES 允許用戶上傳
......
anon_mkdir_enable 是否允許匿名用戶創(chuàng)建文件
修改配置文件
......
[root@localhost pam.d]# !vim
vim /etc/vsftpd/vsftpd.conf
# Uncomment this if you want the anonymous FTP user to be able to create
# new directories.
anon_mkdir_write_enable=YES 修改為允許上傳
......
anon_other_write_enable 是否允許匿名用戶刪除文件
修改配置文件
[root@localhost pam.d]# !vim
vim /etc/vsftpd/vsftpd.conf
......
# Uncomment this if you want the anonymous FTP user to be able to create
# new directories.
anon_mkdir_write_enable=YES
anon_other_write_enable=YES 添加刪除文件權(quán)限
新建文件夾已被刪除
allow_writeable_chroot/chroot_local_user 是否禁錮用戶于家目錄中,無法切換目錄
總結(jié)