ftp服务及配置
目錄FTP介紹FTP協議FTP客戶端與服務端的溝通流程文件傳輸方式文件傳輸模式Port模式(主動模式)Passive模式(被動模式)認證方式三種登錄方式的服務配置及實例匿名登錄系統用戶登錄虛擬賬戶登錄ftp服務常見參數參數實例anonymous_enable 是否允許匿名登錄anon_upload_enable 是否允許匿名用戶上傳文件anon_mkdir_enable 是否允許匿名用戶創建文件anon_other_write_enable 是否允許匿名用戶刪除文件allow_writeable_chroot/chroot_local_user 是否禁錮用戶于家目錄中,無法切換目錄
FTP介紹
FTP文件傳輸協議(File Transfer Protocol),用于Internet上的控制文件的雙向傳輸,是一個應用程序。工作在TCP/IP協議族的應用層,其傳輸層協議是TCP協議,目的在于提高文件傳輸的共享性和可靠性,是基于客戶/服務器模式工作的
FTP協議
FTP會建立兩個連接,將命令與數據分開傳輸,正是因為這樣,提高了傳輸效率。
| 連接端口 | 作用 |
|---|---|
| 控制端口:21 | 基于tpc協議,建立控制連接 |
| 傳輸端口:20 | 上傳/下載文件 |
每一個FTP命令發送后,FTP服務器就會返回一個字符串,其中包含一個響應碼和一些說明信息,其中響應碼主要用于判斷命令是否被成功執行。
FTP客戶端與服務端的溝通流程
步驟:
建立控制連接
客戶端以一個隨機端口(大于1023)以TCP層根據服務器的IP,三次握手之后與服務端的21端口建立連接。這個TCP連接稱為控制連接,用戶發出的FTP命令和服務器的回應都是依靠該連接來傳送的,在用戶退出前一直存在。
建立數據連接
在控制連接的基礎上,客戶端會以控制連接的隨機端口+1的端口號來對服務端進行連接
關閉FTP
當用戶退出FTP時,客戶端發送退出命令,之后控制連接被關閉,FTP服務結束。
文件傳輸方式
| 傳輸方式 | 解釋 |
|---|---|
| ASCLL傳輸方式 | 文件傳輸時FTP會自動調整文件的內容以便于把文件解析為另外那臺計算機存儲文本文件的格式。 |
| 二進制傳輸方式 | 二進制傳輸時,在拷貝任何非文本文件時,FTP會逐字拷貝,不會對這些文件進行處理。 |
文件傳輸模式
Port模式(主動模式)
三次握手建立控制連接,PortA 為隨機端口號
由于客戶端的端口是隨機的,所以客戶端要先告知服務端自己的控制傳輸的端口號
服務端根據提供的端口號主動連接客戶端
Passive模式(被動模式)
客戶端傳輸PASV給服務端,表明這是一次被動傳輸
由于被動模式的服務端端口號是隨機的,所以服務端需要告知客戶端傳輸控制的端口號
客戶端得知端口號后,訪問服務端
認證方式
匿名登錄
服務器上系統用戶登錄
虛擬賬戶登錄
三種登錄方式的服務配置及實例
匿名登錄
[root@localhost ~]# yum install -y vsftpd 安裝服務
[root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf 修改主配置文件
......
anonymous_enable=YES
......
local_umask=022
anon_umask=022 為上傳的文件設置默認權限
......
anon_upload_enable=YES 設置上傳權限
#
......
# new directories.
anon_mkdir_write_enable=YES 為ftp用戶設置寫權限
anon_other_write_enalbe=YES 為ftp賬戶設置刪除權限
[root@localhost vsftpd]# setfacl -m u:ftp:rwx /var/ftp/pub/ 設置文件特殊控制,將匿名用戶ftp設置與共享文件的高級權限
[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 啟動服務
windows效果
windows上傳文件
系統用戶登錄
[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 為用戶設置密碼
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服務端查看上傳的文件
[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) 創建系統用戶。家目錄即為共享目錄
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.* 安全起見,為兩個用戶文件設置權限
[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配置上傳權限
anon_mkdir_write_enable=YES 寫入權限
windows效果
利用虛擬用戶it登錄共享目錄,并寫入123文件
ftp服務常見參數
| 參數名稱 | 含義 |
|---|---|
| anonymous_enable=YES | 允許匿名用戶登錄 |
| anon_upload_enable=YES | 允許匿名用戶上傳 |
| anon_mkdir_write_enable=YES | 允許匿名用戶創建目錄 |
| anon_other_write_enable=YES | 允許匿名用戶刪除目錄 |
| allow_writeable_chroot=YES | 允許被禁錮的用戶家目錄有寫權限 |
| local_umask=022 | 設置上傳遮罩碼 |
| chroot_local_user=YES | 禁錮所有的ftp本地用戶于家目錄中 |
參數實例
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 設置為YES
......
anon_upload_enable 是否允許匿名用戶上傳文件
默認并無權限上傳文件
修改配置文件
......
# When SELinux is enforcing check for SE bool allow_ftpd_anon_write, allow_ftpd_
full_access
anon_upload_enable=YES 允許用戶上傳
......
anon_mkdir_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 是否允許匿名用戶刪除文件
修改配置文件
[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 添加刪除文件權限
新建文件夾已被刪除
allow_writeable_chroot/chroot_local_user 是否禁錮用戶于家目錄中,無法切換目錄
總結