Linux搭建FTP详细流程

一、介绍

文件传输协议(File Transfer Protocol,FTP),是一种在互联网中进行文件传输的协议,基于客户端/服务器模式,默认使用 20、21 号端口,其中 20 端口是数据端口用于进行数据传输,21 端口为命令端口,用于接收客户端发出的相关 FTP 命令和参数。FTP 是 C/S 架构,也就是基于客户端/服务器的模式,FTP 服务器是按照 FTP 协议在互联网上提供文件存储和访问服务的主机,FTP 客户端则是向服务器发送连接请求,以建立数据传输链路的主机。

二、工作模式

FTP 协议工作模式有两种:主动模式和被动模式,其中被动模式是默认的工作模式。

主动模式:FTP 服务器主动向客户端发起连接请求。

被动模式:FTP 服务器等待客户端发起连接请求。

三、关闭Selinux和防火墙

复制代码
# 临时关闭selinux
setenforce 0
# 永久关闭selinux
vim /etc/selinux/config
#将SELINUX=enforcing改为SELINUX=disabled,然后保存退出
# 关闭firewalld
systemctl stop firewalld

四、yum安装ftp

复制代码
# 查询是有安装ftp
rpm -qa|grep vsftpd
# 卸载 vsftpd
yum remove vsftpd
# yum安装ftp
yum install -y vsftpd

五、相关检查命令

复制代码
# 查看版本号信息
vsftpd -v
# 查看ftp状态
systemctl status vsftpd.service
# 启动ftp
systemctl start vsftpd.service
# 关闭ftp
systemctl stop vsftpd.service
# 查询端口
ss -anp | grep 21
# 不关闭设置SELinux
getenforce
# 临时关闭开启
setenforce 0/1
# 查看与ftp域相关的策略
getsebool -a | grep ftp
setsebool -P ftpd_full_access on
# 不关闭防火墙的情况下
firewall-cmd --permanent --zone=public --add-service=ftp
firewall-cmd --reload
# 设置开机自启
sudo systemctl enable vsftpd

配置防火墙

确保防火墙允许 FTP 流量。如果使用的是 firewalld:

  1. 允许 FTP 服务

    复制代码
    sudo firewall-cmd --permanent --add-service=ftp
    sudo firewall-cmd --reload

创建虚拟用户环境

为了创建虚拟用户,我们首先需要安装db4-utils包来生成数据库文件,这个文件将用于存储虚拟用户的凭证。

  1. 安装 db4-utils

    复制代码
    sudo yum install db4-utils -y
  2. 创建一个用户列表文件 。例如/etc/vsftpd/virtual_users.txt,格式为每行一个用户名,然后是密码:

    复制代码
    user1
    password1
    user2
    password2
  3. 生成数据库文件

    复制代码
    sudo db_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db
  4. 更改文件权限 以保护用户数据:

    复制代码
    sudo chmod 600 /etc/vsftpd/virtual_users.db

六、虚拟用户环境配置

编辑配置文件/etc/vsftpd/vsftpd.conf来设置虚拟用户的环境。

复制代码
vim /etc/vsftpd/vsftpd.conf

配置 PAM 身份验证

为了使 vsftpd 使用虚拟用户进行身份验证,需要编辑 PAM 配置文件。

  1. 编辑 PAM 文件 /etc/pam.d/vsftpd,添加以下两行:

    注意:如果有问题,则把/etc/pam.d/vsftpd中其他所有的数据删除 再插入这两行

    复制代码
    auth    required        pam_userdb.so db=/etc/vsftpd/virtual_users
    account required        pam_userdb.so db=/etc/vsftpd/virtual_users

基本配置修改

  1. 备份原始配置文件

    bash

    深色版本

    复制代码
    sudo cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
  2. 编辑配置文件 /etc/vsftpd/vsftpd.conf,根据需要调整或添加以下设置:

    深色版本

    复制代码
    anonymous_enable=NO
    local_enable=YES
    write_enable=YES
    local_umask=022
    dirmessage_enable=YES
    xferlog_enable=YES
    connect_from_port_20=YES
    xferlog_std_format=YES
    listen=NO
    listen_ipv6=YES
    
    # 以上为默认 以下为新增
    listen_ipv6=YES
    
    pam_service_name=vsftpd
    userlist_enable=YES
    tcp_wrappers=YES
    
    listen_port=9021
    
    # 使用本地用户作为虚拟用户
    guest_enable=YES
    
    # 指定虚拟用户的用户名
    guest_username=ftpuser
    
    chroot_local_user=YES
    guest_enable=YES
    user_sub_token=$USER
    local_root=/home/ftpuser
    pam_service_name=vsftpd
    user_config_dir=/etc/vsftpd/vsftpd_user_conf
    virtual_use_local_privs=YES
    
    pasv_enable=YES
    pasv_address=132.232.124.126
    pasv_promiscuous=NO
    pasv_min_port=10000
    pasv_max_port=10100
  3. 为每个虚拟用户创建一个目录 ,并将它们指向正确的本地根目录。例如,对于user1,可以这样做:

    复制代码
    sudo mkdir -p /home/ftpuser
    sudo chown nobody:nobody /home/ftpuser
    sudo chmod 777 /home/ftpuser
  4. 可选 :为每个用户创建单独的配置文件,放置在/etc/vsftpd/user_conf目录下。例如,为user1创建配置文件:

    复制代码
    sudo mkdir -p /etc/vsftpd/user_conf
    sudo touch /etc/vsftpd/user_conf/ftpuser
  5. 重启 vsftpd 服务 以应用更改:

    复制代码
    sudo systemctl restart vsftpd
相关推荐
Dola_Zou3 分钟前
Linux工控机核心算法防逆向与自动化加固方案
linux·自动化·软件加密
欧米欧25 分钟前
解析Linux从umask位运算到粘滞位
linux
郝学胜-神的一滴37 分钟前
C++20模板元编程 04:变量模板 别名模板与模板Lambda实战
服务器·开发语言·数据结构·c++·程序人生
江屿风1 小时前
【Linux系统】【Linux进程终止等待详解与程序替换机制初体验】流食般投喂
linux·运维·笔记·系统架构·centos·unix
螺蛳粉 螺蛳粉1 小时前
CentOS 7.9 自建 Yum 源服务器搭建指南
linux·服务器·centos
赋创小助手1 小时前
Qwen3.8-27B 本地推理 Benchmark 解析:llama.cpp、vLLM、SGLang 与长 Context 的性能差异
服务器·人工智能·大模型·qwen·vllm·sglang·context长度
2601_949499941 小时前
工业 POF 器件国产化新思路:芯瑞科技DT‑2532Z 解决安华高 HFBR‑2532Z 供应链卡点
运维·网络·人工智能·科技·光模块
fanxiaohui121381 小时前
2026符合上飞机标准的充电宝推荐南孚传应,质量稳定又安全
运维·服务器·人工智能·科技
国际云,接待1 小时前
云服务器跨厂商迁移怎么尽量不停机:用 rsync、MySQL binlog 和 DNS TTL 做双阶段切换
运维·服务器·mysql
Doris__HE2 小时前
【元脑服务器NF8260G7-NF8260M7技术规格分享】
运维·服务器·网络·数据库·性能优化