温馨提示×

如何在Ubuntu LNMP上搭建FTP服务器

小樊
51
2025-10-03 13:39:25
栏目: 云计算

如何在Ubuntu LNMP上搭建FTP服务器
FTP(文件传输协议)是网站运维中常用的文件共享工具,而LNMP(Linux+Nginx+MySQL+PHP)是主流的Web服务架构。虽然LNMP本身不包含FTP功能,但可通过额外安装FTP服务器软件(如vsftpd)实现。以下是详细步骤:

一、准备工作

在开始前,请确保:

  1. 已安装Ubuntu 20.04及以上版本(或其他支持apt的Ubuntu衍生版);
  2. 拥有sudo权限的用户账户;
  3. 服务器IP地址已固定(或可通过域名访问);
  4. 防火墙已开启(如UFW),并允许FTP流量通过。

二、安装vsftpd(推荐)

vsftpd(Very Secure FTP Daemon)是Ubuntu官方推荐的FTP服务器软件,以轻量、安全、配置简单著称,且默认包含在Ubuntu仓库中。
执行以下命令安装:

sudo apt update && sudo apt install vsftpd -y

安装完成后,检查服务状态:

sudo systemctl status vsftpd

若显示“active (running)”,则表示服务已启动。

三、配置vsftpd

vsftpd的主配置文件位于/etc/vsftpd.conf,需修改以下关键参数以提升安全性和功能性:

  1. 备份原始配置文件(避免误操作):
    sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
    
  2. 编辑配置文件(使用nano或vim):
    sudo nano /etc/vsftpd.conf
    
  3. 修改核心参数(取消注释或新增):
    # 禁止匿名用户登录(防止未授权访问)
    anonymous_enable=NO
    # 允许本地用户(如系统用户)登录
    local_enable=YES
    # 允许本地用户上传/修改文件
    write_enable=YES
    # 本地用户创建文件的默认权限(022表示所有者有读写权限,组和其他用户有读权限)
    local_umask=022
    # 将本地用户锁定在其主目录(防止越权访问服务器其他目录)
    chroot_local_user=YES
    # 允许chroot目录可写(解决“chroot后无法上传文件”问题)
    allow_writeable_chroot=YES
    # 启用被动模式(适合防火墙或路由器后的服务器,需指定端口范围)
    pasv_enable=YES
    pasv_min_port=40000
    pasv_max_port=50000
    
  4. 保存并退出
    • nano编辑器:按Ctrl+O保存,Ctrl+X退出;
    • vim编辑器:按:wq保存并退出。

四、创建FTP专用用户

为避免使用root用户登录FTP(存在安全风险),建议创建专用FTP用户,并限制其仅能通过FTP访问:

  1. 创建用户(如ftpuser):
    sudo adduser ftpuser
    
    按提示设置密码(建议使用强密码)和用户信息(如姓名、电话等,可随意填写)。
  2. 限制用户仅能通过FTP访问(禁止SSH登录):
    sudo usermod -s /usr/sbin/nologin ftpuser
    
  3. 创建FTP专用目录并设置权限
    sudo mkdir -p /home/ftpuser/files  # files目录用于存储上传的文件
    sudo chown ftpuser:ftpuser /home/ftpuser/files  # 设置目录所有者为ftpuser
    sudo chmod 755 /home/ftpuser  # 设置主目录权限(所有者可读写执行,其他用户可读执行)
    

    注:files目录是用户上传文件的存储路径,可根据需求修改名称。

五、配置防火墙

若服务器开启了UFW防火墙(Ubuntu默认防火墙),需放行FTP相关端口:

  1. 放行FTP控制端口(21)
    sudo ufw allow 21/tcp
    
  2. 放行被动模式端口范围(40000-50000)
    sudo ufw allow 40000:50000/tcp
    
  3. 启用防火墙(若未启用):
    sudo ufw enable
    
  4. 验证防火墙规则
    sudo ufw status
    
    应显示“21/tcp ALLOW”和“40000:50000/tcp ALLOW”。

六、测试FTP连接

使用FTP客户端(如FileZilla)测试连接,步骤如下:

  1. 打开FileZilla,在“主机”栏输入服务器IP地址,“用户名”输入ftpuser,“密码”输入创建时的密码,“端口”输入21
  2. 点击“快速连接”,若连接成功,左侧为本地计算机目录,右侧为FTP服务器目录(/home/ftpuser/files);
  3. 尝试上传文件(如test.txt)至服务器,验证write_enable配置是否生效。

七、高级安全配置(可选但推荐)

  1. 启用FTPS(FTP over SSL/TLS)
    FTP协议默认以明文传输数据,存在被窃听的风险。可通过SSL/TLS加密提升安全性:

    • 生成SSL证书:
      sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
      
    • 修改vsftpd配置文件(/etc/vsftpd.conf),添加以下参数:
      ssl_enable=YES
      allow_anon_ssl=NO
      force_local_data_ssl=YES
      force_local_logins_ssl=YES
      rsa_cert_file=/etc/ssl/private/vsftpd.pem
      rsa_private_key_file=/etc/ssl/private/vsftpd.pem
      
    • 重启vsftpd服务:
      sudo systemctl restart vsftpd
      
    • 客户端连接时,需选择“FTP over TLS”模式。
  2. 限制用户访问
    若需控制哪些用户可以登录FTP,可创建用户列表文件:

    • 创建列表文件:
      sudo nano /etc/vsftpd.userlist
      
      在文件中添加允许登录的用户名(每行一个,如ftpuser)。
    • 修改vsftpd配置文件,添加以下参数:
      userlist_enable=YES
      userlist_file=/etc/vsftpd.userlist
      userlist_deny=NO  # 设置为NO表示仅允许列表中的用户登录,设置为YES表示禁止列表中的用户登录
      
    • 重启vsftpd服务:
      sudo systemctl restart vsftpd
      

八、常见问题解决

  1. 连接超时

    • 检查服务器IP地址是否正确;
    • 验证防火墙是否放行了21端口和被动模式端口范围;
    • 使用ping命令测试网络连通性。
  2. 认证失败

    • 确认用户名和密码是否正确;
    • 检查/etc/vsftpd.userlist文件(若启用了用户列表);
    • 确认用户的shell是否为/usr/sbin/nologin(避免使用shell登录)。
  3. 无法上传文件

    • 检查write_enable是否设置为YES
    • 确认FTP目录权限(/home/ftpuser/files应为755,所有者为ftpuser);
    • 验证磁盘空间是否充足(使用df -h命令查看)。

通过以上步骤,即可在Ubuntu LNMP环境中搭建一个安全、稳定的FTP服务器。如需更高的安全性,建议优先使用SFTP(SSH文件传输协议),它是SSH的一部分,无需额外安装FTP服务器,且数据传输全程加密。

0