在Linux系统中,操作FTP(File Transfer Protocol,文件传输协议)通常包括两种场景:作为客户端连接远程FTP服务器上传/下载文件,或作为服务器搭建FTP服务供其他客户端访问,本文将详细介绍Linux下这两种场景的操作方法,涵盖命令行工具和图形化工具的使用,以及FTP服务器的配置步骤。
Linux客户端连接FTP服务器
作为客户端,Linux系统可通过内置命令行工具(如ftp
、lftp
)或第三方图形化工具(如FileZilla)连接FTP服务器,实现文件传输,以下是具体操作:
使用ftp
命令行工具(基础工具)
ftp
是Linux系统自带的FTP客户端,功能简单,适合基本操作。
安装:若系统未安装,可通过包管理器安装(以Ubuntu/Debian为例):
sudo apt update && sudo apt install ftp
连接FTP服务器:
ftp [服务器IP或域名]
例如连接IP为168.1.100
的FTP服务器:
ftp 192.168.1.100
登录:输入服务器分配的用户名和密码(若为匿名服务器,用户名通常为anonymous
,密码为任意邮箱或空)。
常用操作命令:
| 命令 | 功能描述 | 示例 |
|—————|———————————–|————————–|
| ls
| 查看服务器当前目录文件列表 | ls
|
| cd [目录名]
| 切换服务器目录 | cd pub
|
| lcd [路径]
| 切换本地客户端目录 | lcd /home/user/download
|
| get [文件名]
| 从服务器下载文件到本地当前目录 | get example.txt
|
| put [文件名]
| 上传本地当前目录文件到服务器 | put local.txt
|
| mget [文件名]
| 批量下载多个文件(支持通配符) | mget *.zip
|
| mput [文件名]
| 批量上传多个文件 | mput *.jpg
|
| ! [命令]
| 执行本地系统命令 | ! ls
(查看本地目录) |
| bye
或quit
| 退出FTP连接 | bye
|
注意事项:
- 默认情况下,
ftp
使用主动模式(Active Mode),若客户端防火墙严格,可能导致连接失败,需切换为被动模式:在FTP命令行输入passive
,此时数据连接由客户端主动发起。 - 传输过程中,可通过
hash
命令开启进度条显示(输入hash
后,每传输1024字节显示一个)。
使用lftp
命令行工具(增强工具)
lftp
是ftp
的增强版,支持多线程、断点续传、镜像同步等功能,更适合复杂场景。
安装:
# Ubuntu/Debian sudo apt install lftp # CentOS/RHEL sudo yum install lftp
连接与登录:
lftp ftp://[用户名]:[密码]@[服务器IP或域名]
例如匿名登录:
lftp ftp://anonymous:anonymous@192.168.1.100
常用操作命令:
| 命令 | 功能描述 | 示例 |
|————————–|———————————–|——————————-|
| ls
| 查看服务器目录 | ls
|
| cd [目录]
| 切换服务器目录 | cd /data
|
| lcd [路径]
| 切换本地目录 | lcd ~/upload
|
| get [文件]
| 下载文件(支持断点续传) | get large_file.zip
|
| put [文件]
| 上传文件 | put report.pdf
|
| mirror [本地目录] [远程目录]
| 同步目录(双向) | mirror -R local_dir remote_dir
(上传本地到远程) |
| pget [文件]
| 多线程下载(加速大文件下载) | pget large_file.zip -n 5
(5线程) |
| exit
| 退出连接 | exit
|
优势:
- 默认使用被动模式(PASV),兼容性更好;
- 支持书签功能(
bookmark add [名称]
保存连接,bookmark [名称]
快速连接); - 可通过
set ftp:passive-mode on/off
手动切换模式。
使用图形化工具(适合新手)
若不习惯命令行,可安装图形化FTP客户端,如FileZilla(跨平台,支持Linux)。
安装FileZilla:
# Ubuntu/Debian sudo apt install filezilla # CentOS/RHEL(需EPEL源) sudo yum install epel-release && sudo yum install filezilla
使用步骤:
- 打开FileZilla,点击“文件”→“站点管理器”,点击“新建站点”,命名站点(如“FTP服务器”);
- 在“常规”选项卡中填写:
- 主机:服务器IP或域名;
- 登录类型:选择“正常”(需用户名密码)或“匿名”;
- 用户名/密码:若选择“正常”,填写服务器分配的凭据;
- 点击“连接”,右侧窗口显示服务器文件列表,左侧为本地文件;
- 拖拽文件即可上传/下载,或右键文件选择“传输”。
优势:操作直观,支持拖拽、实时传输进度显示,适合不熟悉命令行的用户。
Linux搭建FTP服务器(以vsftpd为例)
若需在Linux服务器上搭建FTP服务,推荐使用vsftpd
(Very Secure FTP Daemon),轻量级且安全,是大多数Linux发行版的默认FTP服务器软件。
安装vsftpd
# Ubuntu/Debian sudo apt update && sudo apt install vsftpd # CentOS/RHEL sudo yum install vsftpd
配置vsftpd
核心配置文件为/etc/vsftpd/vsftpd.conf
,建议先备份原配置:
sudo cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
关键配置参数(编辑/etc/vsftpd/vsftpd.conf
):
| 参数 | 默认值 | 作用说明 |
|——————————-|———-|———————————–|
| anonymous_enable=NO
| YES | 是否允许匿名登录(建议关闭) |
| local_enable=YES
| NO | 是否允许本地用户登录 |
| write_enable=YES
| NO | 是否允许文件上传/修改 |
| chroot_local_user=YES
| NO | 是否限制用户仅能访问家目录 |
| allow_writeable_chroot=YES
| NO | 是否允许chroot目录写入(需配合chroot) |
| pasv_min_port=10000
| (无) | 被动模式最小端口(避免冲突) |
| pasv_max_port=10100
| (无) | 被动模式最大端口 |
| user_sub_token=$USER
| (无) | 动态设置用户目录(如local_root=/home/$USER/ftp
) |
示例配置(允许本地用户登录,限制在家目录,支持被动模式):
# 禁止匿名登录 anonymous_enable=NO # 允许本地用户登录 local_enable=YES # 允许写入 write_enable=YES # 限制用户在家目录(安全) chroot_local_user=YES # 允许chroot目录写入(CentOS 7+需开启) allow_writeable_chroot=YES # 被动模式端口范围 pasv_min_port=10000 pasv_max_port=10100 # 设置用户家目录为FTP根目录(可选) local_root=/home/$USER/ftp
创建FTP用户并设置权限
创建用户(例如创建用户ftpuser
):
sudo useradd -m -s /bin/bash ftpuser # 创建用户并分配家目录 sudo passwd ftpuser # 设置用户密码
创建FTP专用目录(可选,若未配置local_root
):
sudo mkdir -p /home/ftpuser/ftp sudo chown -R ftpuser:ftpuser /home/ftpuser/ftp # 设置目录所有者
配置防火墙与SELinux(CentOS/RHEL)
防火墙开放FTP端口:
sudo firewall-cmd --permanent --add-service=ftp # 允许FTP服务 sudo firewall-cmd --permanent --add-port=21/tcp # FTP命令端口 sudo firewall-cmd --permanent --add-port=10000-10100/tcp # 被动模式端口 sudo firewall-cmd --reload
SELinux设置(若开启SELinux):
sudo setsebool -P ftpd_full_access on # 允许FTP访问用户目录
启动并设置开机自启
# 启动vsftpd服务 sudo systemctl start vsftpd # 开机自启 sudo systemctl enable vsftpd # 查看服务状态 sudo systemctl status vsftpd
测试FTP服务器
在客户端(同一局域网或公网可访问的服务器)使用FileZilla或lftp
连接,输入服务器IP、用户名(ftpuser
)、密码,若能成功访问目录并上传/下载文件,则搭建成功。
相关问答FAQs
问题1:连接FTP服务器时提示“530 Login incorrect”,如何解决?
解答:
- 用户名/密码错误:确认输入的用户名和密码是否正确,区分大小写;
- 服务器未允许用户登录:检查vsftpd配置文件中
local_enable=YES
(本地用户)或anonymous_enable=YES
(匿名用户)是否开启; - 防火墙或SELinux拦截:若服务器为CentOS/RHEL,执行
getsebool -a | grep ftpd
检查ftpd_full_access
状态,若为off
,则需通过setsebool -P ftpd_full_access on
开启; - 用户被限制:若配置了
userlist_enable=YES
和userlist_file=/etc/vsftpd/user_list
,需检查/etc/vsftpd/user_list
中是否包含该用户(默认拒绝列表中的用户登录)。
问题2:如何限制FTP用户只能访问指定的目录(而非家目录)?
解答:
可通过local_root
和user_sub_token
参数为用户指定独立目录,步骤如下:
- 创建专用目录(例如
/var/ftp/share
):sudo mkdir -p /var/ftp/share sudo chown -R ftpuser:ftpuser /var/ftp/share # 设置目录所有者为FTP用户
- 修改vsftpd配置:
在/etc/vsftpd/vsftpd.conf
中添加:user_sub_token=$USER local_root=/var/ftp/$USER # 动态绑定用户目录(如用户ftpuser则访问/var/ftp/ftpuser)
或直接为指定用户设置固定目录(需在配置文件末尾添加):
local_root=/var/ftp/share # 所有FTP用户均访问此目录
- 重启vsftpd服务:
sudo systemctl restart vsftpd
用户登录后将只能被限制在指定的目录(如
/var/ftp/share
),无法访问上级目录,提升安全性。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/32950.html