Linux : ftp服務及配置詳解
FTP 基本概念
- 定義:文件傳輸協議(File Transfer Protocol),采用 C/S 模式工作。
- 端口:
- 控制端口:
21
- 數據端口:
20
- 控制端口:
FTP 工作原理
模式 | 工作流程 | 連接發起方 |
---|---|---|
主動模式 (Standard) | 1. 客戶端從隨機高端口 N 發送 PORT 命令到服務端 21 端口 2. PORT 命令包含客戶端數據端口 N+1 3. 服務端用 20 端口連接客戶端的 N+1 端口,如果傳輸數據則需要重新與客戶端建立新的連接傳輸數據 | 服務端 → 客戶端 |
被動模式 (Passive) | 1. 客戶端發送 PASV 命令到服務端 21 端口 2. 服務端隨機開啟高端口 P ,并通過 PORT 命令告知客戶端 3. 客戶端用 N+1 端口連接服務端的 P 端口,被動模式不需要重新與服務器建立新連接 | 客戶端 → 服務端 |
不同點:
傳輸數據的連接方式不同:主動模式是服務端向客戶端發起數據連接,
而被動模式是客戶端向服務端發起數據連接。
相同點:
都是使用21號控制端口進行用戶驗證和管理。
FTP服務部署
關閉防火墻和selinux
1.安裝vsftpd軟件包
yum install vsftpd -y
rpm -q vsftpd
vsftpd-3.0.2-25.el7.x86_64 #查看是否安裝
2.vsftpd的主配置文件
vim /etc/vsftpd/vsftpd.confanonymous_enable=YES #是否允許匿名用戶登錄
local_enable=YES #允許本地用戶登錄ftp
write_enable=YES #ftp用戶是否有寫入權限
local_umask=022 #創建文件的umask值
anon_upload_enable=YES #是否允許匿名用戶上傳文件
anon_mkdir_write_enable=YES #是否允許匿名用戶創建目錄
anon_other_write_enable=YES #是否允許匿名用戶能夠刪除或者重命名文件,目錄
xferlog_enable=YES #控制文件在傳輸過程中是否被日志記錄
connect_from_port_20=YES #使用20端口傳輸
chown_uploads=YES #匿名用戶上傳文件的所有者為FTP
chown_username=whoever #whoever修改為ftp用戶,匿名用戶上傳文件的所有者將變成該FTP用戶。
xferlog_file=/var/log/xferlog #設置傳輸文件日志的位置
idle_session_timeout=600 #超過600s空閑自動斷開連接
data_connection_timeout=120 #控制數據連接建立后120秒內無交互時,自動斷開連接。
deny_email_enable=YES #禁止下載文件到郵箱
chroot_local_user=YES #ftp用戶是否能夠離開自己的家目錄,yes表示禁止ftp用戶離開自己的家目錄
chroot_list_enable=YES #列表中的ftp用戶能否離開家目錄,通常與下條命令配合使用
chroot_list_file=/etc/vsftpd/chroot_list #ftp的用戶列表如果想要單個ftp用戶能夠訪問其他目錄,其他所有ftp用戶只能在自己的家目錄,則開啟上面三條命令,并且在ftp用戶列表中寫上能夠訪問其他目錄的ftp用戶,如果chroot_local_user=YES和chroot_list_enable=YES都是yes,則只有用戶列表中的用戶能夠訪問其他目錄;如果chroot_local_user=YES,chroot_list_enable=NO,則所有用戶都不能離開自己的家目錄;
如果chroot_local_user=NO,chroot_list_enable=YES,則只有用戶列表中的用戶不允許訪問其他目錄,其他用戶都能夠訪問其他目錄
方法2:
[root@xieyuhui vsftpd]# ls
chroot_list ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh
查看/etc/vsftpd/目錄下的文件,ftpusers和user-list是ftp用戶黑名單,默認禁止列表里的這些用戶訪問ftp,如果想要個別用戶能夠訪問ftp,需要在user-list中寫下這個用戶,ftpusers中不寫這個用戶,然后在在vsftpd.conf配置文件中寫入userlist_deny=NO,拒絕訪問的優先級>允許訪問的優先級,所以原來的用戶依舊不能訪問ftp,而新用戶因為不在ftpusers里面,所以能夠訪問ftp服務
練習
在FTP服務器創建3個用戶分別為ftpuser1 ,ftpuser2,ftpuser3,密碼設置為redhat
在客戶端安裝lftp軟件包
1.設置允許匿名用戶訪問FTP服務器(本次使用centos7版本,默認允許匿名用戶訪問ftp服務器,因此不做更改)
2.設置允許匿名用戶訪問FTP服務器時能夠在/var/ftp/pub目錄下進行文件上傳
首先需要讓/var/ftp/pub的其他用戶有對此目錄的寫入權限,但如果直接給其他用戶權限就太大了,我們可以直接設置ftp用戶有對此目錄的讀寫權限
setfacl -m u:ftp:rwx /var/ftp/pub/
修改配置文件
vim /etc/vsftpd/vsftpd.conf
write_enable=YES #寫入權限
anon_upload_enable=YES #匿名用戶上傳文件的權限
重啟服務
systemctl restart vsftpd
匿名用戶成功上傳文件
3,設置允許匿名用戶訪問FTP服務器時能夠在/var/ftp/pub目錄下創建目錄
編輯vsftpd配置文件
vim /etc/vsftpd/vsftpd.confanon_mkdir_write_enable=YES #允許匿名用戶創建目錄
重啟服務
成功創建目錄(不能創建文件)
4.設置允許匿名用戶訪問FTP服務器時能夠對/var/ftp/pub目錄中的文件或目錄進行重命名或刪除操作
編輯vsftpd配置文件
vim /etc/vsftpd/vsftpd.confanon_other_write_enable=YES #允許匿名用戶進行重命名或刪除
重啟服務
5.設置允許FTP用戶訪問FTP服務器(默認允許訪問,因此不做配置)
6.設置FTP用戶訪問FTP服務器時,將部分FTP用戶訪問的目錄限制在自己的主目錄中,其他FTP用戶仍然可以訪問其他目錄
將ftpuser1和ftpuser2限制,ftpuser3可以訪問其他目錄
方法1:
編輯ftp用戶列表,如果用戶被限定在了其主目錄下,則該用戶的主目錄不能再具有寫權限了
如果檢查發現還有寫權限,就會報該錯誤。
cd /etc/vsftpd/
vim chroot_listftpuser1ftpuser2 #一行一個用戶
編輯vsftpd配置文件
vim vsftpd.confchroot_list_enable=YESchroot_list_file=/etc/vsftpd/chroot_listallow_writeable_chroot=YES #列表中的用戶不允許訪問其他目錄
重啟服務
方法2:
在ftpusers里面寫上ftpuser1和ftpuser2,在user-list里面寫上ftpuser3,然后在配置文件里面加上userlist_deny=NO