在Linux系统中,FTP(File Transfer Protocol,文件传输协议)是一种常用的文件传输方式,主要用于在客户端和服务器之间进行文件的上传、下载等操作,Linux下既可以通过配置FTP服务端实现文件共享,也可以使用客户端工具连接远程FTP服务器,本文将从服务端搭建、客户端使用、常见问题解决等方面详细介绍Linux下如何使用FTP。
Linux下FTP服务端搭建(以vsftpd为例)
vsftpd(Very Secure FTP Daemon)是Linux下常用的FTP服务端软件,以其安全性高、稳定性强著称,以下是搭建vsftpd服务端的详细步骤:
安装vsftpd
不同Linux发行版的包管理器不同,安装命令如下:
- Ubuntu/Debian系统:
sudo apt update sudo apt install vsftpd -y
- CentOS/RHEL系统:
sudo yum install vsftpd -y
配置vsftpd
vsftpd的主配置文件为/etc/vsftpd/vsftpd.conf
,使用以下命令备份原配置文件后开始编辑:
sudo cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak sudo vim /etc/vsftpd/vsftpd.conf
以下是关键配置参数及说明(部分参数需根据需求调整):
参数名 | 默认值 | 说明 | 示例配置 |
---|---|---|---|
anonymous_enable | YES | 是否允许匿名登录 | anonymous_enable=NO |
local_enable | YES | 是否允许本地用户登录 | local_enable=YES |
write_enable | YES | 是否允许文件写入(上传、创建目录等) | write_enable=YES |
chroot_local_user | NO | 是否限制本地用户仅能访问其主目录 | chroot_local_user=YES |
allow_writeable_chroot | NO | 是否允许被chroot的用户拥有写权限(需与chroot_local_user配合) | allow_writeable_chroot=YES |
pasv_enable | YES | 是否启用被动模式(适用于内网环境,避免客户端主动连接被防火墙拦截) | pasv_enable=YES |
pasv_min_port | 60000 | 被动模式最小端口 | pasv_min_port=10000 |
pasv_max_port | 60100 | 被动模式最大端口 | pasv_max_port=10100 |
user_sub_token | $USER | 虚拟用户目录的用户名变量 | local_root=/home/$USER |
user_config_dir | /etc/vsftpd_user_conf | 虚拟用户配置文件目录 | user_config_dir=/etc/vsftpd_user_conf |
配置要点:
- 禁用匿名登录(
anonymous_enable=NO
),提升安全性; - 启用本地用户并限制其主目录(
chroot_local_user=YES
+allow_writeable_chroot=YES
),防止用户越权访问; - 若需支持被动模式,需开放
pasv_min_port
到pasv_max_port
的端口范围(如10000-10100),并在防火墙中放行。
创建FTP用户并设置权限
若使用本地用户登录,需创建或指定系统用户,并设置其主目录权限:
# 创建新用户(例如ftpuser),并设置主目录为/home/ftpuser sudo useradd -m -d /home/ftpuser -s /sbin/nologin ftpuser # 设置用户密码 sudo passwd ftpuser # 设置主目录权限(所有者为ftpuser,权限为755) sudo chown -R ftpuser:ftpuser /home/ftpuser sudo chmod -R 755 /home/ftpuser
若需限制用户仅能通过FTP登录(禁止SSH登录),可修改其shell为/sbin/nologin
(如上述命令所示)。
启动并设置开机自启
# 启动vsftpd服务 sudo systemctl start vsftpd # 设置开机自启 sudo systemctl enable vsftpd # 查看服务状态 sudo systemctl status vsftpd
防火墙配置
开放FTP默认端口(21)及被动模式端口(以10000-10100为例):
- Ubuntu/Debian(ufw防火墙):
sudo ufw allow 21/tcp sudo ufw allow 10000:10100/tcp sudo ufw reload
- CentOS/RHEL(firewalld防火墙):
sudo firewall-cmd --permanent --add-service=ftp sudo firewall-cmd --permanent --add-port=10000-10100/tcp sudo firewall-cmd --reload
Linux下FTP客户端使用
Linux下FTP客户端分为命令行工具和图形界面工具,以下是常用工具的使用方法:
命令行客户端:ftp(基础工具)
ftp
是Linux系统自带的FTP客户端,功能简单,适合快速操作。
基本步骤:
# 连接FTP服务器(格式:ftp [服务器IP/域名]) ftp 192.168.1.100 # 输入用户名和密码(若为匿名登录,用户名为anonymous,密码留空) Name: ftpuser Password: *******
常用命令:
| 命令 | 功能 | 示例 |
|————–|————————–|————————–|
| ls | 列出服务器当前目录文件 | ls |
| cd [目录名] | 切换服务器目录 | cd /home/ftpuser/upload |
| get [文件名] | 下载服务器文件到本地 | get test.txt |
| put [文件名] | 上传本地文件到服务器 | put local_file.txt |
| mget [文件名]| 批量下载文件(支持通配符)| mget .txt |
| mput [文件名]| 批量上传文件 | mput .log |
| ! [命令] | 执行本地系统命令 | ! ls -l |
| bye | 退出FTP连接 | bye |
注意事项:
ftp
命令传输文件为明文,安全性低,建议仅在可信网络中使用;- 若下载/上传大文件,建议使用
lftp
(支持断点续传)。
命令行客户端:lftp(增强工具)
lftp
功能更强大,支持多线程、断点续传、SFTP/FTPS等协议,推荐使用。
安装:
- Ubuntu/Debian:
sudo apt install lftp
- CentOS/RHEL:
sudo yum install lftp
基本使用:
# 连接服务器(格式:lftp [服务器IP/域名]) lftp 192.168.1.100 # 输入用户名和密码 lftp ftpuser@192.168.1.100:~> password
常用命令(与ftp
类似,但支持更多高级功能):
mirror [本地目录] [远程目录]
:同步本地和远程目录(双向);set ftp:passive-mode on
:开启被动模式(解决内网连接问题);pget [文件名]
:多线程下载大文件(格式:pget -n 8 large_file
,-n
为线程数)。
图形界面客户端:FileZilla
FileZilla是跨平台的FTP客户端,支持拖拽上传/下载、断点续传,适合不熟悉命令行的用户。
安装:
- Ubuntu/Debian:
sudo apt install filezilla
- CentOS/RHEL:需先安装EPEL源,
sudo yum install filezilla
使用步骤:
- 打开FileZilla,点击“文件”→“站点管理器”;
- 新建站点,设置“主机”(服务器IP)、“端口”(默认21)、“协议”(FTP)、“加密”(使用“普通FTP”即可,若需加密选“使用FTPES”);
- 输入“用户名”和“密码”,点击“连接”;
- 连接成功后,左侧为本地文件,右侧为远程服务器文件,拖拽即可传输。
常见问题与注意事项
-
问题:客户端连接FTP服务器时提示“530 Login incorrect”。
原因:用户名或密码错误;用户被禁止登录(如shell为/sbin/nologin
但未配置FTP权限)。
解决:检查用户名密码,确认用户shell是否为/bin/bash
(或允许登录的shell),或修改/etc/vsftpd/ftpusers
(禁止登录的用户列表)和/etc/vsftpd/user_list
(默认禁止登录,需配置userlist_enable=NO
或userlist_deny=NO
)。 -
问题:被动模式下连接超时。
原因:服务器未开放被动模式端口,或客户端防火墙拦截了被动端口。
解决:确认服务器vsftpd.conf
中pasv_enable=YES
及端口范围,并在服务器防火墙和客户端防火墙中开放对应端口。 -
问题:用户无法上传文件,提示“553 Could not create file”。
原因:目录权限不足(如主目录权限为755,但上传子目录无写权限)。
解决:检查目录权限,确保用户对目标目录有写权限(如chmod 755 /home/ftpuser/upload
)。
相关问答FAQs
Q1:为什么推荐使用SFTP而不是FTP?
A:FTP协议在传输过程中,用户名、密码及文件数据均为明文传输,容易被网络中间人窃取,安全性较低,而SFTP(SSH File Transfer Protocol)基于SSH协议,所有数据均经过加密传输,安全性更高,且支持文件权限、属性等高级功能,是目前Linux环境下文件传输的首选方案,若需使用SFTP,只需在服务器上启用SSH服务(默认已安装),客户端使用sftp
命令或FileZilla的SFTP协议即可连接。
Q2:使用ftp
命令下载文件时,如何指定本地保存路径?
A:在ftp
客户端中,可通过lcd
命令切换本地保存路径,需将下载文件保存到/home/user/download
目录,操作步骤如下:
ftp> lcd /home/user/download # 切换本地路径 ftp> get remote_file.txt # 下载文件到当前本地路径
若需在下载时直接重命名文件,可在get
命令后指定新名称,如get remote_file.txt local_file.txt
。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/31034.html