ftp服务与虚拟用户配置

简介

将某台计算机中的文件通过网络传送到可能相距很远的另一台计算机中,即文件传输, 是一项基本的网络应用。很多时候有这样的需求:网站设计者将构成网站内容的文件批量上传到他们的Web服务器,计算机之间批量传输文件等,而ftp协议可以很好地满足这种需求。

ftp(file transport protocol)文件传输协议,是TCP/IP协议组中的协议。ftp协议包含两个部分,1是服务器,2是客户端。其中ftp服务器用来存储文件,而客户端通过ftp协议访问ftp服务器上的资源。

默认情况下,ftp协议使用20和21端口,其中20用于传输数据21用于传输控制信息

ftp服务(Very Secure FTP Daemons, vsftpd)安装

  1. yum下载

    1
    sudo yum install vsftpd
  2. 开启ftp服务

    1
    2
    3
    4
    5
    6
    # 查看ftp服务的状态
    sudo systemctl status vsftpd # 此时是inactive(dead),同时发现CGroup行:
    # ftp服务守护进程是/usr/sbin/vsftpd,
    # 配置文件/etc/vsftpd/vsftpd.conf
    sudo systemctl start vsftpd # 打开ftp服务
    sudo systemctl enable vsftpd # 下次开机自己启动
  3. 防火墙开通21端口

    1
    2
    3
    4
    #为ftp开通21号端口
    sudo firewall-cmd --zone=public --permanent --add-port=21/tcp
    sudo firewall-cmd --zone=public --permanent --add-service=ftp
    sudo firewall-cmd --reload # 重启防火墙

ftp客户端安装

rhel8版本下,ftp客户端默认未安装,可在shell中进行安装

1
2
3
$ ftp # 仅输入ftp
std输出>>bash: ftp: command not found...
std输出>>Install package 'ftp' to provide command 'ftp'? [N/y] y #后面就自动安装了

通过以上步骤就能使用ftp服务了,但是这样默认使用本地用户,为了提高系统的安全性,避免直接暴露系统账户,可以采用建立ftp虚拟用户的方式,满足不同场景的需求。

虚拟用户配置

安装必要的软件

确保已经安装了 vsftpd​ 和 db_util​ 工具(用于管理虚拟用户数据库)。

1
sudo yum install libdb-utils

创建虚拟用户数据库

  1. 编辑一个文本文件,记录用户的用户名和密码。

    1
    2
    3
    4
    5
    6
    7
    8
    sudo vim /etc/vsftpd/virtual_users.txt

    #增加以下内容
    user1
    password1
    user2
    password2
    ...
  2. 转换为数据库格式

    使用 db_load​ 工具将上述文件转换为 Berkeley DB 格式:

    1
    sudo db_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db

    确保数据库文件的权限:

    1
    sudo chmod 600 /etc/vsftpd/virtual_users.db

配置pam认证

修改PAM 配置文件(通常位于 /etc/pam.d/vsftpd​ 或 /etc/pam.d/ftp​):

1
2
3
4
5
6
7
#备份
sudo cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bk

sudo vim /etc/pam.d/vsftpd
#改为以下内容
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/virtual_users
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/virtual_users

配置vsftpd

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#编辑vsftpd配置文件
sudo vim /etc/vsftpd/vsftpd.conf

#确保包含以下内容
# 匿名和本地系统用户必须有一个为YES
anonymous_enable=NO # 若为YES,则登录用户名:anonymous,无需密码。

#本地系统用户
local_enable=NO # 启用才能启动虚拟用户

# 启用虚拟用户支持
guest_enable=YES
guest_username=ftp # 此处为宿主用户,默认使用ftp自带的用户

#写权限
write_enable=YES

#虚拟用户的根目录,默认为/var/ftp/,若要更改则需以下设置
chroot_local_user=YES # 启用虚拟用户的 chroot 限制
user_sub_token=$USER # 设置多个虚拟用户占位符
local_root=/home/ftp/$USER # 设置到创建好的ftp目录下
allow_writeable_chroot=YES # 若不加此则报错:
# vsftpd: refusing to run with writable root inside chroot()

# 设置 PAM 配置文件
pam_service_name=vsftpd

创建虚拟用户的目录

  1. 创建一个根目录,并为虚拟用户设置独立的子目录:

    1
    2
    sudo mkdir -p /home/ftp/user1
    sudo mkdir -p /home/ftp/user2
  2. 修改目录权限,使 vsftpd​ 能够访问:

    1
    2
    sudo chown ftp:ftp /home/ftp/user1
    sudo chown ftp:ftp /home/ftp/user2

重启 vsftpd 服务

1
sudo systemctl restart vsftpd

附加配置(可选)

日志记录: 在 vsftpd.conf​ 中启用日志记录:

1
2
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log

参考

  1. Linux基础篇——ftp的安装与配置_ftp安装-CSDN博客
  2. 【网络协议详解】——FTP系统协议(学习笔记)_ftp协议详解-CSDN博客