在Linux系统中,FTP(File Transfer Protocol)服务是一种常用的文件传输方式,特别适合在不同系统间共享文件,本文将以最常用的FTP服务器软件vsftpd(Very Secure FTP Daemon)为例,详细介绍如何在Linux系统中安装、配置和启动FTP服务,包括用户管理、防火墙设置及常见问题排查等步骤。
检查系统是否已安装vsftpd
在开始配置前,需确认系统中是否已安装vsftpd,不同Linux发行版的检查命令略有差异:
-
CentOS/RHEL系统:
使用rpm
命令检查:rpm -q vsftpd
若返回类似
vsftpd-3.0.3-28.el7.x86_64
的结果,表示已安装;若提示“package vsftpd is not installed”,则需安装。 -
Ubuntu/Debian系统:
使用dpkg
命令检查:dpkg -l | grep vsftpd
若输出包含
vsftpd
,则已安装;否则需安装。
安装vsftpd
若系统中未安装vsftpd,可通过以下命令安装:
-
CentOS/RHEL系统(使用yum/dnf):
yum install vsftpd -y # CentOS 7及以下 # 或 dnf install vsftpd -y # CentOS 8及以上
-
Ubuntu/Debian系统:
apt update apt install vsftpd -y
安装完成后,vsftpd的配置文件默认位于/etc/vsftpd/vsftpd.conf
,主程序文件位于/usr/sbin/vsftpd
。
配置vsftpd
vsftpd的配置功能通过vsftpd.conf
文件实现,以下是核心参数的配置说明及操作步骤:
备份原始配置文件
修改配置前,建议先备份原始文件,以便出错时恢复:
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
编辑配置文件
使用vi
或nano
编辑器打开配置文件:
vi /etc/vsftpd/vsftpd.conf
核心参数配置
以下是常用参数及其作用,可根据需求调整:
参数 | 默认值 | 说明 | 推荐值 |
---|---|---|---|
anonymous_enable |
YES | 是否允许匿名用户登录 | NO(禁止匿名访问,提升安全性) |
local_enable |
YES | 是否允许本地用户登录 | YES |
write_enable |
YES | 是否允许文件上传/修改 | YES(需结合权限控制) |
local_umask |
022 | 本地用户上传文件的默认权限掩码 | 022(上传文件权限为644,目录为755) |
dirmessage_enable |
YES | 是否显示目录消息文件内容 | YES |
xferlog_enable |
YES | 是否启用传输日志 | YES |
xferlog_std_format |
NO | 是否使用标准xferlog日志格式 | YES(与wu-ftpd兼容) |
chroot_local_user |
NO | 是否将本地用户限制在主目录 | YES(防止用户访问系统敏感目录) |
allow_writeable_chroot |
NO | 是否允许chroot目录可写 | YES(需配合chroot_local_user=YES ,否则用户无法登录) |
pasv_enable |
YES | 是否启用被动模式 | YES(避免防火墙主动连接问题) |
pasv_min_port |
0 | 被动模式最小端口 | 30000 |
pasv_max_port |
0 | 被动模式最大端口 | 31000 |
user_sub_token |
NONE | 用户目录替换标记(如local_root=/home/$USER ) |
$USER |
local_root |
NONE | 本地用户登录后的根目录 | 可设置为共享目录路径,如/var/ftp/share |
关键配置示例
以下是针对“允许本地用户登录,限制在主目录,启用被动模式”的配置片段:
# 禁止匿名登录 anonymous_enable=NO # 允许本地用户登录 local_enable=YES # 允许文件操作 write_enable=YES # 本地用户上传文件权限掩码 local_umask=022 # 将用户限制在主目录 chroot_local_user=YES # 允许chroot目录可写(需配合chroot_local_user) allow_writeable_chroot=YES # 启用被动模式 pasv_enable=YES pasv_min_port=30000 pasv_max_port=31000 # 日志配置 xferlog_enable=YES xferlog_std_format=YES log_ftp_protocol=YES
创建FTP用户及目录
创建本地用户
若需为FTP服务创建专用用户(避免直接使用系统用户),可执行以下命令:
useradd -m -s /sbin/nologin ftpuser # 创建用户,家目录为/home/ftpuser,禁止系统登录 passwd ftpuser # 设置用户密码
参数说明:
-m
:自动创建家目录;-s /sbin/nologin
:禁止用户通过SSH等方式登录系统,仅允许FTP访问。
设置用户目录权限
确保FTP用户对其目录有读写权限:
chmod 755 /home/ftpuser # 目录权限:所有者可读写执行,其他用户可读执行 chown ftpuser:ftpuser /home/ftpuser # 设置目录所有者为ftpuser
可选:创建共享目录
若需要多个用户访问同一目录,可创建共享目录并设置权限:
mkdir -p /var/ftp/share chmod 775 /var/ftp/share chown root:ftpgroup /var/ftp/share # 创建用户组并设置所有者 usermod -a -G ftpgroup ftpuser # 将ftpuser加入ftpgroup组
配置防火墙
Linux系统默认启用防火墙,需开放FTP相关端口才能正常访问:
CentOS/RHEL系统(firewalld)
# 添加FTP服务到防火墙规则(自动开放21端口及被动模式端口) firewall-cmd --permanent --add-service=ftp # 开放被动模式端口范围(30000-31000) firewall-cmd --permanent --add-port=30000-31000/tcp # 重新加载防火墙规则 firewall-cmd --reload
Ubuntu/Debian系统(ufw)
# 开放21端口(FTP控制端口) ufw allow 21/tcp # 开放被动模式端口范围 ufw allow 30000:31000/tcp # 启用防火墙(若未启用) ufw enable
启动并设置开机自启
启动vsftpd服务
# CentOS/RHEL systemctl start vsftpd # Ubuntu/Debian systemctl start vsftpd
设置开机自启
# CentOS/RHEL systemctl enable vsftpd # Ubuntu/Debian systemctl enable vsftpd
检查服务状态
systemctl status vsftpd
若显示“active (running)”,则服务已正常启动。
测试FTP服务
使用命令行测试(Linux系统)
安装lftp
工具(若未安装):
- CentOS:
yum install lftp -y
- Ubuntu:
apt install lftp -y
执行以下命令连接FTP服务器:
lftp ftpuser@服务器IP
输入密码后,执行ls
查看文件列表,put
上传文件,get
下载文件,测试传输功能。
使用图形化工具测试
在Windows或macOS系统中,使用FileZilla等FTP客户端连接,参数如下:
- 主机:服务器IP地址
- 端口:21(默认FTP端口)
- 用户名:ftpuser
- 密码:用户密码
- 加密:使用“普通”(FTP)或“使用隐式FTP over TLS”(FTPS,需额外配置SSL)
常见问题排查
-
无法连接,提示“连接超时”:
检查防火墙是否开放21端口和被动模式端口,或临时关闭防火墙测试:systemctl stop firewalld
(CentOS)或ufw disable
(Ubuntu)。 -
用户登录失败,提示“530 Login incorrect”:
- 检查用户密码是否正确;
- 确认
vsftpd.conf
中local_enable=YES
; - 若使用
chroot
,检查用户目录权限是否为755,且用户对目录有执行权限。
FAQs
问题1:如何限制FTP用户只能上传文件,不能下载?
解答:可通过设置文件权限实现,将FTP用户上传的文件权限设置为000(仅所有者可读写),具体步骤:
- 在
vsftpd.conf
中添加local_umask=006
(上传文件权限为600,目录为700); - 创建目录后执行:
chmod 700 /home/ftpuser/upload
(仅用户可访问),用户上传的文件需通过其他方式(如SSH)由管理员下载。
问题2:如何启用FTP over SSL/TLS(FTPS)加密传输?
解答:vsftpd支持FTPS,需生成SSL证书并修改配置:
- 生成自签名证书:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem
; - 修改
vsftpd.conf
,添加以下参数:ssl_enable=YES allow_anon_ssl=NO force_local_data_ssl=YES force_local_logins_ssl=YES ssl_tlsv1=YES ssl_sslv2=NO ssl_sslv3=NO rsa_cert_file=/etc/vsftpd/vsftpd.pem
- 重启vsftpd服务:
systemctl restart vsftpd
; - 客户端连接时选择“使用显式FTP over TLS”或“FTPS”模式。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/33030.html