当前位置: 首页 > backend >正文

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
  • 密码:你的密码
http://www.xdnf.cn/news/5891.html

相关文章:

  • 使用腾讯会议远程控制电脑进行操作电脑
  • (十六)Java String类全面解析
  • React百日学习计划-Grok3
  • 2025深圳杯D题法医物证多人身份鉴定问题四万字思路
  • OpenMCU(七):STM32F103开发环境搭建
  • Kafka 解惑
  • 2025.05.11拼多多机考真题算法岗-第四题
  • C++中void*知识详解和注意事项
  • 主流高防服务器技术对比与AI防御方案实战
  • 网络协议分析 实验三 ARP与ARP欺骗
  • Room持久化库:从零到一的全面解析与实战
  • 需求管理缺乏持续改进机制,如何建立
  • nginx配置负载均衡
  • 王炸组合!STL-VMD二次分解 + Informer-LSTM 并行预测模型
  • 黑马Java基础笔记-10
  • 撤回不了一点 v1.0.2,支持微信QQ钉钉飞书等消息防撤回
  • 【图像处理基石】如何入门OCR技术?
  • 2025年PMP 学习十 -第8章 项目质量管理(8.1,8.2)
  • “端 - 边 - 云”三级智能协同平台的理论建构与技术实现
  • 【Linux】操作系统入门:冯诺依曼体系结构
  • python中的单例与实例
  • Python基础学习-Day23
  • SQL server数据库实现远程跨服务器定时同步传输数据
  • containerd 之使用 ctr 和 runc 进行底层容器操作与管理
  • mysql5.7安装
  • 视频监控汇聚平台EasyCVR安防监控系统:在应用中,机房及监控系统施工如何有效实现防雷?
  • huggingface transformers中Dataset是一种什么数据类型
  • spaCy基础入门
  • transforms.Compose()
  • ARFoundation 图片识别,切换图片克隆不同的追踪模型