FTP 搭建
FTP 是 File Transfer Protocol(檔案傳輸協議)的英文簡稱,它工作在 0SI 模型的第七層,TCP 模型的第四屋上,即應用層。
一、FTP 簡介
FTP 會話時包含了兩個通道,一個叫控制通道,埠號21;一個數據通道,埠號 20。
21 埠用於連線,20 埠用於傳輸資料。進行 FTP 檔案傳輸中,客戶端首先連線到 FTP 伺服器的 21 埠,進行使用者的認證,認證成功後,要傳輸檔案時,伺服器會開一個埠為 20 來進行傳輸資料檔案。也就是說,埠 20 才是真正傳輸所用到的埠,埠 21 只用於 FTP 的登陸認證。
1.1 FTP 工作模式
資料傳輸有 2 種方式:主動模式和被動模式。兩種模式的區別是被動模式是客戶端開啟一個埠去連線服務端,這就繞過了客戶端的防火牆限制。
(1) 主動模式的工作原理(PORT模式)
- 客戶端對伺服器發起請求,連線的是伺服器的 21 號埠,客戶端的埠號 N 是大於 1024 的隨機埠。
- 伺服器的 21 號埠給予客戶端響應資料流。
- 伺服器開啟 20 端號口去連線客戶端的 N+1 的埠(注意客戶端 N+1 要開啟防火牆限制)。
- 客戶端給予響應,資料開始傳輸。
(2) 被動模式的工作原理(PASY模式)
- 客戶端對服務發起的請求連線是伺服器的 21 號口,客戶端的埠號 N 是大於 1024 的隨機埠。
- 伺服器的 21 號埠給予客戶端響應資料流。
- 伺服器開啟一個大於 1024 的隨機埠,客戶端使用用 N+1 口號去連線務器開啟的埠。
- 伺服器給予響應,於是資料開始傳輸。
1.2 FTP 遠端登陸方式
FTP 提供 3 種遠端的登陸方式
(1) 匿名登入方式
就是不需要使用者名稱,密碼。就能登陸到務器
(2) 本地使用者方式
需要帳戶名和密碼才能登入。而且,這個帳戶名和密碼,都是在 1inux 系統裡面,已經有的使用者。
(3) 虛擬使用者方式
同樣要使用者名稱和密碼才能造錄。但是和上面的區別就是,這個使用者名稱和密碼,在 1inux 系統中是沒有的。
下面分別介紹這三種登陸方式的安裝和配置。
二、FTP 安裝
2.1 FTP 軟體安裝
1. 關閉防火牆和 selinux
# CentOS7 關閉防火牆
# 從 CentOS7 開始使用 systemctl 來管理服務和程式,包括了 service 和 chkconfig
systemctl stop firewalld
systemctl disable firewalld
# CentOS6 關閉防火牆
servcie iptables stop
chkconfig iptables off
# 關閉 selinux
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
# SELINUX=disabled
# vi /etc/selinux/config
2. 安裝 vsftp
rpm -qa | grep vsftpd # 檢視是否安裝 vsftpd
yum install -y vsftpd ftp # 安裝 ftp 服務端和客戶端
3. 啟動 vsftpd
systemctl start vsftpd # 臨時啟動 vsftpd
systemctl enalble vsftpd # 開機啟動 vsftpd
systemctl stop vsftpd # 關閉 vsftpd
systemctl restart vsftpd # 重啟 vsftpd
systemctl status vsftpd # 查詢狀態 vsftpd
systemctl enalble vsftpd # 開機啟動 vsftpd
systemctl is-enabled vsftpd;echo $? # 查詢是否開機啟動 vsftpd
systemctl systemctl list-unit-files | grep enabled # 查詢啟動了那些服務 vsftpd
到此為止,FTP 已經安裝成功,預設開啟匿名使用者登陸的方式。
2.2 匿名登入方式
(1) 檢視 /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
(2) 檢視 /etc/passwd | grep ftp
[root@mdw ftp]# cat /etc/passwd | grep ftp
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
ftpuser:x:1002:50::/home/ftpuser/:/sbin/nologin
可以看到 FTP 的預設路徑 /var/ftp。FTP 訪問路徑: ftp://192.168.2.110/
2.3 本地使用者方式
(1) 修改 /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
(2) 建立使用者
useradd -g ftp binarylei
echo 123456 | passwd --stdin binarylei
FTP 訪問路徑: ftp://binarylei:[email protected]/
(3) 測試
ftp 192.168.2.110 # 登陸
ftp> pwd # /home/binarylei
ftp> put /root/.bashrc /home/binarylei/.bashrc # 上傳到 /home/binarylei/.bashrc
(4) 為每一個使用者單獨授權
修改 vsftpd.conf 配製檔案
vim /etc/vsftpd/vsftpd.conf
chroot_local_user=YES # 只允許訪問 ftp 目錄,這時 pwd 顯示 '/',否則顯示 '/home/binarylei'
user_config_dir=/etc/vsftpd/vuser_config # ftp 使用者配置檔案地址,優先順序: vuser_config/ftpuser > vsftpd.conf
local_root=/data/ftp # 本地使用者 ftp 根目錄,可以在 vuser_config/ftpuser 中覆蓋
新增 /etc/vsftpd/vuser_config/binarylei 配製檔案
vim /etc/vsftpd/vuser_config/binarylei
local_root=/home/ftp/leigang
anon_umask=022 # 許可權掩碼,比如建立目錄 777 - 022 = 755
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
2.4 虛擬使用者方式
虛擬使用者是寄生在本地使用者之上的,所以要先建立一個本地的使用者 virtual。
(1) 修改 /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
ascii_upload_enable=YES
ascii_download_enable=YES
chroot_local_user=YES
pam_service_name=vsftpd
guest_enable=YES
guest_username=virtual
user_config_dir=/etc/vsftpd/vuser_config
allow_writeable_chroot=YES
(2) 建立本地帳號
useradd -g ftp -d /home/ftp -s /sbin/nologin virtual
echo 123456 | passwd --stdin virtual
(3) 修改 /etc/pam.d/vsftpd(其餘配置註釋)
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd
(4) 生成 vuser_passwd.db
echo zhangsan >> /etc/vsftpd/vuser_passwd.txt
echo 123456 >> /etc/vsftpd/vuser_passwd.txt
db_load -T -t hash -f /etc/vsftpd/vuser_passwd.txt /etc/vsftpd/vuser_passwd.db
(5) 建立 vuser_config/zhangsan 配製檔案
local_root=/home/binarylei/zhangsan
anon_umask=022
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
(6) 測試
ftp 192.168.2.110 # 啟用後本地使用者方式無法登陸
ftp> pwd # /
ftp> put /root/.bashrc .bashrc # 上傳到根目錄(local_root),上傳要指定上傳後的檔名
三、FTP 命令
(1) ftp 登陸
ftp -n
ftp> open 127.0.0.1
ftp> user ftpuser ftpuser
ftp> close
(2) ftp 常用命令說明
ftp> pwd # 顯示遠端主機的當前工作目錄
ftp> cd pub # 切換目錄
ftp> dir # 檢視本目錄下的內容
ftp> lcd / # 本地目錄切換
ftp> get chargeni.exe # 下載檔案
ftp> put chargeni.exe chargeni.exe # 上傳檔案
ftp> bye # 離開
四、FTP 其它配置
4.1 埠配置
(1) 修改 /etc/vsftpd/vsftpd.conf
listen_port=8021
(2) 修改 /etc/services
# 21 is registered to ftp, but also used by fsp
ftp 8021/tcp
ftp 8021/udp fsp fspd
4.2 允許 root 帳戶登陸
ftp 不允許 /etc/vsftpd 下 ftpusers、user_list 的兩個配置檔案中的帳號登陸,只需要將 root 帳號註釋即可。
注意:user_list 檔案當 /etc/vsftpd/vsftpd.conf/userlist_enable=YES 時 user_list 的帳號不允許登陸,NO 時則允許登陸。預設為 YES
五、附錄
5.1 vsftp 配置檔案
# allow anonmy user login
anonymous_enable=YES # 允許匿名使用者登陸
anon_upload_enable=YES # 允許匿名使用者上傳檔案
anon_mkdir_write_enable=YES # 允許匿名使用者新增目錄的許可權
anon_world_readable_only=NO # 不允許匿名使用者下載
anon_other_write_enable=YES # 允許匿名使用者上傳和新建目錄之處的許可權,如刪除、重新命名
anon_umask=002 # 匿名使用者新增檔案的 umask 數值
anon_root=/var/ftp
write_enable=YES # 允許使用任何可以修改檔案系統的 FTP 的指令
chroot_local_user=YES # 用於指定使用者列表檔案中的使用者,是否允許切換到上級目錄
# local user setting
local_enable=YES # 允許本地使用者登陸(linux 帳號)
local_root=/home/ftp/public
local_umask=022
xferlog_enable=YES # 啟用一個日誌檔案,用於詳細記錄上傳和下載
vsftpd_log_file=/var/log/vsftpd.log # vsftpd 日誌存放位置
use_localtime=YES # 使用本地時間而不是 GMT
dual_log_enable=YES # 使用者登陸日誌
xferlog_file=/var/log/xferlog # 記錄上傳下載檔案的日誌
xferlog_std_format=YES # 記錄日誌使用標準格式
max_clients=5000
max_per_ip=5000
connect_from_port_20=YES # 開啟 20 埠
idle_session_timeout=600 # 登陸之後超時時間 60 秒,登陸之後,一分鐘不操作,就會斷開連線。
listen=YES # 開啟監聽
userlist_enable=YES # 允許由 userlist_file 指定檔案中的使用者登入FTP伺服器
tcp_wrappers=YES # 支援 tcp_wrappers,限制訪問(/etc/hosts.allow,/etc/hosts.deny)
# set virtual users
pam_service_name=vsftpd # 驗證檔案的名字
guest_enable=YES # 起用虛擬使用者
guest_username=taokey # 虛擬使用者名稱
user_config_dir=/etc/vsftpd/vuser_config# 虛擬使用者配置檔案路徑
參考:
- 《FTP配置虛擬使用者》:https://blog.csdn.net/u014226012/article/details/64919902
- 《FTP配置檔案引數詳解》:https://www.cnblogs.com/helonghl/articles/5533857.html
每天用心記錄一點點。內容也許不重要,但習慣很重要!