在服务器上创建FTP服务是许多企业和个人用户在文件传输方面的常见需求,无论是用于网站文件管理、数据共享还是备份传输,FTP(File Transfer Protocol,文件传输协议)是一种基于TCP/IP协议的应用层协议,支持客户端和服务器之间的文件传输,下面将详细介绍在Linux和Windows服务器上创建FTP服务的完整步骤,包括环境准备、安装配置、用户管理、安全设置以及常见问题排查等内容,确保您能够顺利搭建并安全运行FTP服务。

Linux服务器上创建FTP服务
Linux系统因其稳定性和灵活性,常被用作服务器环境,以CentOS 7和Ubuntu为例,介绍FTP服务的搭建过程。
安装FTP服务软件
在Linux中,常用的FTP服务软件有vsftpd(very secure FTP daemon)、ProFTPD等,这里以vsftpd为例,它是目前最流行的FTP服务器之一,安全性较高。
对于CentOS 7系统:
- 首先更新系统软件包:
sudo yum update -y
- 安装vsftpd:
sudo yum install vsftpd -y
- 安装完成后启动vsftpd服务并设置开机自启:
sudo systemctl start vsftpd
,sudo systemctl enable vsftpd
对于Ubuntu系统:

- 更新软件包列表:
sudo apt update
- 安装vsftpd:
sudo apt install vsftpd -y
- 启动服务并设置开机自启:
sudo systemctl start vsftpd
,sudo systemctl enable vsftpd
配置vsftpd
vsftpd的配置文件位于/etc/vsftpd/vsftpd.conf
,使用sudo vi /etc/vsftpd/vsftpd.conf
命令编辑配置文件,以下是关键配置项及其说明:
配置项 | 默认值 | 推荐值 | 说明 |
---|---|---|---|
anonymous_enable=YES | NO | 是否允许匿名用户登录,建议关闭以提高安全性 | |
local_enable=YES | YES | 是否允许本地用户登录 | |
write_enable=YES | YES | 是否允许本地用户对文件有写权限 | |
chroot_local_user=YES | NO | 是否将用户限制在其主目录下,防止越权访问 | |
allow_writeable_chroot=YES | NO(需配合其他配置) | YES(当chroot_local_user=YES时) | 允许被限制在主目录的用户具有写权限 |
pasv_min_port=60000 | 0(随机端口) | 60000 | 被动模式下最小端口范围 |
pasv_max_port=61000 | 0(随机端口) | 61000 | 被动模式下最大端口范围 |
userlist_enable=YES | YES | 启用用户列表控制 | |
userlist_file=/etc/vsftpd/user_list | /etc/vsftpd/user_list | 用户列表文件路径 | |
userlist_deny=NO | YES | NO表示仅允许user_list中的用户登录 |
编辑完成后保存文件,并重启vsftpd服务使配置生效:sudo systemctl restart vsftpd
配置防火墙和SELinux
-
防火墙配置:确保防火墙允许FTP服务的21端口(命令端口)和被动模式下的端口范围(如60000-61000),在CentOS 7中执行:
sudo firewall-cmd --permanent --add-service=ftp sudo firewall-cmd --permanent --add-port=60000-61000/tcp sudo firewall-cmd --reload
在Ubuntu中,使用ufw防火墙:
(图片来源网络,侵删)sudo ufw allow 21/tcp sudo ufw allow 60000:61000/tcp sudo ufw reload
-
SELinux配置(仅CentOS系统):如果SELinux处于启用状态,需要设置FTP相关的布尔值:
sudo setsebool -P ftpd_full_access on
创建FTP用户
- 创建系统用户并设置密码:
sudo useradd -m ftpuser
(-m
表示创建用户主目录),sudo passwd ftpuser
- 如果需要限制用户仅能通过FTP访问而不能登录系统,可以将用户shell设置为
/sbin/nologin
:sudo usermod -s /sbin/nologin ftpuser
- 将用户添加到允许登录的用户列表(如果配置了
userlist_deny=NO
):echo "ftpuser" | sudo tee -a /etc/vsftpd/user_list
测试FTP服务
使用FTP客户端(如FileZilla)或命令行工具连接服务器,输入服务器IP地址、用户名和密码,如果能够成功登录并传输文件,则说明FTP服务搭建成功。
Windows服务器上创建FTP服务
Windows Server系统(如Windows Server 2016/2019)内置了FTP服务组件,可通过服务器管理器安装和配置。
安装FTP服务
- 打开“服务器管理器”,点击“添加角色和功能”,进入添加角色和功能向导。
- 选择“基于角色或功能的安装”,选择目标服务器,进入“功能”页面。
- 勾选“FTP服务器”下的“FTP服务”和“FTP扩展性”,点击“安装”完成安装。
配置FTP站点
- 安装完成后,打开“Internet Information Services (IIS) 管理器”,在左侧窗口中右键点击“站点”,选择“添加FTP站点”。
- 输入站点名称(如“FTP Site”),并选择物理路径(用于存储FTP文件的文件夹),点击“下一步”。
- 在“绑定和SSL设置”中,IP地址选择“全部未分配”,端口默认为21,SSL选择“无”(如果需要SSL加密可选择“允许”或“需要”)。
- 在“身份验证和授权信息”中,选择身份验证方式(如“基本”),授权范围选择“指定用户”,并添加允许访问的用户(如之前创建的本地用户),权限勾选“读取”和“写入”,点击“完成”。
配置防火墙
- 打开“Windows Defender 防火墙”,点击“允许应用或功能通过Windows Defender防火墙”。
- 找到并勾选“FTP服务器”,确保“专用”和“公用”网络状态均为“允许”。
测试FTP服务
在客户端计算机打开文件资源管理器,在地址栏输入ftp://服务器IP地址
,输入用户名和密码进行连接测试。
FTP服务安全增强建议
- 使用SFTP/FTPS替代FTP:FTP协议本身不加密数据,存在安全隐患,建议使用SFTP(基于SSH)或FTPS(基于SSL/TLS)加密传输。
- 限制用户权限:仅授予用户必要的文件操作权限,避免使用root或Administrator账户直接登录。
- 定期更新和维护:保持FTP服务软件和系统补丁最新,及时修复安全漏洞。
- 监控日志:定期查看FTP访问日志,发现异常登录或操作及时处理。
- 设置复杂密码:为FTP用户设置强密码,并定期更换。
相关问答FAQs
问题1:如何解决FTP连接时提示“530 Login incorrect”错误?
解答:该错误通常是由于用户名或密码错误、用户被禁止登录或配置文件权限问题导致,检查步骤如下:
- 确认用户名和密码输入正确,区分大小写。
- 检查用户是否在
/etc/vsftpd/user_list
(Linux)或IIS管理器的FTP授权规则(Windows)中,且未被禁止。 - 确认用户主目录权限正确(Linux中目录所有者应为用户,权限为755;Windows中IIS用户需有读写权限)。
- 查看服务器日志(如
/var/log/secure
或IIS日志)定位具体错误原因。
问题2:如何实现FTP服务的被动模式(Passive Mode)?
解答:被动模式下,客户端主动连接服务器的高端口,适用于客户端位于防火墙后的环境,以Linux vsftpd为例:
- 在
vsftpd.conf
中设置被动模式端口范围:pasv_min_port=60000
,pasv_max_port=61000
。 - 重启vsftpd服务:
sudo systemctl restart vsftpd
。 - 在防火墙中开放上述端口范围(如CentOS的
firewall-cmd
命令)。
Windows Server的FTP站点默认启用被动模式,可在“FTP防火墙支持”设置中配置数据通道端口范围,客户端连接时需勾选“使用被动模式”选项。