在Linux系统中搭建FTP服务器是许多企业和个人用户的需求,FTP(文件传输协议)用于在客户端和服务器之间进行文件传输,尤其适合需要频繁上传下载文件的场景,本文将以常用的vsftpd(Very Secure FTP Daemon)为例,详细介绍在Linux系统上安装、配置FTP服务器的完整步骤,包括安装软件包、配置主配置文件、管理用户权限、设置防火墙规则等内容,帮助读者快速搭建安全稳定的FTP服务。
选择并安装FTP服务器软件
vsftpd是一款轻量级、高性能且安全的FTP服务器软件,广泛用于Linux系统,支持匿名访问、本地用户访问、虚拟用户等多种模式,本文以本地用户访问为例进行配置,不同Linux发行版的安装命令略有差异,以下是主流发行版的安装方法:
基于Debian/Ubuntu的系统
使用apt
包管理器安装,执行以下命令:
sudo apt update sudo apt install vsftpd -y
基于CentOS/RHEL/Fedora的系统
使用yum
或dnf
包管理器安装,执行以下命令:
sudo yum install vsftpd -y # CentOS/RHEL 7及以下 sudo dnf install vsftpd -y # Fedora/CentOS 8及以上
安装完成后,启动vsftpd服务并设置开机自启:
sudo systemctl start vsftpd sudo systemctl enable vsftpd
配置vsftpd主配置文件
vsftpd的核心配置文件是/etc/vsftpd.conf
,通过修改该文件可以控制FTP服务的行为,建议先备份原始配置文件:
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
使用vim
或nano
编辑器打开配置文件:
sudo vim /etc/vsftpd.conf
以下是关键配置参数及其说明,可根据实际需求修改:
参数 | 默认值 | 说明 |
---|---|---|
anonymous_enable |
YES |
是否允许匿名用户访问,设置为NO 禁用匿名访问 |
local_enable |
YES |
是否允许本地用户访问 |
write_enable |
YES |
是否允许本地用户上传、修改文件 |
local_umask |
022 |
本地用户上传文件后的默认权限掩码(如022 表示文件权限为644,目录为755) |
dirmessage_enable |
YES |
是否显示目录消息(如.message ) |
xferlog_enable |
YES |
是否启用传输日志 |
xferlog_std_format |
YES |
是否使用标准xferlog日志格式 |
chroot_local_user |
NO |
是否将本地用户限制在其主目录内(安全重要,建议设置为YES ) |
allow_writeable_chroot |
NO |
是否允许被chroot的用户拥有写权限(需配合chroot_local_user=YES ,若用户需上传文件,可设置为YES ,但存在安全风险) |
pasv_enable |
YES |
是否启用被动模式(推荐启用,避免客户端防火墙问题) |
pasv_min_port |
0 |
被动模式最小端口(建议设置为10000-20000范围内的值) |
pasv_max_port |
0 |
被动模式最大端口(需与pasv_min_port 配合使用) |
listen |
YES |
是否以独立模式监听(IPv4) |
listen_ipv6 |
NO |
是否监听IPv6地址 |
推荐配置示例(安全且支持本地用户上传):
anonymous_enable=NO # 禁用匿名访问 local_enable=YES # 允许本地用户访问 write_enable=YES # 允许用户上传文件 local_umask=022 # 上传文件权限掩码 dirmessage_enable=YES # 启用目录消息 xferlog_enable=YES # 启用传输日志 xferlog_std_format=YES # 标准日志格式 chroot_local_user=YES # 限制用户在主目录 allow_writeable_chroot=YES # 允许chroot目录写权限(需确保主目录权限正确) pasv_enable=YES # 启用被动模式 pasv_min_port=10000 # 被动模式最小端口 pasv_max_port=20000 # 被动模式最大端口 listen=YES # 独立模式监听IPv4 listen_ipv6=NO # 禁用IPv6监听
配置完成后保存文件,重启vsftpd服务使配置生效:
sudo systemctl restart vsftpd
创建FTP用户并设置权限
默认情况下,Linux系统中的本地用户均可访问FTP服务,但出于安全考虑,建议为FTP服务创建专用用户,并限制其访问目录。
创建专用FTP用户
创建一个名为ftpuser
的用户,并设置其家目录为/home/ftpuser
:
sudo useradd -m -d /home/ftpuser -s /sbin/nologin ftpuser
参数说明:
-m
:创建家目录-d
:指定家目录路径-s /sbin/nologin
:禁止用户通过SSH等方式登录系统,仅允许FTP访问
设置用户密码
为ftpuser
设置登录密码:
sudo passwd ftpuser
设置用户目录权限
为确保用户被限制在主目录内(chroot
生效),需要修改主目录权限,所有者为root
,用户组为ftpuser
,并设置用户对目录有读写权限:
sudo chown root:ftpuser /home/ftpuser sudo chmod 755 /home/ftpuser
如果需要在主目录内创建子目录供用户上传,可在/home/ftpuser
下创建子目录并设置权限:
sudo mkdir /home/ftpuser/upload sudo chown ftpuser:ftpuser /home/ftpuser/upload sudo chmod 755 /home/ftpuser/upload
配置防火墙和SELinux
防火墙配置
FTP服务默认使用21端口(控制连接)和被动模式端口(如10000-20000),需在防火墙中开放这些端口。
Ubuntu/Debian(使用ufw):
sudo ufw allow 21/tcp # 开放FTP控制端口 sudo ufw allow 10000:20000/tcp # 开放被动模式端口范围 sudo ufw reload
CentOS/RHEL(使用firewalld):
sudo firewall-cmd --permanent --add-service=ftp # 添加FTP服务(自动开放21端口) sudo firewall-cmd --permanent --add-port=10000-20000/tcp # 开放被动模式端口 sudo firewall-cmd --reload
SELinux配置(CentOS/RHEL系统默认开启)
如果系统开启SELinux,需设置允许FTP服务写入目录:
sudo setsebool -P ftpd_full_access on
测试FTP服务
使用命令行测试
在本地或另一台Linux系统上,使用ftp
命令连接服务器:
ftp [服务器IP地址]
输入用户名和密码后,若能成功登录并执行ls
、get
、put
等命令,说明配置成功。
使用图形化工具测试
推荐使用FileZilla等FTP客户端,输入服务器IP、用户名、密码和端口(默认21),连接后可测试文件上传下载功能。
常见问题排查
- 连接被拒绝:检查防火墙是否开放21端口和被动模式端口,vsftpd服务是否运行(
sudo systemctl status vsftpd
)。 - 无法上传文件:检查
write_enable
是否为YES
,用户目录权限是否正确(主目录755,上传目录775),SELinux是否限制(sudo setsebool -P ftpd_full_access on
)。 - 被限制在主目录后无法创建目录:确保
allow_writeable_chroot=YES
,或使用子目录(如/home/ftpuser/upload
)进行上传。
相关问答FAQs
问题1:如何限制FTP用户只能访问自己的主目录,且无法切换到上级目录?
解答:通过配置chroot_local_user=YES
(在/etc/vsftpd.conf
中)可将用户限制在其主目录内,确保主目录权限为755(所有者为root,用户组为用户组),用户对目录有执行权限(进入目录)和读权限(查看文件),但无法修改上级目录,用户ftpuser
的主目录为/home/ftpuser
,执行以下命令设置权限:
sudo chown root:ftpuser /home/ftpuser sudo chmod 755 /home/ftpuser
这样用户登录后只能看到/home/ftpuser
及其子目录内容,无法通过cd ..
切换到上级目录。
问题2:FTP连接时提示“530 Login incorrect”错误,如何解决?
解答:该错误通常由以下原因导致:
- 用户名或密码错误:确认输入的用户名和密码正确,可通过
sudo passwd [用户名]
重置密码。 - 用户被禁止登录:检查用户shell是否被设置为
/sbin/nologin
(仅允许FTP访问),若需允许SSH登录,可修改为/bin/bash
(sudo usermod -s /bin/bash [用户名]
)。 - PAM认证失败:检查
/etc/pam.d/vsftpd
配置是否正确,或尝试注释掉pam_shells.so
相关行(不推荐,仅临时排查)。 - 防火墙或SELinux拦截:检查防火墙是否开放21端口,SELinux是否允许FTP认证(
sudo getsebool -a | grep ftpd
,查看ftpd_full_access
状态)。
排查步骤:先确认用户密码正确,再检查用户shell和权限,最后检查防火墙/SELinux设置。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/23764.html