Linux系统如何开启FTP服务?

在Linux系统中,FTP(File Transfer Protocol)是一种常用的文件传输协议,用于在客户端和服务器之间进行文件上传和下载,本文将以CentOS和Ubuntu两大主流发行版为例,详细介绍如何通过vsftpd(Very Secure FTP Daemon)这一轻量级、安全的FTP服务器软件开启FTP服务,涵盖安装、配置、权限管理、防火墙设置及常见问题排查等关键步骤。

linux如何开启ftp服务

准备工作:确认系统环境与需求

在开始配置前,需明确以下几点:

  1. 系统版本:本文以CentOS 7/8(使用yum/dnf包管理器)和Ubuntu 20.04/22.04(使用apt包管理器)为例,其他发行版命令可能略有差异。
  2. 网络连接:确保服务器可正常访问外网,以便下载软件包。
  3. 用户权限:建议使用root用户或具有sudo权限的用户进行操作,避免权限不足导致配置失败。

安装vsftpd软件包

vsftpd是Linux下最常用的FTP服务器之一,以其安全性和稳定性著称。

CentOS/RHEL系统

# 更新软件包缓存
sudo yum update -y
# 安装vsftpd
sudo yum install vsftpd -y

Ubuntu/Debian系统

# 更新软件包列表
sudo apt update
# 安装vsftpd
sudo apt install vsftpd -y

安装完成后,可通过以下命令检查vsftpd是否成功安装:

vsftpd --version

启动并设置开机自启

安装完成后,需启动vsftpd服务并设置为开机自启,确保服务器重启后服务依然可用。

CentOS/RHEL系统(使用systemctl)

# 启动vsftpd服务
sudo systemctl start vsftpd
# 设置开机自启
sudo systemctl enable vsftpd
# 检查服务状态(确保显示active (running))
sudo systemctl status vsftpd

Ubuntu/Debian系统(同样使用systemctl)

命令与CentOS一致,具体操作参考上述内容。

配置vsftpd核心参数

vsftpd的配置文件位于/etc/vsftpd/vsftpd.conf,默认配置较为严格,需根据需求修改关键参数,建议先备份原配置文件:

linux如何开启ftp服务

sudo cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak

以下为常用配置参数及其作用,可通过sudo vim /etc/vsftpd/vsftpd.conf编辑文件,根据需求取消注释或修改值:

参数名 默认值 说明
anonymous_enable NO 是否允许匿名用户登录(默认禁止,建议保持关闭)
local_enable YES 是否允许本地系统用户登录
write_enable YES 是否允许本地用户上传、修改文件(需配合write_list参数控制)
local_umask 022 本地用户上传文件后的默认权限掩码(例如022表示644权限)
dirmessage_enable YES 是否显示目录消息(message文件内容)
xferlog_enable YES 是否启用传输日志(记录到/var/log/xferlog)
connect_from_port_20 YES 是否使用20端口进行数据连接(主动模式需开启)
chroot_local_user NO 是否将本地用户限制在其家目录中(安全关键,建议开启)
allow_writeable_chroot NO 是否允许chroot目录可写(需配合chroot_local_user=YES,否则可能报错)
pasv_enable NO 是否启用被动模式(客户端防火墙环境建议开启)
pasv_min_port (空) 被动模式最小端口(建议设置10000-20000范围内,避免冲突)
pasv_max_port (空) 被动模式最大端口(与pasv_min_port组成端口范围)
userlist_enable YES 是否启用用户列表文件(/etc/vsftpd/user_list)
userlist_file /etc/vsftpd/user_list 用户列表文件路径
tcp_wrappers YES 是否使用TCP Wrappers主机访问控制(建议保持默认,通过hosts.allow/deny控制)

关键配置示例(基础安全配置):

# 禁止匿名用户登录
anonymous_enable=NO
# 允许本地用户登录
local_enable=YES
# 允许用户上传文件
write_enable=YES
# 限制用户在家目录(安全措施)
chroot_local_user=YES
allow_writeable_chroot=YES
# 启用被动模式(避免客户端防火墙问题)
pasv_enable=YES
pasv_min_port=10000
pasv_max_port=20000
# 禁止root用户登录(可选)
userlist_enable=YES
userlist_file=/etc/vsftpd/user_list
userlist_deny=YES

保存配置文件后,重启vsftpd服务使配置生效:

sudo systemctl restart vsftpd

创建FTP用户并设置权限

默认情况下,系统用户可通过FTP登录,但出于安全考虑,建议为FTP服务创建专用用户,并限制其访问目录。

创建FTP专用用户

# 创建用户(例如ftpuser),家目录为/ftpdata(可自定义)
sudo useradd -m -d /ftpdata -s /sbin/nologin ftpuser
# 设置用户密码
sudo passwd ftpuser

说明-s /sbin/nologin表示禁止用户通过SSH等方式登录系统,仅允许FTP访问。

设置用户目录权限

# 创建FTP数据目录(若不存在)
sudo mkdir -p /ftpdata
# 设置目录所有者为ftpuser,权限为755
sudo chown -R ftpuser:ftpuser /ftpdata
sudo chmod -R 755 /ftpdata

限制用户访问范围(可选)

如果需要将用户限制在指定子目录(例如/ftpdata/user1),可通过以下方式实现:

# 创建子目录并设置权限
sudo mkdir -p /ftpdata/user1
sudo chown -R ftpuser:ftpuser /ftpdata/user1
sudo chmod -R 755 /ftpdata/user1
# 修改用户家目录为子目录(需重启服务生效)
sudo usermod -d /ftpdata/user1 ftpuser

配置防火墙与SELinux

防火墙配置

FTP服务默认使用21端口(命令连接),若启用被动模式,还需开放配置的端口范围(如10000-20000)。

linux如何开启ftp服务

CentOS/RHEL(firewalld)

# 开放FTP服务(自动处理21端口和数据连接端口)
sudo firewall-cmd --permanent --add-service=ftp
# 开放被动模式端口范围(若自定义了端口范围需单独开放)
sudo firewall-cmd --permanent --add-port=10000-20000/tcp
# 重新加载防火墙规则
sudo firewall-cmd --reload

Ubuntu(ufw)

# 开放21端口(FTP命令连接)
sudo ufw allow 21/tcp
# 开放被动模式端口范围
sudo ufw allow 10000:20000/tcp
# 启用防火墙(若未启用)
sudo ufw enable

SELinux配置(仅CentOS/RHEL)

CentOS默认开启SELinux,可能阻止FTP服务访问用户目录,需设置布尔值允许FTP写入:

# 查看当前SELinux状态(应为 enforcing 或 permissive)
sestatus
# 设置允许FTP用户访问家目录(-P表示永久生效)
sudo setsebool -P ftpd_full_access on

测试FTP服务连接

命令行测试(Linux客户端)

# 安装ftp客户端(Ubuntu/Debian)
sudo apt install ftp -y
# 连接FTP服务器(替换为服务器IP)
ftp 192.168.1.100
# 输入用户名和密码,登录后可通过以下命令测试:
ls          # 列出文件
put test.txt # 上传文件(需write_enable=YES)
get test.txt # 下载文件
bye         # 退出

图形化工具测试(Windows客户端)

推荐使用FileZilla,输入服务器IP、用户名、密码,端口选择21(主动模式)或自动检测(被动模式),连接成功后即可拖拽文件传输。

常见问题排查

  1. 连接超时或拒绝连接:检查防火墙是否开放21端口和被动模式端口,确认vsftpd服务是否运行(systemctl status vsftpd)。
  2. 530 Login incorrect错误:确认用户名密码正确,检查/etc/vsftpd/ftpusers/etc/vsftpd/user_list文件中是否包含该用户(默认禁止root登录)。
  3. 500 OOPS: vsftpd: refusing to run with writable root inside chroot()错误:修改allow_writeable_chroot=YES
  4. 被动模式连接失败:确认防火墙开放了pasv_min_portpasv_max_port设置的端口范围,客户端选择被动模式。

相关问答FAQs

问题1:如何禁止特定用户通过FTP登录?
解答:可通过/etc/vsftpd/user_list文件控制,编辑该文件,将需要禁止的用户名添加到一行(每行一个用户),并在vsftpd.conf中确保userlist_enable=YESuserlist_deny=YES(默认禁止列表中的用户登录),重启vsftpd服务即可生效。

问题2:如何配置匿名用户只读访问?
解答:在vsftpd.conf中设置anonymous_enable=YES,并添加以下参数限制匿名用户权限:

anon_upload_enable=NO      # 禁止匿名用户上传
anon_mkdir_write_enable=NO # 禁止匿名用户创建目录
anon_other_write_enable=NO # 禁止匿名用户删除/重命名文件

重启服务后,匿名用户可下载文件但无法修改。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/33130.html

(0)
酷番叔酷番叔
上一篇 2025年9月30日 12:57
下一篇 2025年9月30日 13:12

相关推荐

  • Linux如何按时间删除指定文件?

    在Linux系统中,管理文件时经常需要根据文件的时间属性进行筛选和删除,例如清理过期的日志文件、临时文件或备份文件,文件的时间属性主要包括修改时间(mtime)、访问时间(atime)和状态改变时间(ctime),理解这些时间的含义并掌握通过时间条件删除文件的方法,是Linux系统管理的重要技能,Linux文件……

    2025年8月30日
    18300
  • 嵌入式Linux系统如何进入?步骤方法与操作指南

    嵌入式Linux系统的“进入”通常涵盖两个层面:一是系统上电后的启动流程(从硬件加电到用户空间可用),二是通过特定接口或方式访问系统(如命令行、图形界面或远程管理),以下从启动流程、系统访问模式、接口方式及特殊场景四个维度详细说明,嵌入式Linux启动流程:从硬件到系统的“进入”过程嵌入式Linux的启动是“进……

    2025年9月17日
    15500
  • Linux下如何正确链接静态库?

    在Linux系统中,静态库是一组目标文件(.o文件)的集合,以.a(archive)格式存储,链接时会将库中的代码直接复制到可执行文件中,使得可执行文件独立于库文件运行,无需依赖外部库文件,本文将详细介绍Linux环境下静态库的创建、链接方法及常见问题处理,静态库的创建静态库的创建通常分为两步:将源文件编译为目……

    2025年9月30日
    14800
  • 如何轻松从Windows迁移到Linux?

    从 Windows 切换到 Linux 有多种灵活途径:可在虚拟机中安全体验,通过双系统逐步过渡,或直接安装替代 Windows,云桌面或 Live USB 也能零风险试用,关键是根据需求选择方法并备份好数据。

    2025年7月4日
    20200
  • Linux下如何获取文件夹的root权限并管理其操作?

    在Linux系统中,root用户是具有最高权限的管理员账户,能够对系统中的所有文件和文件夹进行操作,包括修改、删除、创建等,普通用户在操作某些受保护的文件夹(如系统目录、需要管理员权限的应用配置文件夹等)时,通常需要获取root权限或修改文件夹的所有权,本文将详细介绍如何以root权限操作文件夹、修改文件夹所有……

    2025年9月15日
    13800

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信