Linux云计算之网络服务(VSFTP)

2024-02-21 01:32

本文主要是介绍Linux云计算之网络服务(VSFTP),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

网络服务——VSFTP

一、VSFTP 概述

FTP 是 File Transfer Protocol(文件传输协议)的英文简称,用于 Internet 上的文件的双向传输。使用 FTP 来传输时,是具有一定程度的危险性,因为数据在因特网上面是完全没有收到保护的明文传输方式!

VSFTP是一个基于 GPL 发布的类 Unix 系统上使用的 FTP 服务器软件,它的全程是 Very Secure FTP,从名称定义上基本可以看出,这是为了解决 ftp 传输安全性问题的

  1. 安全特性
  • vsftp 程序的运行者一般是普通用户,降低了相对应的进程的权限,提高了安全性
  • 任何需要执行较高权限的指令都需要上层程序许可
  • ftp 所需要使用的绝大多数命令都被整合到了 vsftp 中,基本不需要系统额外提供命令
  • 拥有 chroot 功能,可以改变用户的根目录,限制用户只能在自己的家目录

二、VSFTP 连接类型

控制连接(持续连接)——> TCP 21(命令信道)——> 用户收发 FTP 命令
数据连接(按需连接)——> TCP 20 (数据信道)——> 用于上传下载数据

三、VSFTP 工作模式

在这里插入图片描述

Port 模式

FTP 客户端首先和服务器的 TCP 21端口建立连接,用来发送命令,客户端需要接收数据的时候在这个通道上发送 PORT 命令。PORT 命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的 TCP 20端口连接至客户端的指定端口发送数据。FTP server 必须和客户端建立一个新的连接用来传送数据

在这里插入图片描述

Passive 模式

FTP 客户端首先和服务器的 TCP 21端口建立连接,用来建立控制通道发送命令,但建立连接后客户端发送 Pasv 命令。服务器收到 Pasv 命令后,打开一个临时端口(端口大于 1023 小于 65535)并且通知客户端在这个端口上传送数据的请求,客户端连接 FTP 服务器的临时端口,然后 FTP 服务器将通过这个端口传输数据

注意:由于 VSFTP 的被动模式是随机端口进行数据传输,所以在设置防火墙时需要刻意放行

四、VSFTP 传输模式

Binary 模式: 不对数据进行任何处理,适合进行可执行文件、压缩文件、图片等
ASCII模式: 进行文本传输时,自动适应目标操作系统的结束符,如回车符等

Linux 的红帽发行版中 VSFTP 默认采用的是 Binary 模式,这样能保证绝大多数文件传输后能正常使用

切换方式: 在 ftp> 提示符下输入 ascii 即转换到 ASCII 方式,输入 bin ,即转换到 Binary 方式

五、VSFTP 软件信息

服务端软件名: vsftpd
客户端软件名: ftp
服务名: vsftpd
端口号: 20、21、指定范围内随机端口
配置文件: /etc/vsftpd/vsftpd.conf

六、登录验证方式

匿名用户验证:

用户账号名称:ftp或anonymous
用户账号密码:无密码
工作目录:/var/ftp
默认权限:默认可下载不可上传,上传权限由两部分组成(主配置文件和文件系统)

本地用户验证:

用户账号名称:本地用户(/etc/passwd)
用户账号密码:用户密码(/etc/shadow)
工作目录:登录用户的宿主目录
权限:最大权限(drwx------)

虚拟(virtual)用户验证:

  1. 创建虚拟用户用来代替本地用户,减少本地用户曝光率
  2. 使用本地用户作为虚拟用户的映射用户,为虚拟用户提供工作目录和权限控制
  3. 能够设置严格的权限(为每一个用户生成单独的配置文件)

七、VSFTP 实验部署

注:先关闭服务器和客户机上的防火墙和 SELinux

  1. 匿名用户验证实验:
匿名权限控制:anonymous_enable=YES		#启动匿名访问anon_umask=022				#匿名用户所上传文件的权限掩码anon_root=/var/ftp			#匿名用户的 FTP 根目录anon_upload_enable=YES		#允许上传文件anon_mkdir_write_enable=YES	#允许创建目录anon_other_write_enable=YES	#允许其他写入权(删除、覆盖、重命名)anon_max_rate=0				#限制最大传输速率(0为不限速,单位:bytes/秒)

实验需求与流程:

注意:在客户端登录后,默认情况下是可以下载的,但不能上传

  • 实现可以上传
    - anon_upload_enable=YES
    - 在 /var/ftp/ 下创建上传目录
    - 修改上传目录的权限或所有者,让匿名用户有写入权限
  • 实现创建目录和文件其他操作

anon_mkdir_write_enable=YES #允许创建目录
anon_other_write_enable=YES #删除文件、文件改名、文件覆盖

  • 用户进入某个文件夹时,弹出相应的说明
    - 在对应目录下创建,message 文件,并写入相应内容
    - 确认 dirmessage_enable=YES 是否启用
    - 尝试切换目录查看效果 (同一次登录仅提示一次)
  • 实现上传的文件可下载

默认情况下开放上传权限后,上传的文件是无法被下载的,因为文件的其他人位置没有 r 权限

设置anon_umask=022,可以让上传的文件其他人位置拥有 r 权限,然后才能被其他人下载

  1. 本地用户验证实验:
本地用户权限控制:local_enable=YES		#是否启用本地系统用户local_umask=022			#本地用户所上传文件的权限掩码local_root=/var/ftp		#设置本地用户的 FTP 根目录chroot_local_user=YES	#是否将用户禁锢在主目录ftpd_banner=Welcome to blah FTP service	#用户登录时显示的欢迎信息userlist_enable=YES & userlist_deny=YES#禁止/etc/vsftpd/user_list 文件中出现的用户名登录 FTPuserlist_enable=YES & userlist_deny=NO#仅允许/etc/vsftpd/user_list 文件中出现的用户登录 FTP配置文件:ftpusers#禁止/etc/vsftpd/ftpusers 文件中出现的用户名登录 FTP,权限比 user_list 更高,即时生效

实验需求与流程:

  • 服务端需要创建用户并设置密码(所创建的用户,不需要登录操作系统,仅用来登录VSFTP)
    useradd -s /sbin/nologin username
  • 将所有用户禁锢在自己的家目录下
    注:默认没有禁锢用户时,客户端登录后可以随意切换目录,查看文件所在位置和文件名
    chroot_local_user=YES
    #开启用户家目录限制,限制所有用户不能随便切换目录
  • 将部分用户禁锢在自己的家目录下
    chroot_list_enable=YES
    #开启白名单功能,允许白名单中的用户随意切换目录
    chroot_list_file=/etc/vsftpd/chroot_list
    #白名单文件所在位置(需自己创建)
  • 配置文件:/etc/vsftpd/ftpusers
    所有写入此文件内的用户名都不允许登录ftp,立刻生效
  • 修改被动模式数据传输使用端口
    pasv_enable=YES
    pasv_min_port=30000
    pasv_max_port=35000
  1. 虚拟用户验证实验
  • 建立 FTP 的虚拟用户的用户数据库文件(在/etc/vsftpd)
vim vsftpd.user
注:该文件名可以随便定义,文件内容格式:奇数行用户,偶数行密码
db_load -T -t hash -f vsftpd.user vsftpd.db
#将用户密码的存放文本转化为数据库类型,并使用 hash 加密
chmod 600 vsftpd.db
#修改文件权限为 600,保证其安全性
  • 创建 FTP 虚拟用户的映射用户,并指定其用户家目录
useradd -d /var/ftproot -s /sbin/nologin virtual
#创建 virtual 用户作为 ftp 的虚拟用户的映射用户
  • 建立支持虚拟用户的 PAM 认证文件,添加虚拟用户支持
cp -a /etc/pam.d/vsftpd /etc/pam.d/vsftpd.pam
#使用模板生成自己的认证配置文件,方便一会调用
编辑新生成的文件 vsftpd.pam(清空原来内容,添加下列两行)
auth		required		pam_userdb.so	db=/etc/vsftpd/vsftpd
accout		required		pam_userdb.so	db=/etc/vsftpd/vsftpd
在vsftpd.conf 文件中添加支持配置
修改:pam_service_name=vsftpd.pam
添加:guest_enable=YESguest_username=virtualuser_config_dir=/etc/vsftpd/dir	
  • 为虚拟用户建立独立的配置文件,启动服务并测试

注:做虚拟用户配置文件设置时,将主配置文件中自定义的匿名用户相关设置注释掉

用户可以上传:
anon_upload_enable=YES		#允许上传文件
用户可以创建目录或文件:
anon_mkdir_write_enable=YES	#允许创建目录
用户可以修改文件名:
anon_upload_enable=YES		#允许上传文件(为了覆盖开启的)
anon_other_write_enable=YES	#允许重名和删除文件、覆盖注:给映射用户的家目录 设置 o+r 让虚拟用户有读权限

4 openssl+vsftpd 加密验证方式:

扩展:使用 tcpdump 工具进行指定端口抓包,抓取 ftp 登录过程中的数据包

tcpdump -i eth0 -nn -X -vv tcp port 21 and ip host 来源ip
选项:-i:interface(指定 tcpdump 需要监听的接口)-n:对地址以数字方式显示,否则显示为主机名-nn:除了-n的作用外,还把端口显示为数值,否则显示端口服务名-X:输出包的头部数据,会以16进制和ASCII两种方式同时输出-vv:产生更详细的输出
  • 查看是否安装了 openssl
rpm -q openssl
  • 查看 vsftpd 是否支持 openssl
ldd /usr/sbin/vsftpd | grep libssl
  • 生成加密信息的秘钥和证书文件
位置:/etc/ssl/certs/
a.openssl genrsa -out vsftpd.key 2048
#建立服务器私钥,生成 RSA 秘钥
b.openssl req -new -key vsftpd.key -out vsftpd.csr
#需要依次输入国家、地区、城市、组织、住址单位,Email等信息。最重要的是有一个 common name,可以写你的名字或者域名。如果为了 https申请,这个必须和域名吻合,否则会引发浏览器报警。生成的 csr 文件交给 CA 签名后形成服务端自己的证书
c.openssl x509 -req -days 365 -sha256 -in vsftpd.csr -signkey vsftpd.key -out vsftpd.crt
#使用CA服务器签发证书,设置证书的有效期等信息注意 1:生成完秘钥和证书文件后,将本目录{/etc/ssl/certs/}的权限修改为 500
注意 2:在实验环境中可以用命令生成测试,在生产环境中必须要在 https 证书厂商注册(否则浏览器不识别)
  • 修改主配置文件/etc/vsftpd/vsftpd.conf
ssl_enable=YES
#启用 ssl 认证
ssl_tlsvl=YES
ssl_sslv2=YES
ssl_sslv3=YES
#开启 tlsv1、sslv2、sslv3 都支持
allow_anon_ssl=YES
#允许匿名用户{虚拟用户}
force_anon_logins_ssl=YES
force_anon_data_ssl=YES
#匿名登录和传输时强制使用 ssl
force_local_logins_ssl=YES
force_local_data_ssl=YES
#本地登录和传输时强制使用 ssl
rsa_cert_file=/etc/ssl/certs/vsftpd.crt
#rsa格式的证书
rsa_private_key_file=/etc/ssl/certs/vsftpd.key
#rsa格式的密钥
注:密钥文件要在配置文件中单独声明(写入配置文件时,注释要单独一行,否则会报错)
  • 重启服务

service vsftpd restart

  • 测试(使用第三方客户端连接)

FileZilla-FTP(第三方客户端工具)
连接测试时选择:
服务器类型:显示 TLS/SSL
登录类型:一般或匿名

这篇关于Linux云计算之网络服务(VSFTP)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/730178

相关文章

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

Python实现精确小数计算的完全指南

《Python实现精确小数计算的完全指南》在金融计算、科学实验和工程领域,浮点数精度问题一直是开发者面临的重大挑战,本文将深入解析Python精确小数计算技术体系,感兴趣的小伙伴可以了解一下... 目录引言:小数精度问题的核心挑战一、浮点数精度问题分析1.1 浮点数精度陷阱1.2 浮点数误差来源二、基础解决

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

Linux搭建ftp服务器的步骤

《Linux搭建ftp服务器的步骤》本文给大家分享Linux搭建ftp服务器的步骤,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录ftp搭建1:下载vsftpd工具2:下载客户端工具3:进入配置文件目录vsftpd.conf配置文件4:

Linux实现查看某一端口是否开放

《Linux实现查看某一端口是否开放》文章介绍了三种检查端口6379是否开放的方法:通过lsof查看进程占用,用netstat区分TCP/UDP监听状态,以及用telnet测试远程连接可达性... 目录1、使用lsof 命令来查看端口是否开放2、使用netstat 命令来查看端口是否开放3、使用telnet

Linux系统管理与进程任务管理方式

《Linux系统管理与进程任务管理方式》本文系统讲解Linux管理核心技能,涵盖引导流程、服务控制(Systemd与GRUB2)、进程管理(前台/后台运行、工具使用)、计划任务(at/cron)及常用... 目录引言一、linux系统引导过程与服务控制1.1 系统引导的五个关键阶段1.2 GRUB2的进化优

Python文本相似度计算的方法大全

《Python文本相似度计算的方法大全》文本相似度是指两个文本在内容、结构或语义上的相近程度,通常用0到1之间的数值表示,0表示完全不同,1表示完全相同,本文将深入解析多种文本相似度计算方法,帮助您选... 目录前言什么是文本相似度?1. Levenshtein 距离(编辑距离)核心公式实现示例2. Jac

Linux查询服务器 IP 地址的命令详解

《Linux查询服务器IP地址的命令详解》在服务器管理和网络运维中,快速准确地获取服务器的IP地址是一项基本但至关重要的技能,下面我们来看看Linux中查询服务器IP的相关命令使用吧... 目录一、hostname 命令:简单高效的 IP 查询工具命令详解实际应用技巧注意事项二、ip 命令:新一代网络配置全