Linux —— FTP服务【从0-1】

news/2024/11/28 9:44:55/

目录

一、介绍

1.概述

2.FTP的传输模式

PORT 主动模式

PASV 被动模式

3.FTP服务的作用

二、搭建FTP服务器

FTP服务端配置

1.安装vsftpd文件服务

2.启动服务

3.防火墙配置

4.FTP服务相关文件说明

FTP客户端配置

1.安装FTP客户端工具 lftp

2.访问FTP服务器

Linux系统访问FTP服务器

Windows系统访问FTP服务器

三、FTP服务配置文件

1.配置匿名用户

(1)修改配置文件

(2)创建上传目录

(3)客户端进行文件上传

(4)客户端进行目录上传

2.配置系统用户

(1)创建FTP服务专用用户

(2)将用户禁锢在自己的家目录 chroot_local_user=YES

(3)允许指定系统用户可以切换目录 

(4)白名单

(5)黑名单 /etc/vsftpd/ftpusers

3.配置虚拟用户

(1)建立FTP虚拟用户的用户数据库文件

(3)创建FTP虚拟用户的映射用户

(4)建立支持虚拟用户的PAM认证文件,添加虚拟用户支持

(5)创建虚拟用户的配置文件

(6)客户端进行验证

4.常用的配置指令

5.PASV 被动模式

四、vsftpd加密传输

1.抓取vsftpd传输内容

(1)在同网段主机进行抓包

(2)客户端登录FTP操作

2.openssl+vsftpd加密传输

(1)检查是否安装了 openssl

(2)查看vsftpd是否支持openssl

(3)生成加密信息的私钥、证书、签字证书

3.修改配置文件/etc/vsftpd/vsftpd.conf

4.客户端验证

(1)同网段主机继续抓包

(2)使用第三方客户端进行登录(支持服务器类型:FTP over TLS)

(3)查看抓包信息

        学习是一场马拉松,耐心和坚持是成功的关键。愿你能保持初心,好好学习,天天向上,努力成为最优秀的你。


一、介绍

1.概述

        FTP(File Transfer Protocol,文件传输协议)是TCP/IP协议族中应用层的协议之一。是一种基于TCP的协议,采用客户/服务器模式。通过FTP协议,用户可以在FTP服务器中进行文件的上传或下载等操作。

2.FTP的传输模式

控制端口:控制连接在两主机间传送控制命令,如用户身份、口令、改变目录命令等。

数据端口:数据连接只用于数据传输。

PORT 主动模式

  1. FTP客户端会随机使用一个高位端口Nn > 1024)与FTP服务端21端口进行连接,向服务端发送用户名和密码进行登陆;
  2. 登录成功后要list列表或者读取数据时,客户端开放一个N+1端口(1024以上)进行监听,发送 PORT命令到FTP服务器,告诉服务器客户端采用主动模式并开放端口;
  3. FTP服务器收到PORT主动模式命令和端口号后,通过服务器的20端口和客户端开放的端口(N+1)连接,发送数据;

原理如下图:

PASV 被动模式

  1. FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,发送用户名和密码进行登陆;
  2. 登录成功后要list列表或者读取数据时,客户端开放一个N+1端口(1024以上)进行监听,然后向服务器发送PASV命令,通知服务器自己处于被动模式。
  3. 服务器收到命令后,会开放一个大于1024的端口P进行监听,然后用PORT P命令通知客户端,自己的数据端口是P
  4. 客户端收到命令后,会通过N+1号端口连接服务器的端口P,然后在两个端口之间进行数据传输。

原理如下图:

3.FTP服务的作用

FTP服务是一种提供共享文件的服务器,它的主要作用有以下几点:

(1)存储文件:FTP服务器可以存储需要传输的文件,用户可以通过FTP客户端连接到FTP服务器,并上传或下载需要的文件。

(2)管理文件:FTP服务器可以管理文件,例如创建、删除、重命名等操作。

(3)提供文件访问权限控制:FTP服务器可以对文件进行访问权限控制,例如限制用户的访问权限、控制用户的上传和下载权限等。

(4)提供匿名访问:FTP服务器可以提供匿名访问,允许用户通过FTP客户端进行匿名的文件传输。

(5)监控文件传输情况:FTP服务器可以记录和监控文件传输情况,例如记录文件传输的日志信息,以便进行后续的审计和管理。

(6)支持多用户同时传输:FTP服务器可以支持多个用户同时进行文件传输,以提高文件传输的效率。

(7)数据备份:FTP服务器可以作为网络备份的存储服务器,用于备份公司或组织的重要数据。

二、搭建FTP服务器

FTP服务端配置

1.安装vsftpd文件服务

[root@localhost ~]# yum install -y vsftpd
已加载插件:fastestmirror
Determining fastest mirrors
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
......省略输出
已安装:
  vsftpd.x86_64 0:3.0.2-29.el7_9                                                                                                                                              

完毕!
[root@localhost ~]# 
[root@localhost ~]# 

2.启动服务

systemctl start vsftpd # 启动服务

systemctl stop vsftpd # 停止服务

systemctl status vsftpd # 查看服务状态

systemctl enable vsftpd # 开启自启动

3.防火墙配置

systemctl stop firewalld # 停止防火墙 
systemctl disable firewalld # 开机不启动防火墙 
setenforce 0 # 关闭selinux

4.FTP服务相关文件说明

FTP客户端配置

1.安装FTP客户端工具 lftp

[root@localhost ~]# yum install -y lftp
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
......省略输出
  正在安装    : lftp-4.4.8-14.el7_9.x86_64                                                                                                                                1/1 
  验证中      : lftp-4.4.8-14.el7_9.x86_64                                                                                                                                1/1 

已安装:
  lftp.x86_64 0:4.4.8-14.el7_9                                                                                                                                                

完毕!
[root@localhost ~]# 

2.访问FTP服务器

Linux系统访问FTP服务器

(1)客户端工具 lftp

lftp 服务端IP地址

(2)wget 工具

wget ftp://服务器IP/文件名 # 下载文件 wget -m ftp://服务器IP/目录名 # 下载目录

Windows系统访问FTP服务器

(1)浏览器访问

(2)资源管理器访问

三、FTP服务配置文件

1.配置匿名用户

登录账号:ftpanonymous

登录密码:

工作目录:/var/ftp

默认权限:允许下载,不允许上传。

(1)修改配置文件

# 修改配置文件之前先进行备份 
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak

vim /etc/vsftpd/vsftpd.conf

# 是否允许匿名用户访问
anonymous_enable=YES
# 允许上传文件
anon_upload_enable=YES
# 允许创建目录
anon_mkdir_write_enable=YES
# 允许用户进行其它操作(删除文件、覆盖文件、重命名文件)
anon_other_write_enable=YES
# 匿名用户所上传文件的权限掩码
anon_umask=022
# 限制最大传输速率 单位:bytes/秒(0为不限速)
anon_max_rate=0

每次修改完配置文件后都需要重启服务

systemctl restart vsftpd # 重启服务

(2)创建上传目录

mkdir /var/ftp/upload # 创建上传目录 
chmod 777 /var/ftp/upload/ # 赋予权限

(3)客户端进行文件上传

(4)客户端进行目录上传

2.配置系统用户

登录账号:/etc/passwd文件的系统用户

登录密码:/etc/shadow文件的用户密码

工作目录:用户家目录

默认权限:drwx — —

将原有内容删除,复制以下内容

# 允许使用系统用户
local_enable=YES
# 系统用户上传的文件的默认权限
local_umask=022
# 禁锢系统用户在自己的家目录
chroot_local_user=YES
# 允许系统用户目录有写入权限
allow_writeable_chroot=YES
write_enable=YES
# 启用进入目录的欢迎信息
dirmessage_enable=YES
# 启用日志功能
xferlog_enable=YES
# 使用20端口进行数据传输
connect_from_port_20=YES
# 记录日志的格式(上传、下载)
xferlog_std_format=YES
# 使用IPv4
listen=YES
pam_service_name=vsftpd 
# 限制最大传输速率(0为不限制,单位:bytes/秒)
local_max_rate=0
tcp_wrappers=YES

不删除原文,只添加以下内容即可

local_enable=YES # 是否允许本地系统用户访问 local_umask=022 #本地用户所上传文件的权限掩码 Chroot_local_user=YES # 禁锢用户在自己家目录 allow_writeable_chroot=YES # 允许系统用户目录有写入权限 local_max_rate=0 # 限制最大传输建率(字节/秒) 0为无限制

(1)创建FTP服务专用用户

-s创建的用户不能登录系统

# 创建两个不能登录系统的用户

useradd -s /sbin/nologin user01 useradd -s /sbin/nologin user02

# 设置密码

passwd user01 passwd user02

(2)将用户禁锢在自己的家目录 chroot_local_user=YES

在vsftpd配置文件中,默认允许系统用户随意切换目录,这个行为是很危险的,需要禁止。

修改配置文件/etc/vsftpd/vsftpd.conf,添加 chroot_local_user=YES 限制系统用户在自己家目录

# 将系统用户禁锢在自己的家目录

chroot_local_user=YES

配置完将用户禁锢在主目录的指令后,再使用普通用户进行登录会出现以下报错:

原因:

从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下, 则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报错,并禁止登录。

解决办法:

配置文件/etc/vsftpd/vsftpd.conf中,添加 allow_writeable_chroot=YES # 使系统用户目录有写入权限

(3)允许指定系统用户可以切换目录 

# 配置文件中添加以下

# 开启读取chroot列表功能

chroot_list_enable=YES

# 写在/etc/vsftpd/chroot_list文件里面的用户是切换目录的

chroot_list_file=/etc/vsftpd/chroot_list

再创建chroot_list文件

touch /etc/vsftpd/chroot_list         # 创建切换目录白名单

echo 'user02' 1>> /etc/vsftpd/chroot_list         # 添加用户到白名单中,一行一个用户

验证

(4)白名单

userlist_enable=YES&&userlist_deny=NO # 仅允许/etc/vsftpd/user_list文件中的用户登录FTP

userlist_enable=YES&&userlist_deny=YES # 禁止/etc/vsftpd/user_list文件中的用户登录FTP

配置文件中添加

userlist_enable=YES userlist_deny=NO

添加用户进白名单

echo 'user01' 1>> /etc/vsftpd/user_list

验证

(5)黑名单 /etc/vsftpd/ftpusers

添加进此文件中的用户都禁止登录FTP,立即生效,无需重启服务(权限高于白名单

验证

3.配置虚拟用户

(1)建立FTP虚拟用户的用户数据库文件

vim vsftpd.user # 文件名字可随便定义 文件内容格式:奇数行为用户名,偶数行为用户密码 user01

123

user02

123

user03

123

(2)将虚拟用户文件转换为DB数据库格式文件

db_load -T -t hash -f vsftpd.user vsftpd.db

-T:允许应用程序能够将文本文件转译载入进数据库文件;

-t:指定转译成什么数据库类型;

-f:包含用户名和密码的文本文件;

修改数据库文件的权限,保证其安全性

chmod 600 vsftpd.db

(3)创建FTP虚拟用户的映射用户

由于虚拟用户不是系统用户,没有自己的家目录,所以需要创建一个系统用户,用它的家目录给虚拟用户当做工作目录(家目录);

useradd -s /sbin/nologin virtual

(4)建立支持虚拟用户的PAM认证文件,添加虚拟用户支持

cp -a /etc/pam.d/vsftpd /etc/pam.d/vsftpd.pam

编辑复制的文件vsftpd.pam(清空所有内容,复制以下两行)

auth required pam_userdb.so db=/etc/vsftpd/vsftpd

account required pam_userdb.so db=/etc/vsftpd/vsftpd

在vsftpd.conf配置文件中修改、添加以下内容

# 修改

pam_service_name=vsftpd.pam

# 添加

guest_enable=YES         # 允许使用虚拟用户功能

gue_username=virtual         # 指定虚拟用户的映射用户

user_config_dir=/etc/vsftpd/dir         # 虚拟用户配置文件的目录(需要自己创建)

(5)创建虚拟用户的配置文件

创建虚拟用户配置文件的目录

mkdir /etc/vsftpd/dir

创建虚拟用户配置文件(虚拟用户的配置指令与匿名用户的配置指令是相同的

先把主配置文件vsftpd.conf中匿名用户的所有配置指令注释掉

修改虚拟用户配置文件

cd /etc/vsftpd/dir/ vim user01

# 添加以下内容

allow_writeable_chroot=YES         # 允许用户的家目录有写入权限 anon_upload_enable=YES         # 允许用户上传 vim user02 # 添加以下内容 allow_writeable_chroot=YES         # 允许用户的家目录有写入权限 anon_mkdir_write_enable=YES         # 允许用户创建文件 vim user03 allow_writeable_chroot=YES         # 允许用户的家目录有写入权限 anon_upload_enable=YES         # 允许用户上传文件(为了覆盖文件开启的) anon_other_write_enable=YES         # 允许用户进行其它操作(删除、覆盖、重命名文件)

注意:请给映射用户家目录添加 o+r 权限,让虚拟用户拥有读取权限;

(6)客户端进行验证

4.常用的配置指令

listen=YES                                #是否以独立运行的方式监听服务listen_address=192.168.10.112               #设置监听FTP服务的IP地址listen_port=21                                 #设置监听FTP服务的端口号write_enable=YES                        #是否启动写入权限(上传、删除文件)download_enable=YES                   #是否允许下载文件dirmessage_enable=YES                #用户切换目录显示.message文件xferlog_enable=YES                        # 启用日志文件,记录到/var/log/xferlogxferlog_std_format=YES    # 启用标准的xferlog日志格式,禁用此项将使用vsftpd自己的格式connect_from _port_20=YES        # 允许服务器主动模式 (从20端口建立数据连接)pasv_enabTe=YES                        # 允许服务器被动模式
pasv_max_port=24600                   # 设置被动模式服务器的最大端口号
pasv_min_port=24500                        # 设置黄动模式服务的最小端口pam_service_name=vsftpd                # 用户认证的PAM文件userlist_enable=YES                        # 是否启用user_list列表文件
userlist_deny=YES                        # 是否禁用user_list中的用户max_cIients=0                                #限制并发客户端连接数max_per_ip=0                                # 限制同一IP地址的井发连接数
tcp_wrappers=YES                        #是否启用tcp_wrappers主机访问控制chown_username=root                #表示匿名用户上传的文件的拥有人是root,默认关闭ascii_upload_enable=YES           # 表示是否允许用户可以上传一个二进制文件,默认不允许ascii_download_enable=YES        #代表是否允许用户下载个一个二进制文件,默认不允许
nopriv_user=vsftpd                        #设置支撑vsftpd服务的宿主用户为手动建立的vsftpd用户async_abor_enable=YES                # 设定支持异步传输功能
ftpd_banner=welcome to Awei FTP servers          # 设定vsftpd的登录标语
guest_enable=YES                        # 设置启用虚拟用户功能guest_username=ftpuser                 # 指定虚拟用户的宿主用户virtual_use_local_privs=YES                # 设定虚拟用户的权限符合他们的宿主用户user_config_dir=/etc/vsftpd/vconf        # 设定虚拟用户个人vsftp的配置文件存放路径

5.PASV 被动模式

/etc/vsftpd/vsftpd.conf 配置文件中添加以下内容

pasv_enable=YES         # 开启被动模式

pasv_min_port=3000(大于1024)         # 数据连接最小端口

pasv_max_port=5000         # 数据传输最大端口

验证

客户端下载文件,进行数据传输

服务端查看端口

四、vsftpd加密传输

1.抓取vsftpd传输内容

因为vsftpd是明文传输,所以使用抓包工具可以抓取vsftpd传输的内容

使用tcpdump抓包工具

tcpdump -i 网卡名 -nn -X -vv tcp port 21(服务器端口) and ip host 来源ip(客户端VMnet8网卡IP)

-i:指定需要监听的网卡;

-n: 对回显的信息以数字方式显式,例如地址回显为192.168.157.1,否则显式为主机名;

-nn:除了-n的作用外,还把端口显示为数值,否则显示端口服务名;

-X:输出包的头部数据,会以16进制和ASCII两种方式同时输出;

-vv:产生更详细的输出;

(1)在同网段主机进行抓包

(2)客户端登录FTP操作

2.openssl+vsftpd加密传输

(1)检查是否安装了 openssl

rpm -q opessl

(2)查看vsftpd是否支持openssl

ldd命令用于打印程序或者库文件所依赖的共享库列表。

[root@localhost virtual]# which vsftpd /usr/sbin/vsftpd

[root@localhost virtual]#

[root@localhost virtual]#

[root@localhost virtual]# ldd /usr/sbin/vsftpd | grep libssl

libssl.so.10 => /lib64/libssl.so.10 (0x00007ff14cf2d000)

[root@localhost virtual]#

(3)生成加密信息的私钥、证书、签字证书

后缀:

  • .key:服务器私钥;
  • .csr:服务器证书;
  • .crt:签字证书;

请注意:服务器所有私钥、证书和签字证书都是存储在/etc/ssl/certs/

a.生成服务器私钥

openssl genrsa -out vsftpd.key 1024

-genrsa:用于生成私钥;

-out:输出文件;

b.通过私钥生成服务器的证书

openssl req -new -key vsftpd.key -out vsftpd.csr

req:生成证书请求;

-new:新的请求;

-key:用于签名待生成的请求证书的私钥文件;

-out:待输出的文件;

c.生成签字证书

openssl x509 -req -days 365 -sha256 -in vsftpd.csr -signkey vsftpd.key -out vsftpd.crt

-req:签字证书请求;

-days:签字证书生效时间;

-sha256:签字证书加密方式;

-in:输入文件;

-out:输出文件;

d.把/etc/ssl/certs/目录的权限设置为500,这是必须要做的操作!

chmod 500 /etc/ssl/certs

请注意:在实验环境中可以通过命令行生成CA证书,但在生产环境中必须向CA证书厂商申请注册(否则浏览器不识别)

3.修改配置文件/etc/vsftpd/vsftpd.conf

# 开启ssl证书功能

ssl_enable=YES

# 支持ssl1-3的版本

ssl_tlsv1=YES

ssl_sslv2=YES

ssl_sslv3=YES

# 允许匿名用户(虚拟用户)使用ssl证书功能

allow_anon_ssl=YES

# 强制匿名用户(虚拟用户)登录时使用ssl证书功能

force_anon_logins_ssl=YES

# 强制匿名用户(虚拟用户)传输数据时使用ssl证书功能

force_anon_data_ssl=YES

# 强制系统用户登录时使用ssl证书功能

force_local_logins_ssl=YES

# 强制系统用户传输数据时使用ssl证书功能

force_local_data_ssl=YES

# 服务器签字证书存储位置

rsa_cert_file=/etc/ssl/certs/vsftpd.crt

# 服务器私钥存储位置

rsa_private_key_file=/etc/ssl/certs/vsftpd.key

4.客户端验证

(1)同网段主机继续抓包

(2)使用第三方客户端进行登录(支持服务器类型:FTP over TLS)

(3)查看抓包信息


http://www.ppmy.cn/news/1418582.html

相关文章

Kylin IPv4 setting config

Kylin IPv4 setting-CSDN博客 上次配置完重启又没了,永久需要修改配置文件 /etc/sysconfig/network-scripts ifcfg-ens33

单路高清HDMI编码器JR-3211HD

产品简介: JR-3211HD单路高清HDMI编码器是专业的高清音视频编码产品,该产品具有支持1路高清HDMI音视频采集功能, 1路3.5MM独立外接音频输入,编码输出双码流H.264格式,音频MP3/AAC格式。编码码率可调,画面质…

[入门到放弃]设计模式-笔记

模块化设计 20240448 模块不包含数据,通过实例的指针,实现对实例的操作;唯一包含的数据是用于管理这些模块的侵入式链表模块只负责更具定义的数据结构,执行对应的逻辑,实现不同实例的功能; 参考资料 使用…

QCustomPlot移植android后实现曲线放大缩小

一.问题 1.QCustomPlot在windows系统上可以支持鼠标左键按下平移拖动,滚轮放大缩小,矩形放大功能; 但是到了android触摸屏上无法识别鼠标滚轮事件,同时控件也不识别多点触控的放大缩小,这就导致想要实现放大缩小比较困难。 本文会给出两种解决方法。 二.QCustomPlot介绍…

NUC11更新 ESXi 8.0U2B 安装过程

1、下载 镜像名称:VMware-VMvisor-Installer-8.0U2b-23305546.x86_64.iso下载地址:https://docs.vmware.com/tw/VMware-vSphere/8.0/rn/vmware-vsphere-80-release-notes/index.html 2、制作镜像启动盘 2、查看镜像版本信息 3、启动设备安装系统 1、启…

MES实施优势有哪些?MES制造执行系统的主要内容

各个行业之间也开始进入到了激烈的竞争当中,很多企业为了能够有效提升企业竞争力,都会通过提升自身实力的方式来提升竞争力。一些制造业也会在经营过程当中使用到MES系统,那么,mes系统的优势有哪些呢? 1、优化企业现场…

GNU Autotools 套件详解

GNU Autotools 是一套用于构建和安装软件的工具,它包括了一系列的工具,如 `autoscan`, `aclocal`, `autoconf`, `autoheader`, `automake` 等。 这些工具的目的是简化软件的编译过程,使得软件能够在不同的操作系统和硬件平台上编译和运行。 历史背景 GNU Autotools 的历史…

SpringCloudAlibaba-整合sleuth和zipkin(六)

目录地址&#xff1a; SpringCloudAlibaba整合-CSDN博客 一、整合sleuth 1.引入依赖 在需要追踪的微服务中引入依赖&#xff0c;user、order、product <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter…