Linux系统下使用FTP(File Transfer Protocol,文件传输协议)是常见的文件传输方式,尤其适用于服务器与客户端之间的文件共享,FTP基于TCP协议,使用21端口进行控制连接,20端口传输数据,支持上传、下载、目录浏览等操作,以下从服务端配置、客户端连接、常用命令及安全注意事项等方面详细介绍Linux下FTP的使用方法。

FTP服务端安装与配置(以vsftpd为例)
vsftpd(Very Secure FTP Daemon)是Linux下常用的FTP服务端软件,因其安全性高、配置简单而被广泛使用。
安装vsftpd
以Debian/Ubuntu系统为例,使用apt安装:
sudo apt update sudo apt install vsftpd
以CentOS/RHEL系统为例,使用yum安装:
sudo yum install vsftpd
配置vsftpd
安装完成后,配置文件位于/etc/vsftpd.conf,可通过修改该文件实现功能控制,以下是关键配置项及说明:
| 配置项 | 默认值 | 说明 |
|---|---|---|
| anonymous_enable | NO | 是否允许匿名用户登录,建议关闭(安全) |
| local_enable | YES | 是否允许本地用户登录 |
| write_enable | YES | 是否允许本地用户上传/修改文件 |
| chroot_local_user | NO | 是否将本地用户限制在其家目录内(防止越权访问) |
| pasv_enable | YES | 是否启用被动模式(推荐开启,避免防火墙问题) |
| pasv_min_port | 60000 | 被动模式最小端口 |
| pasv_max_port | 60000 | 被动模式最大端口(需与防火墙放行端口范围一致) |
| userlist_enable | YES | 是否启用用户列表(/etc/vsftpd.user_list控制允许/拒绝的用户) |
示例配置(允许本地用户登录,限制在家目录,启用被动模式):
sudo nano /etc/vsftpd.conf
anonymous_enable=NO local_enable=YES write_enable=YES chroot_local_user=YES pasv_enable=YES pasv_min_port=60000 pasv_max_port=60100 allow_writeable_chroot=YES # 解决chroot后无法写入的问题(vsftpd 3.0+需添加)
创建FTP用户并设置权限
假设创建一个名为ftpuser的用户,家目录为/home/ftpuser:

sudo useradd -m -d /home/ftpuser -s /sbin/nologin ftpuser # 创建用户,禁止SSH登录 sudo passwd ftpuser # 设置用户密码
若需限制用户仅能通过FTP访问,可将其加入/etc/vsftpd.user_list文件:
echo "ftpuser" | sudo tee -a /etc/vsftpd.user_list
启动并设置开机自启
sudo systemctl start vsftpd sudo systemctl enable vsftpd
防火墙配置
开放FTP相关端口(21控制端口,被动模式数据端口60000-60100):
sudo ufw allow 21/tcp sudo ufw allow 60000:60100/tcp sudo ufw reload
FTP客户端连接与操作
Linux下常用的FTP客户端命令工具有ftp(基础工具)和lftp(增强工具,支持多线程、断点续传等)。
使用ftp命令连接服务端
ftp ftp服务器IP或域名
例如连接本地服务端:
ftp 127.0.0.1
输入用户名和密码后登录成功,进入FTP命令行界面。
ftp常用命令
| 命令 | 功能 | 示例 |
|---|---|---|
| ls | 列出当前目录文件 | ls |
| cd 目录名 | 切换目录 | cd /home/ftpuser/upload |
| get 文件名 | 下载文件到本地 | get test.txt |
| put 文件名 | 上传本地文件到服务端 | put local.txt |
| mget 文件名 | 批量下载文件(支持通配符) | mget *.txt |
| mput 文件名 | 批量上传文件 | mput *.log |
| pwd | 显示当前服务端目录 | pwd |
| ! 命令 | 执行本地系统命令 | ! ls /tmp |
| bye | 退出FTP连接 | bye |
示例操作:

ftp> 192.168.1.100 # 连接服务端 Name: (none): ftpuser # 输入用户名 331 Please specify the password. Password: # 输入密码(不显示) 230 Login successful. ftp> pwd # 查看当前目录 257 "/home/ftpuser" is current directory. ftp> lcd /tmp # 切换本地工作目录 Local directory now /tmp ftp> put test.txt # 上传本地test.txt到服务端 local: test.txt remote: test.txt 226 Transfer complete. ftp> get remote.txt # 下载服务端remote.txt到本地 local: remote.txt remote: remote.txt 226 Transfer complete. ftp> bye 221 Goodbye.
使用lftp(推荐)
lftp功能更强大,支持自动重连、断点续传、多线程传输等,安装方式:
sudo apt install lftp # Debian/Ubuntu sudo yum install lftp # CentOS/RHEL
连接与操作示例:
lftp ftpuser@192.168.1.100 # 直接通过命令行登录 lftp ftpuser@192.168.1.100:~> ls # 列出服务端目录 lftp ftpuser@192.168.1.100:~> lcd /home/user # 切换本地目录 lftp ftpuser@192.168.1.100:~> put large_file.zip # 上传(支持断点续传:-c) lftp ftpuser@192.168.1.100:~> mirror -R /local/dir /remote/dir # 本地目录同步到服务端(-R表示反向) lftp ftpuser@192.168.1.100:~> bye # 退出
安全注意事项
- 避免明文传输:FTP默认使用明文传输用户名和密码,数据易被窃听,建议使用FTPS(FTP over SSL/TLS)或SFTP(基于SSH的文件传输,非FTP协议)替代。
- 配置FTPS:在
vsftpd.conf中添加ssl_enable=YES、force_local_data_ssl=YES等,并配置SSL证书。
- 配置FTPS:在
- 限制用户权限:通过
chroot_local_user限制用户在家目录,避免越权访问系统文件。 - 禁用匿名登录:确保
anonymous_enable=NO,防止恶意用户通过匿名账号上传恶意文件。
相关问答FAQs
Q1: Linux下FTP连接失败,提示“Connection refused”怎么办?
A1: 主要检查以下三点:
- 服务端是否启动:运行
sudo systemctl status vsftpd,若未启动则执行sudo systemctl start vsftpd。 - 防火墙是否拦截端口:确认
21(控制端口)和被动模式数据端口(如60000-60100)已放行,可通过sudo ufw status查看。 - 服务端配置是否正确:检查
/etc/vsftpd.conf中listen=YES(若为IPv4)或listen_ipv6=YES(若为IPv6),确保服务监听状态正常。
Q2: FTP和SFTP有什么区别?如何选择?
A2:
- 协议基础:FTP是独立的文件传输协议(端口21),SFTP是基于SSH协议的文件传输(端口22),属于SSH的一部分。
- 安全性:FTP传输数据为明文,易被窃听;SFTP通过SSH加密传输,安全性更高。
- 功能:FTP支持主动/被动模式,适合大文件传输;SFTP支持目录同步、权限控制(基于Linux用户权限),更适合需要加密的场景。
- 选择建议:若传输敏感数据(如密码、配置文件),优先使用SFTP;若仅需普通文件传输且网络环境安全,可使用FTP。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/33034.html