在Linux系统中,FTP(File Transfer Protocol)服务是一种常用的文件传输方式,适用于服务器间文件共享、用户文件上传下载等场景,本文将以主流的FTP服务器软件vsftpd(Very Secure FTP Daemon)为例,详细讲解在Linux系统中安装、配置FTP服务的完整流程,涵盖环境准备、软件安装、参数配置、用户管理、防火墙设置及测试验证等环节,帮助读者快速搭建安全稳定的FTP服务。
安装前环境准备
在开始安装FTP服务前,需确保系统满足基本条件,并完成以下准备工作:
- 系统环境检查:确保Linux系统已正确安装,本文以CentOS 7/8和Ubuntu 20.04为例,其他发行版命令略有差异,但核心逻辑一致。
- 网络连接:确保系统可访问外部网络,用于下载安装包(若使用离线安装,需提前下载rpm/deb包)。
- 管理员权限:安装软件及修改系统配置需root权限或sudo权限。
安装vsftpd软件包
vsftpd是Linux下安全性较高、性能稳定的FTP服务器软件,支持匿名访问、本地用户访问、虚拟用户等多种模式,推荐作为FTP服务首选。
CentOS/RHEL系统(使用yum/dnf安装)
# 更新软件包缓存 sudo yum update -y # 安装vsftpd sudo yum install vsftpd -y
Ubuntu/Debian系统(使用apt安装)
# 更新软件包列表 sudo apt update # 安装vsftpd sudo apt install vsftpd -y
安装完成后,vsftpd服务会自动启动,可通过以下命令检查状态:
sudo systemctl status vsftpd
配置vsftpd核心参数
vsftpd的配置文件位于/etc/vsftpd/vsftpd.conf
,通过修改该文件可控制FTP服务的各项行为,建议先备份原配置文件,再进行修改:
sudo cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
以下是关键参数的说明及配置建议,可通过vim
或nano
编辑器修改配置文件:
参数名 | 含义 | 默认值 | 建议值 | 说明 |
---|---|---|---|---|
anonymous_enable | 是否允许匿名用户访问 | YES | NO | 生产环境建议关闭,避免安全风险 |
local_enable | 是否允许本地用户登录 | YES | YES | 需开启以支持系统用户访问 |
write_enable | 是否允许文件上传/修改 | NO | YES | 根据需求开启,需配合权限控制 |
chroot_local_user | 是否限制用户仅访问家目录 | NO | YES | 提升安全性,防止用户越权访问 |
allow_writeable_chroot | 是否允许chroot目录可写 | NO | YES(需配合chroot_local_user) | 解决chroot目录下无法上传的问题 |
pasv_enable | 是否启用被动模式 | NO | YES | 被动模式可穿透防火墙,建议开启 |
pasv_min_port | 被动模式最小端口 | 0 | 1024 | 需与防火墙规则配合,避免端口冲突 |
pasv_max_port | 被动模式最大端口 | 0 | 65535 | 同上,建议设置1024-65535 |
userlist_enable | 是否启用用户列表文件 | YES | YES | 结合userlist_file限制登录用户 |
userlist_file | 用户列表文件路径 | /etc/vsftpd/user_list | /etc/vsftpd/user_list | 仅列表中用户可登录(若userlist_deny=YES) |
示例配置(/etc/vsftpd/vsftpd.conf
):
anonymous_enable=NO local_enable=YES write_enable=YES chroot_local_user=YES allow_writeable_chroot=YES pasv_enable=YES pasv_min_port=1024 pasv_max_port=65535 userlist_enable=YES userlist_file=/etc/vsftpd/user_list userlist_deny=NO # 仅允许user_list中的用户登录
创建FTP用户并设置权限
创建本地用户
若使用本地用户登录FTP,需创建系统用户并设置密码,例如创建用户ftpuser
,家目录为/home/ftpuser
:
# 创建用户(家目录自动生成) sudo useradd -m -d /home/ftpuser -s /sbin/nologin ftpuser # 设置用户密码 sudo passwd ftpuser
说明:
-s /sbin/nologin
表示禁止用户通过SSH登录,仅允许FTP访问,提升安全性。
设置用户目录权限
确保FTP用户对其家目录有读写权限,且家目录及其上级目录权限设置正确(避免chroot失败):
# 设置家目录所有者为ftpuser sudo chown -R ftpuser:ftpuser /home/ftpuser # 设置家目录权限(755,所有者可读写执行,其他用户可读执行) sudo chmod -R 755 /home/ftpuser
配置用户列表(可选)
若启用了userlist_deny=NO
,需将允许登录的用户添加到/etc/vsftpd/user_list
文件中(每行一个用户名):
echo "ftpuser" | sudo tee -a /etc/vsftpd/user_list
防火墙与SELinux配置
防火墙设置
FTP服务默认使用20(数据端口)和21(控制端口),若开启被动模式,还需开放pasv_min_port
到pasv_max_port
的端口范围。
CentOS/RHEL(firewalld):
# 开放FTP服务(自动开放20和21端口) sudo firewall-cmd --permanent --add-service=ftp # 开放被动模式端口范围(以1024-65535为例) sudo firewall-cmd --permanent --add-port=1024-65535/tcp # 重载防火墙规则 sudo firewall-cmd --reload
Ubuntu/Debian(ufw):
# 开放20和21端口 sudo ufw allow 20/tcp sudo ufw allow 21/tcp # 开放被动模式端口范围 sudo ufw allow 1024:65535/tcp # 启用防火墙(若未启用) sudo ufw enable
SELinux配置(CentOS/RHEL)
若系统启用SELinux,需设置允许FTP访问家目录,否则可能导致chroot失败或无法上传文件:
# 设置SELinux布尔值,允许FTP用户家目录写入 sudo setsebool -P ftpd_full_access on # 查看SELinux状态 sestatus | grep ftpd_full_access
启动vsftpd服务并测试
启动并设置开机自启
# 启动vsftpd服务 sudo systemctl start vsftpd # 设置开机自启 sudo systemctl enable vsftpd
测试FTP服务
(1)命令行测试(使用ftp客户端)
# 连接本机FTP服务(用户名为ftpuser,密码为设置的密码) ftp localhost
登录成功后,可使用以下命令:
put
:上传文件get
:下载文件ls
:列出文件bye
:退出
(2)图形界面测试(使用FileZilla)
- 主机:
服务器IP地址
- 端口:
21
- 用户名:
ftpuser
- 密码:
用户密码
- 协议:
FTP
(若需加密,可选择FTPS,需额外配置SSL证书)
若连接失败,检查以下问题:
- 服务是否启动(
systemctl status vsftpd
) - 防火墙是否开放端口(
firewall-cmd --list-ports
) - 用户是否在user_list中(若启用用户列表)
- SELinux是否阻止访问(
grep avc /var/log/audit/audit.log
)
常见问题与维护
FAQs
问题1:FTP用户登录后无法上传文件,报错“550 Permission denied”?
解答:
- 检查
write_enable
是否在配置文件中设置为YES
; - 确认用户家目录权限为755(
chmod 755 /home/ftpuser
),文件权限为644(chmod 644 /home/ftpfile
); - 若使用SELinux,执行
setsebool -P ftpd_full_access on
允许写入; - 检查
allow_writeable_chroot
是否设置为YES
(需配合chroot_local_user=YES
)。
问题2:如何配置FTP被动模式,解决客户端连接超时问题?
解答:
被动模式(Passive Mode)可解决NAT环境下FTP客户端连接问题,配置步骤如下:
- 在
vsftpd.conf
中启用被动模式:pasv_enable=YES pasv_min_port=1024 pasv_max_port=65535
- 防火墙开放被动模式端口范围(如1024-65535);
- 客户端(如FileZilla)选择“被动模式”(Passive Mode),连接即可正常传输文件。
通过以上步骤,即可完成Linux系统中FTP服务的安装与配置,实际应用中,可根据需求调整参数(如限制用户带宽、启用SSL加密等),并定期检查日志文件(/var/log/vsftpd.log
)排查问题,确保服务稳定运行。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/33198.html