Ubuntu 上安装 FTP 服务、开放指定端口并创建用户
一、安装 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
- 密码:你的密码