第一部分:FTP 服务器端配置 (以 vsftpd 为例)
vsftpd (Very Secure FTP Daemon) 是在 Linux 系统上最流行、最安全的 FTP 服务器之一,我们将以此为例进行讲解。

安装 vsftpd
在基于 Debian/Ubuntu 的系统上:
sudo apt update sudo apt install vsftpd
在基于 CentOS/RHEL 的系统上:
sudo yum install vsftpd # 或者对于较新版本 sudo dnf install vsftpd
安装完成后,vsftpd 服务通常会自动启动。
主配置文件
vsftpd 的主配置文件是 /etc/vsftpd.conf,你可以使用 nano 或 vim 编辑器来修改它。

sudo nano /etc/vsftpd.conf
关键配置项代码示例
下面是一些 /etc/vsftpd.conf 文件中常用的配置项及其解释,你可以根据需要取消注释或修改它们。
# --- 匿名访问配置 --- # 允许匿名用户登录 (默认开启,不安全) # anonymous_enable=YES # 禁止匿名用户登录 (推荐) anonymous_enable=NO # --- 本地用户访问配置 --- # 允许本地系统用户登录 (默认开启) local_enable=YES # 允许本地用户对 FTP 目录有写权限 write_enable=YES # 本地用户的 FTP 目录 (默认为用户家目录) #local_root=/home/username/ftp # 限制用户不能离开其主目录 (非常重要!防止用户浏览系统其他文件) chroot_local_user=YES # 当 chroot_local_user=YES 时,需要下面这行来允许写入 allow_writeable_chroot=YES # --- 访问控制 --- # 允许使用本地用户名密码登录 local_enable=YES # 禁止 root 用户登录 # (注意:chroot_local_user=YES,root 用户可能无法登录,这是安全特性) # ftp_username=ftp # 允许使用用户列表 userlist_enable=YES # 指定允许登录的用户列表文件 userlist_file=/etc/vsftpd.user_list # 指定 userlist_file 中的用户是允许登录还是禁止登录 # NO: 允许列表中的用户登录,禁止列表外的用户 # YES: 禁止列表中的用户登录,允许列表外的用户 userlist_deny=NO # --- 日志记录 --- # 开启 FTP 日志记录 xferlog_enable=YES # 使用标准的 xferlog 日志格式 xferlog_std_format=YES # 指定日志文件路径 xferlog_file=/var/log/xferlog # --- 性能与安全 --- # 监听 IPv4 地址 listen=YES # (可选) 监听 IPv6 地址 # listen_ipv6=YES # 禁止匿名用户上传文件 # anon_upload_enable=NO # 禁止匿名用户创建目录 # anon_mkdir_write_enable=NO # 设置本地用户的 umask 值,控制新建文件/目录的权限 local_umask=022 # 设置最大客户端连接数 max_clients=100 # 设置每个 IP 的最大连接数 max_per_ip=5 # 启用数据连接端口 20 connect_from_port_20=YES # 启用 TCP Wrappers 主机访问控制 # tcp_wrappers=YES
创建 FTP 专用用户和目录
为了安全,最好为 FTP 创建一个专用的用户和目录。
# 1. 创建一个名为 ftpuser 的系统用户 # -d 指定家目录 # -s 指定一个不可登录的 shell (如 /sbin/nologin) sudo useradd -d /home/ftpuser -s /sbin/nologin ftpuser # 2. 为 ftpuser 设置密码 sudo passwd ftpuser # 3. 创建 FTP 文件根目录 sudo mkdir -p /home/ftpuser/ftp # 4. 设置目录的所有权 # 将 /home/ftpuser 目录的所有权给 ftpuser 用户和 ftpuser 组 sudo chown -R ftpuser:ftpuser /home/ftpuser # 5. 设置正确的目录权限 # 755 表示所有者可读/写/执行,组和其他用户可读/执行 sudo chmod -R 755 /home/ftpuser
创建用户白名单
根据 vsftpd.conf 中的 userlist_deny=NO 配置,我们需要创建一个允许登录的用户列表。
# 编辑 /etc/vsftpd.user_list 文件 sudo nano /etc/vsftpd.user_list # 在文件中添加你允许登录的用户名,每行一个 # ftpuser # another_allowed_user
启动并设置开机自启
# 启动 vsftpd 服务 sudo systemctl start vsftpd # 设置开机自启 sudo systemctl enable vsftpd # 检查服务状态 sudo systemctl status vsftpd
配置防火墙
你需要开放 FTP 服务的端口(默认为 21)以及数据连接的端口范围(被动模式)。

# 对于使用 UFW (Uncomplicated Firewall) 的系统 (如 Ubuntu) sudo ufw allow 21/tcp # 开放被动模式端口范围 (60000:60100) sudo ufw allow 60000:60100/tcp # 对于使用 firewalld 的系统 (如 CentOS/RHEL) sudo firewall-cmd --permanent --add-service=ftp sudo firewall-cmd --permanent --add-port=60000-60100/tcp sudo firewall-cmd --reload
你的 FTP 服务器已经配置完成,可以使用客户端连接了。
第二部分:FTP 客户端操作
在另一台 Linux 机器上,你可以使用命令行客户端来连接和操作 FTP 服务器。
安装 FTP 客户端
# Debian/Ubuntu sudo apt install ftp # CentOS/RHEL sudo yum install ftp # 或者 sudo dnf install ftp
常用 FTP 命令示例
打开终端,输入 ftp 命令连接到你的服务器。
ftp <你的服务器IP地址> # ftp 192.168.1.100
连接后,会提示你输入用户名和密码。
Name (192.168.1.100:your_local_user): ftpuser 331 Please specify the password. Password: 230 Login successful.
登录成功后,你将看到 ftp> 提示符,以下是常用命令:
# --- 帮助与退出 --- ftp> help # 显示所有可用命令 ftp> ? <command> # 查看特定命令的帮助, ? put ftp> bye # 退出 FTP 会话 # --- 目录操作 --- ftp> ls # 列出当前目录下的文件和文件夹 (长格式) ftp> dir # 列出当前目录下的文件和文件夹 (详细列表) ftp> lcd /path/to/local/dir # 切换本地机器的目录 ftp> pwd # 显示当前远程服务器的目录 ftp> cd /path/to/remote/dir # 切换远程服务器的目录 ftp> mkdir new_folder # 在远程服务器上创建新目录 # --- 文件传输 --- # 上传文件 (从本地到服务器) ftp> put local_file.txt remote_file.txt ftp> mput *.txt # 上传所有 .txt 文件 # 下载文件 (从服务器到本地) ftp> get remote_file.txt local_file.txt ftp> mget *.txt # 下载所有 .txt 文件 # --- 文件类型与模式 --- ftp> ascii # 设置传输模式为 ASCII (用于文本文件) ftp> binary # 设置传输模式为 Binary (用于图片、视频、压缩包等) ftp> passive # 进入被动模式 (如果遇到连接问题,常用) ftp> active # 进入主动模式
第三部分:使用现代替代方案 (SFTP)
强烈建议使用 SFTP (SSH File Transfer Protocol) 而不是 FTP,SFTP 通过 SSH 加密传输数据,比 FTP 安全得多,且在现代 Linux 系统上是标配。
SFTP 服务器端
SFTP 通常是 SSH 服务器 (sshd) 的一部分,默认情况下,只要你的 SSH 服务器在运行,SFTP 就已经可用了,你不需要安装额外的软件。
SFTP 客户端操作
使用 sftp 命令连接,它的交互式界面和命令与 ftp 非常相似。
sftp ftpuser@<你的服务器IP地址> # sftp ftpuser@192.168.1.100
登录后,你会看到 sftp> 提示符。
# --- 命令示例 --- sftp> help sftp> bye sftp> ls sftp> pwd sftp> lcd /local/path sftp> get remote_file.txt sftp> put local_file.txt sftp> mkdir new_folder
SFTP 是目前文件传输的推荐标准,因为它既方便又安全,只有在连接旧系统等特殊情况下才应考虑使用 FTP。
