Centos系统下FTP服务器的搭建、配置与管理

一、FTP基础解释

FTP(File Transfer Protocol,文件传输协议)是一种用于通过网络在不同计算机之间传输文件的标准协议。它基于客户端-服务器架构,允许用户通过网络将文件上传到服务器或从服务器下载文件。

二、FTP工作原理

2.1 客户端-服务器模型

FTP采用客户端-服务器架构(c/s)。用户使用FTP客户端软件(如FileZilla、WinSCP等)来与FTP服务器进行交互。客户端可以通过FTP命令访问和操作服务器上的文件。

2.2 两种通信通道

FTP使用两个不同的通道进行通信:

  1. 控制通道(Command Channel):用于传输控制命令,如用户身份验证、命令请求等。这个通道通常使用21端口。
  2. 数据通道(Data Channel):用于传输实际的数据(文件传输)。该通道的端口是动态的,通常由FTP服务器在控制连接中与客户端协商确定。

2.3 工作模式

FTP有两种主要的工作模式:

  • 主动模式(Active Mode):客户端向服务器的21端口发送命令,服务器再通过客户端指定的端口(通常为20端口)回传数据。该模式下,客户端需要对外网开放端口。
  • 被动模式(Passive Mode):客户端向服务器的21端口发送命令,服务器向客户端提供一个数据端口,客户端通过该端口进行数据传输。在防火墙环境下,被动模式更为常用。

2.4 数据传输方式

FTP支持不同的传输模式:

  • ASCII模式:用于传输文本文件,文件内容经过转换以适应不同操作系统之间的换行符差异。
  • 二进制模式:用于传输二进制文件,如图像、压缩文件等,文件不会被修改。

2.5 身份验证

在使用FTP时,通常需要提供用户名和密码进行身份验证。部分FTP服务器也支持匿名登录,使用户能够无需身份验证即可下载文件,但无法上传文件。

2.6 常见命令

FTP提供了多种命令来进行文件操作。
常用的命令包括:

命令备注
USER发送用户名
PASS发送密码
LIST列出目录内容
GET或RETR下载文件
PUT或STOR上传文件
QUIT退出FTP会话
在这里插入图片描述

2.7 使用场景

简单的过程如下:

  1. 启动FTP客户端,输入服务器的IP地址和端口(默认是21端口)。
  2. 输入用户名和密码进行身份验证。
  3. 客户端与服务器建立控制通道,获取服务器上的文件列表。
  4. 选择你想要下载的文件,客户端通过数据通道与服务器传输文件。
  5. 下载完成后,客户端发送退出命令(QUIT),关闭会话。

三、项目准备

主机名称操作系统IP地址角色
FTP服务端Centos810.0.0.8FTP服务器端
FTP客户端Centos810.0.0.18FTP客户端
Windows客户端Windows192.168.10.100FTP客户端

四、项目执行

4.1 IP网卡配置

centos8之网卡配置详解

4.2 开始配置

  1. 检查yum源是否配置成功
[root@ftp-server ~]# yum makecache        // 清除缓存
Rocky Linux 8 - AppStream                             14 kB/s | 4.8 kB     00:00    
Rocky Linux 8 - BaseOS                               8.5 kB/s | 4.3 kB     00:00    
Rocky Linux 8 - Extras                               8.8 kB/s | 3.1 kB     00:00    
Extra Packages for Enterprise Linux 8 - x86_64        13 kB/s | 4.4 kB     00:00    
Metadata cache created.
[root@ftp-server ~]# yum repolist           //查看仓库列表  
repo id                 repo name
appstream               Rocky Linux 8 - AppStream
baseos                  Rocky Linux 8 - BaseOS
epel                    Extra Packages for Enterprise Linux 8 - x86_64
extras                  Rocky Linux 8 - Extras
  1. 安装vsftpd服务
[root@localhost ~]# yum install -y vsftpd* ftp
Last metadata expiration check: 0:01:09 ago on Sun 01 Dec 2024 11:14:05 PM CST.
Dependencies resolved.
=====================================================================================
 Package          Architecture     Version                 Repository           Size
=====================================================================================
Installing:
 ftp              x86_64           0.17-78.el8             appstream            69 k
 vsftpd           x86_64           3.0.3-36.el8            appstream           180 k

Transaction Summary
=====================================================================================
Install  2 Packages

Total download size: 249 k
Installed size: 457 k
Downloading Packages:
(1/2): ftp-0.17-78.el8.x86_64.rpm                     91 kB/s |  69 kB     00:00    
(2/2): vsftpd-3.0.3-36.el8.x86_64.rpm                118 kB/s | 180 kB     00:01    
-------------------------------------------------------------------------------------
Total                                                162 kB/s | 249 kB     00:01     
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                             1/1 
  Installing       : vsftpd-3.0.3-36.el8.x86_64                                  1/2 
  Running scriptlet: vsftpd-3.0.3-36.el8.x86_64                                  1/2 
  Installing       : ftp-0.17-78.el8.x86_64                                      2/2 
  Running scriptlet: ftp-0.17-78.el8.x86_64                                      2/2 
  Verifying        : ftp-0.17-78.el8.x86_64                                      1/2 
  Verifying        : vsftpd-3.0.3-36.el8.x86_64                                  2/2 

Installed:
  ftp-0.17-78.el8.x86_64                  vsftpd-3.0.3-36.el8.x86_64                 

Complete!
  1. 启动vsftpd服务并关闭防火墙
[root@ftp-server ~]# systemctl stop firewalld
[root@ftp-server ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor prese>
   Active: inactive (dead)
     Docs: man:firewalld(1)

[root@ftp-server ~]# systemctl start vsftpd
[root@ftp-server ~]# systemctl status vsftpd
● vsftpd.service - Vsftpd ftp daemon
   Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: >
   Active: active (running) since Sun 2024-12-01 23:17:42 CST; 5s ago
  Process: 1779 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, sta>
 Main PID: 1780 (vsftpd)
    Tasks: 1 (limit: 12166)
   Memory: 584.0K
   CGroup: /system.slice/vsftpd.service
           └─1780 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

Dec 01 23:17:42 localhost.localdomain systemd[1]: Starting Vsftpd ftp daemon...
Dec 01 23:17:42 localhost.localdomain systemd[1]: Started Vsftpd ftp daemon.

五、vsftpd的配置文件解释

5.1 vsftpd服务程序的主配置文件(/etc/vsftpd/vsftpd.conf)

[root@ftp-server ~]# cat /etc/vsftpd/vsftpd.conf | grep -v "#"    // grep -v "#" 过滤掉包含注释的行(含有“#”的行)
anonymous_enable=NO       // 禁止匿名用户登录FTP服务器
local_enable=YES          // 允许本地用户(即系统用户)登录FTP服务器
write_enable=YES          // 允许用户在FTP服务器上进行写操作(如上传文件)
local_umask=022           // 设置本地用户上传文件的默认权限掩码,022 表示上传的文件对其他用户可读,但不可写
dirmessage_enable=YES     // 启用目录消息功能,登录时显示目录的欢迎信息
xferlog_enable=YES        // 启用FTP传输日志记录,记录文件传输的详细信息
connect_from_port_20=YES  // 启用使用端口20进行数据传输的模式
xferlog_std_format=YES    // 使用标准格式记录传输日志
listen=NO                 // 禁止vsftpd监听IPv4地址(改为使用IPv6)
listen_ipv6=YES           // 启用vsftpd监听IPv6地址
pam_service_name=vsftpd   // 配置PAM(Pluggable Authentication Module)服务名称,用于身份验证
userlist_enable=YES       // 启用用户列表功能,只允许在用户列表中的用户登录FTP服务器

5.2 FTP数据库文件说明

/etc/pam.d/vsftpd
这是 vsftpd 服务的PAM(可插拔认证模块)配置文件,主要用于加强用户认证。当用户登录时,PAM会检查用户的身份是否有效。这个配置文件可以用来设置额外的安全措施,比如强密码策略、多因素认证等。

5.2 FTP用户列表文件说明

/etc/vsftpd/ftpusers
这个文件包含了不允许登录 vsftpd 服务的用户。默认情况下,这个文件中会列出一些系统用户,如 root、bin、daemon 等,防止这些系统账户通过FTP进行访问。

5.2 FTP拒绝访问列表说明

/etc/vsftpd/user_list
这个文件包含了一个用户列表,根据 vsftpd.conf 配置文件中的 userlist_deny 设置,用户列表中的用户可能被拒绝访问FTP服务,也可能被允许访问。
如果 userlist_deny=NO,则只有文件中的用户可以访问FTP服务。
如果 userlist_deny=YES,则文件中的用户被拒绝访问FTP服务,其他用户可以访问。

5.2 FTP默认目录说明

/var/ftp
这个目录是 vsftpd 服务的默认文件存放位置,里面通常包含一个名为 pub 的子目录,供用户上传或下载文件。默认情况下,所有目录内容都是只读的,用户只能下载文件,不能进行修改或上传。

六、配置匿名用户FTP服务器

6.1 认证方式

vsftpd允许用户通过三种认证方式登录到FTP服务器,分别是匿名用户、本地用户和虚拟用户。每种方式的登录方式不同

  1. 匿名用户
    匿名用户是指任何人都可以不输入用户名和密码,直接登录FTP服务器。这种方式通常用于公共FTP服务器,允许任何人访问服务器上的公开资源。

  2. 本地用户:
    本地用户是指服务器上已经存在的用户账户,通过输入用户名和密码进行登录。这种方式适用于需要更高安全性和权限控制的情况。

  3. 虚拟用户:
    虚拟用户是指并不直接对应系统中的用户账户,而是通过一个虚拟的认证系统进行登录。即使黑客破解了虚拟用户的登录信息,也无法直接访问系统中的真实账户,提高了安全性。

6.2 匿名用户登录

参数作用
anonymous_enable=YES允许匿名用户访问FTP服务器
anon_umask=022设置匿名用户上传文件时的默认权限掩码,022 表示上传的文件对其他用户可读,但不可写
anon_upload_enable=YES允许匿名用户上传文件到FTP服务器
anon_mkdir_write_enable=YES允许匿名用户在FTP服务器上创建新目录
anon_other_write_enable=YES允许匿名用户修改目录名称或删除目录

6.3 匿名用户登录FTP服务器配置示例

要求:搭建FTP服务器,允许匿名用户上传和下载文件,设置匿名用户根目录为/var/ftp

  1. 新建测试文件 编辑主配置文件
[root@ftp-server ~]# touch /var/ftp/pub/sample.tar
[root@ftp-server ~]# ll /var/ftp/pub
total 0
-rw-r--r--. 1 root root 0 Dec  1 23:41 sample.tar
  1. 在 /etc/vsftpd/vsftpd.conf 修改以下四行(数字表示行号)
12 anonymous_enable=YES
28 anon_upload_enable=YES  # 允许上传文件 如果前面有# 删除最前面的 “#”
32 anon_mkdir_write_enable=YES  # 允许创建文件
  1. 重启FTP服务器
[root@ftp-server ~]# chmod 777 /var/ftp/pub  // 给目录所属设置为ftp
[root@ftp-server ~]# systemctl restart vsftpd
[root@ftp-server ~]# systemctl status vsftpd
● vsftpd.service - Vsftpd ftp daemon
   Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: >
   Active: active (running) since Sun 2024-12-01 23:49:27 CST; 11s ago
  Process: 1872 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, sta>
 Main PID: 1873 (vsftpd)
    Tasks: 1 (limit: 12166)
   Memory: 572.0K
   CGroup: /system.slice/vsftpd.service
lines 1-8
  1. 在windows客户端上输入ftp://10.0.0.8打开pub目录

七、企业级配置本地用户FTP服务器

7.1 FTP服务器配置要求

公司新增了一台FTP服务器和Web服务器,主要用于维护公司网站的内容,例如上传文件、创建目录和更新网页等。公司有两个部门负责这些任务,分别使用 team1 和 team2 账号来管理。这两个部门将只允许 team1 和 team2 账号登录FTP服务器。

7.2 要求

将FTP服务器和Web服务器放在一起是常见的做法,因为这样有助于网站的维护。为了提高安全性,服务器配置需要满足以下要求:

  • 仅允许本地用户访问:禁止匿名用户登录FTP服务器。
  • 限制 team1 和 team2 的访问目录:这两个账号只能访问并管理 /web/www/html 目录,确保他们无法访问服务器上的其他文件和目录。

7.3 解决方案

  1. 建立维护网站内容的FTP账号 并 禁止本地登录 为其设置密码
[root@ftp-server ~]# mkdir -p /web/www/html               // 创建team1和team2的所属目录
[root@ftp-server ~]# useradd team1 -d /web/www/html       // 禁止登录本地并指定家录
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
[root@ftp-server ~]# useradd team2 -d /web/www/html
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
[root@ftp-server ~]# useradd user1 -d /web/www/html
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
[root@ftp-server ~]# eacho "12345" | passwd --stdin user1          // 设置密码
-bash: eacho: command not found
Changing password for user user1.
passwd: Authentication token manipulation error
[root@ftp-server ~]# echo "12345" | passwd --stdin user1
Changing password for user user1.
passwd: all authentication tokens updated successfully.
[root@ftp-server ~]# echo "12345" | passwd --stdin team1
Changing password for user team1.
passwd: all authentication tokens updated successfully.
[root@ftp-server ~]# echo "12345" | passwd --stdin team2
Changing password for user team2.
passwd: all authentication tokens updated successfully.
  1. 配置vsftpd.conf主配置文件增加或修改相应内容
[root@ftp-server ~]# vim /etc/vsftpd/vsftpd.conf
12 anonymous_enable=NO # 不允许匿名用户访问
13 local_root=/web/www/html  # 添加这一行
102 chroot_list_enable=YES  # 取消注释  激活chroot功能
104 chroot_list_file=/etc/vsftpd/chroot_list # 取消注释 锁定用户在根目录种的列表文件
105 allow_writeable_chroot=YES # 启用chroot就一定加入这条:允许chroot限制
106 write_enable=yes
  1. 建立/etc/vsftpd/chroot_list文件、添加team1、team2账号
[root@ftp-server ~]# vim /etc/vsftpd/vsftpd.conf
[root@ftp-server ~]# vim /etc/vsftpd/chroot_list
team1
team2
  1. 创建测试文件 并赋予目录权限值
[root@ftp-server ~]# touch /web/www/html/test.tar
[root@ftp-server ~]# chmod -R 777 /web/www/html/test.tar
[root@ftp-server ~]# ll /web/www/html/test.tar
-rwxrwxrwx. 1 root root 0 Dec  2 00:15 /web/www/html/test.tar
  1. 重启ftp服务
[root@ftp-server ~]# systemctl status vsftpd
● vsftpd.service - Vsftpd ftp daemon
   Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: >
   Active: active (running) since Mon 2024-12-02 00:16:35 CST; 15s ago
  Process: 1948 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, sta>
 Main PID: 1949 (vsftpd)
    Tasks: 1 (limit: 12166)

chroot_list=YES 时:
如果设置 chroot_list=YES,表示在 /etc/vsftpd/chroot_list 文件中列出的用户可以访问服务器的所有目录。换句话说,只有这些用户不会被限制在他们的主目录或指定目录内,他们可以自由浏览和访问服务器的其他文件系统目录。
chroot_list=NO 时:
如果设置 chroot_list=NO,则 /etc/vsftpd/chroot_list 文件中列出的用户会被锁定在特定的目录中,无法访问服务器上的其他目录。其他没有列出的用户则不受限制,可以访问整个文件系统。

  1. 测试
  • 限制在本地目录的team1
[root@ftp-server ~]# ftp localhost 21
Trying ::1...
Connected to localhost (::1).
220 (vsFTPd 3.0.3)
Name (localhost:root): team1             // 输入需要登录的用户team1或者team2
331 Please specify the password.
Password:                                // 输入密码
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd                                 // 查看当前目录
257 "/" is the current directory
ftp> cd /etc                             // 进入etc目录,失败   权限不足
550 Failed to change directory.
ftp> exit
  • 不限制在本地用户的user1
[root@ftp-server ~]# ftp localhost 21
Trying ::1...
Connected to localhost (::1).
220 (vsFTPd 3.0.3)
Name (localhost:root): user1             // 输入需要登录的用户user1 
331 Please specify the password.
Password:                                // 输入密码
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd                                 // 查看当前目录
257 "/web/www/html" is the current directory
ftp> cd /etc                             // 进入etc目录,成功
250 Directory successfully changed.
ftp> exit

八、配置虚拟用户FTP服务器

  1. 要求
    需要配置 FTP 服务器,允许虚拟用户 user2 和 user3 登录,并将他们的主目录设置为 /var/ftp/vuser。同时,这些用户只能查看文件,不能进行上传、修改或删除操作。

具体要求:

  • 虚拟用户登录:使用 user2 和 user3 虚拟用户账号登录FTP服务器。
  • 设置主目录:他们的主目录都被设置为 /var/ftp/vuser,即他们登录后只能访问该目录。
  • 只读权限:这两个用户只能查看目录和文件内容,无法上传、修改或删除文件。
  1. 创建用户文本文件
[root@ftp-server ~]# cd /etc/vsftpd                // 进入目录
[root@ftp-server vsftpd]# vim vuser                // 创建文本文件

在这里插入图片描述

  1. 生成数据库
    为了让系统能够使用虚拟用户的账号和密码,需要将这些信息存储在一个数据库文件中,而不是简单的文本文件。因为系统不能直接读取文本文件中的虚拟账号和密码。为了转换,首先需要使用 db_load 命令将文本文件转换成数据库格式,这样 vsftpd 才能通过数据库文件来验证虚拟用户的登录信息。
[root@ftp-server vsftpd]# db_load -T -t hash -f vuser vuser.db
  1. 配置PAM文件
    为了让FTP服务器能够使用数据库中的虚拟用户账号进行身份验证,我们需要配置PAM(可插拔认证模块)。PAM 是一种身份验证框架,它允许系统通过不同的方式验证用户身份,包括使用数据库文件来验证虚拟用户。
    修改vsftpd的PAM配置
    打开 vsftpd 的PAM配置文件 /etc/pam.d/vsftpd,然后注释掉文件中的默认配置行。在这些行前加上 # 来禁用它们,这样系统就不会使用默认的身份验证方式,而是改为使用数据库文件中的虚拟用户信息进行验证。
##%PAM-1.0
session    optional     pam_keyinit.so    force revoke
#auth       required    pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
#auth       required    pam_shells.so
#auth       include     password-auth
#account    include     password-auth
#session    required     pam_loginuid.so
#session    include     password-auth

auth required pam_userdb.so dn=/etc/vsftpd/vuser
account required pam_userdb.so dn=/etc/vsftpd/vuser
  1. 编辑主配置文件 【/etc/vsftpd/vsftpd.conf】
[root@ftp-server vsftpd]# vim /etc/vsftpd/vsftpd.conf # 在最后添加下面四行
131 guest_enable=YES
132 guest_username=vuser
133 user_config_dir=/etc/vsftpd/vuser_conf
134 allow_writeable_chroot=YES
  1. 配置虚拟用户权限
[root@ftp-server ~]# cd /etc/vsftpd
[root@ftp-server vsftpd]# mkdir vuser_conf
[root@ftp-server vsftpd]# cd vuser_conf/
[root@ftp-server vuser_conf]# vim user2
[root@ftp-server vuser_conf]# vim user3
[root@ftp-server vuser_conf]# cat user2
local_root=/var/ftp/vuser
[root@ftp-server vuser_conf]# cat user3
local_root=/var/ftp/vsuer
  1. 创建测试文件
[root@ftp-server ~]# cd /var/ftp/
[root@ftp-server ftp]# ll
total 0
drwxr-xr-x. 2 root root 24 Dec  1 23:41 pub
[root@ftp-server ftp]# mkdir vuser
[root@ftp-server ftp]# cd
[root@ftp-server ~]# touch /var/ftp/vuser/user2.tar
[root@ftp-server ~]# touch /var/ftp/vuser/user2.ta3
  1. 重启测试
# 重启服务
[root@ftp-server vuser_conf]# systemctl restart vsftpd

# 登录user2
[root@ftp-server vuser_conf]# ftp localhost 21
Trying ::1...
Connected to localhost (::1).
220 (vsFTPd 3.0.2)
Name (localhost:root): user2
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
229 Entering Extended Passive Mode (|||60168|).
150 Here comes the directory listing.
-rw-r--r--    1 0        0               0 Jun 06 18:46 user2.tar
-rw-r--r--    1 0        0               0 Jun 06 18:46 user3.tar

# user2其他权限测试
ftp> cd /etc/  # 进入其它目录权限
550 Failed to change directory.  # 失败
ftp> mkdir user2  # 创建文件权限
550 Permission denied. # 失败

# 登录user3
[root@ftp-server vuser_conf]# ftp localhost 21
Trying ::1...
Connected to localhost (::1).
220 (vsFTPd 3.0.2)
Name (localhost:root): user3
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
229 Entering Extended Passive Mode (|||28511|).
150 Here comes the directory listing.
-rw-r--r--    1 0        0               0 Jun 06 19:03 user2.tar
-rw-r--r--    1 0        0               0 Jun 06 19:03 user3.tar

# user3其他权限测试
ftp> cd /etc/  # 进入其它目录权限
550 Failed to change directory.  # 失败
ftp> mkdir user3  # 创建文件权限
550 Permission denied. # 失败
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值