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系统中,控制台输出通常与终端设备文件相关联,这些文件是操作系统与用户交互的接口,要读取控制台输出的文件路径,首先需要理解Linux终端的类型及其对应的设备文件路径,再通过命令工具定位和读取这些文件,以下是详细步骤和方法的说明,Linux终端设备文件类型及路径Linux中的终端主要分为物理终端、虚拟终……

    2025年10月1日
    13700
  • Linux如何查看设备的设备号及详细信息?

    在Linux系统中,设备号是内核用于标识和管理硬件设备的唯一标识符,由主设备号(Major Number)和次设备号(Minor Number)组成,主设备号用于标识设备类型(如磁盘、终端等),对应设备的驱动程序;次设备号用于区分同一类型下的不同设备实例(如不同磁盘分区、多个串口等),查看设备号是系统管理和驱动……

    2025年8月30日
    13900
  • Linux5.8系统下如何正确挂载存储设备?步骤详解

    在Linux 5.8系统中,挂载是将存储设备(如硬盘、U盘、光盘等)的文件系统与目录树中某个节点关联的过程,使用户能够通过访问该目录来使用设备中的数据,挂载操作是Linux文件系统管理的核心功能之一,本文将详细介绍Linux 5.8下的挂载流程、常用命令及注意事项,挂载前的准备工作在挂载设备前,需完成以下准备工……

    2025年9月28日
    14300
  • Ubuntu安装常见问题如何解决?

    在Linux服务器上搭建PHP环境是部署动态网站的基础步骤,以下以Ubuntu 22.04和CentOS 7为例,提供两种主流方案的详细流程(LAMP:Linux + Apache + MySQL + PHP),所有操作需通过SSH连接服务器执行,准备工作更新系统# Ubuntusudo apt update……

    2025年6月17日
    14900
  • Linux系统磁盘分区空间不足时如何扩展?

    在Linux系统中扩展分区是一个需要谨慎操作的过程,涉及磁盘分区和文件系统的调整,稍有不慎可能导致数据丢失,以下是详细的扩展分区步骤和注意事项,涵盖普通分区和LVM逻辑卷两种常见场景,扩展分区的前提条件存在未分配空间:目标磁盘需要有足够的未分配空间,且未分配空间应位于目标分区的相邻位置(如果是扩展逻辑分区,需在……

    2025年9月28日
    14500

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信