0


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

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

一、介绍

1.概述

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

2.FTP的传输模式

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

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

PORT 主动模式

  1. FTP客户端会随机使用一个高位端口N(n > 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/xferlog

xferlog_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)查看抓包信息

标签: linux 运维 云计算

本文转载自: https://blog.csdn.net/2201_75935630/article/details/137600658
版权归原作者 是阿花y 所有, 如有侵权,请联系我们删除。

“Linux —— FTP服务【从0-1】”的评论:

还没有评论