一、安裝 FTP 服務(vsftpd)
sudo apt update
sudo apt install vsftpd -y
二、修改 vsftpd 配置,使用 21000 端口
編輯配置文件:
sudo nano /etc/vsftpd.conf
修改或添加以下配置:
使用以下配置文件需要修改的地方:listen_port=21000 # 替換為自己的ftp端口
pasv_min_port=20009 # 被動模式使用的端口范圍(最小端口)
pasv_max_port=20009 # 被動模式使用的端口范圍(最大端口)
local_root=/usr/local/nginx/html # 本地用戶的根目錄路徑 (連接建立后默認目錄)
# 是否以獨立模式運行?vsftpd 可以從 inetd 啟動,也可以作為獨立守護進程從初始化腳本啟動。
listen=YES# 此指令啟用 IPv6 套接字監聽。默認情況下,監聽 IPv6 "any" 地址 (::) 將接受 IPv6 和 IPv4 客戶端的連接。
# 不需要同時監聽 IPv4 和 IPv6 套接字。如果需要(例如監聽特定地址),則必須運行兩個 vsftpd 實例,并使用兩個配置文件。
#listen_ipv6=YES# 指定 FTP 服務監聽的端口號
listen_port=21000# 啟用被動模式
pasv_enable=YES
# 被動模式使用的端口范圍(最小端口)
pasv_min_port=20009
# 被動模式使用的端口范圍(最大端口)
pasv_max_port=20009# 是否允許匿名 FTP?(默認禁用)
anonymous_enable=NO# 是否允許本地用戶登錄
local_enable=YES# 是否啟用任何形式的 FTP 寫入命令
write_enable=YES# 本地用戶的默認 umask 是 077。可以改為 022(大多數其他 FTP 服務使用 022)
#local_umask=022# 是否允許匿名用戶上傳文件?僅在全局寫入啟用時有效。還需要創建一個 FTP 用戶可寫的目錄。
#anon_upload_enable=YES# 是否允許匿名用戶創建新目錄?
#anon_mkdir_write_enable=YES# 是否啟用目錄消息 - 遠程用戶進入特定目錄時顯示的消息
dirmessage_enable=YES# 是否使用本地時區顯示目錄列表時間?默認顯示 GMT 時間。MDTM FTP 命令返回的時間也受此選項影響。
use_localtime=YES# 是否啟用上傳/下載日志記錄
xferlog_enable=YES# 確保 PORT 傳輸連接從端口 20(ftp-data)發起
connect_from_port_20=YES# 是否將匿名用戶上傳的文件所有者更改為其他用戶?不建議使用 "root"!
#chown_uploads=YES
#chown_username=whoever# 可以自定義日志文件路徑,默認如下
#xferlog_file=/var/log/vsftpd.log# 是否使用標準 ftpd xferlog 格式記錄日志?默認日志位置為 /var/log/xferlog
#xferlog_std_format=YES# 可以更改空閑會話的超時時間(秒)
#idle_session_timeout=600# 可以更改數據連接的超時時間(秒)
#data_connection_timeout=120# 建議在系統中定義一個唯一用戶,FTP 服務可以將其用作完全隔離且無特權的用戶
#nopriv_user=ftpsecure# 是否啟用異步 ABOR 請求識別?不建議啟用(代碼復雜),但禁用可能會使舊版 FTP 客戶端困惑
#async_abor_enable=YES# 默認情況下,服務器假裝允許 ASCII 模式但實際忽略請求。啟用以下選項可真正支持 ASCII 模式(不推薦,可能存在安全風險)
#ascii_upload_enable=YES
#ascii_download_enable=YES# 可以自定義登錄歡迎信息
#ftpd_banner=Welcome to blah FTP service.# 可以指定禁止的匿名電子郵件地址文件,用于防止某些 DoS 攻擊
#deny_email_enable=YES
# (默認如下)
#banned_email_file=/etc/vsftpd.banned_emails# 是否將本地用戶限制在其主目錄中?使用前請參閱 FAQ 了解風險
# chroot_local_user=YES# 允許 chroot 目錄可寫(需謹慎)
allow_writeable_chroot=YES# 是否將本地用戶 chroot() 到其主目錄?如果啟用,以下列表將成為不 chroot 的用戶列表
# (警告:chroot 可能非常危險。使用時確保用戶對 chroot 的頂級目錄沒有寫權限)
chroot_local_user=YES
# 本地用戶的根目錄路徑
local_root=/usr/local/nginx/html
# 是否啟用 chroot 用戶列表?
#chroot_list_enable=YES
# (默認如下)
#chroot_list_file=/etc/vsftpd.chroot_list# 是否啟用內置 ls 的 "-R" 選項?默認禁用以避免遠程用戶在大站點上引發過多 I/O
# 但某些 FTP 客戶端(如 "ncftp" 和 "mirror")需要此選項
#ls_recurse_enable=YES# 自定義設置
#
# 某些 vsftpd 設置默認不匹配文件系統布局# 此選項應為一個空目錄名,且 FTP 用戶不可寫。此目錄用作安全 chroot() 隔離區
secure_chroot_dir=/var/run/vsftpd/empty# 指定 vsftpd 使用的 PAM 服務名稱
pam_service_name=vsftpd# 指定用于 SSL 加密連接的 RSA 證書位置
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
# 是否啟用 SSL?
ssl_enable=NO# 是否啟用 UTF-8 文件系統支持?
#utf8_filesystem=YES
三、創建用戶 ftpuser 并設置密碼
sudo adduser ftpuser
# 當提示輸入密碼時,輸入密碼Enter new UNIX password: ← 輸入密碼
Retype new UNIX password: ← 再輸一遍密碼Full Name []: ← 直接按 Enter
Room Number []: ← 直接按 Enter
Work Phone []: ← 直接按 Enter
Home Phone []: ← 直接按 Enter
Other []: ← 直接按 Enter
Is the information correct? [Y/n] ← 輸入 Y 然后回車
用戶目錄默認是
/home/ftpuser
,vsftpd 會將其作為根目錄。
四、設置用戶目錄權限
如果需要上傳文件,則需要確保 ftpuser 擁有寫權限:
# 如果說我們只允許操作Nginx的/html目錄, 對應著 /etc/vsftpd.conf 中的local_root配置
sudo chown -R ftpuser:ftpuser /usr/local/nginx/html
五、開放防火墻端口(21000 及被動模式端口)
如果使用的是 ufw
(Ubuntu 默認防火墻),執行:
如果是阿里云等服務器需要在安全組中開放對應端口
# ftp監聽端口
sudo ufw allow 21000/tcp
# 被動模式中啟用范圍端口, 這里使用的是20009
sudo ufw allow 20009:20009/tcp
sudo ufw reload
六、重啟 vsftpd 服務
sudo systemctl restart vsftpd
sudo systemctl enable vsftpd
七、測試 FTP
可以通過 FileZilla 或命令行工具連接:
- 主機:你的服務器IP
- 端口:21000
- 用戶名:ftpuser
- 密碼:你的密碼