0
点赞
收藏
分享

微信扫一扫

Linux中的ftp

诗尚凝寒 2022-04-17 阅读 63

Linux中的ftp


引言: 工作中常用到远程连接

一.什么是ftp

1.1 ftp概述

FTP(File TransferProtocol,文件传输协议)
是典型的 c/s 架构的应用层协议,需要由服务端软件、客户端软件两个部分共同实现文件传输功能。FTP客户端和服务器之间的连接是可靠的,面向连接的,为数据的传输提供了可靠的保证。
tcp协议:20,21端口
21端口:用于传输指令
20端口:用于传输数据

1.2 传输方式

FTP是一种文件传输协议,它支持两种模式,一种方式叫做Standard(也就是Active主动方式),一种是 Passive(也就是PASV被动方式)。

Standard模式FTP的客户端发送 PORT命令到FTPserver。Passive模式FTP的客户端发送 PASV命令到FTP Server

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

Passive模式(被动模式)
在建立控制通道的时候和Standard模式类似,当客户端通过这个通道发送PASV命令的时候,FTP server打开一个位于 1024和5000 之间的随机端口并且通知客户端在这个端口上传送数据的请求,然后FTP server将通过这个端口进行数据的传送,这个时候FTP server不再需要建立一个新的和客户端之间的连接。

二、FTP作用与工作原理

2.1 ftp的作用和模式以及通信方式

FTP (File Transfer Protocol:文件传输协议)

作用: Internet 上用来远程传送文件的协议。

vsftp全称(very secure FTP)

vsftp模式:c/s模式

FTP服务器默认使用TCP协议的20、21端口与客户端进行通信

20端口用于建立数据连接,并传输文件数据

21端口用于建立控制连接,并传输FTP控制命令

2.2 ftp的工作原理

FTP数据连接分为主动模式和被动模式

主动模式:服务器主动发起数据连接

被动模式:服务器被动等待数据连接

2.2.1 主动模式

在这里插入图片描述
FTP 客户端连接到FTP 服务器的21号端口,发送用户名和密码,客户端随机开放一个端口(1024以上),发送PORT 命令到FTP 服务器,告知服务器客户端采用主动模式并开放端口,FTP服务器收到PORT主动模式命令和端口后,通过服务器的20号端口和客户端开放的端口连接,发送数据,原理画图所示,(无论是主动还是被动模式,首先的控制通道都是先建立起来,只是在数据传输模式上的区别)1

主动模式有个弊端,客户端必须关闭防火墙,否则不能传输数据。

2.2.2 被动模式

在这里插入图片描述
PASV是Passive的缩写,中文成为被动模式,工作原理:FTP客户端连接到FTP服务器所监听的21号端口,发送用户名和密码,发送PASV命令到FTP服务器,服务器在本地也随机开放一个端口(1024以上),然后把开放的端口告知客户端,而后客户端再连接到服务器开放的端口进行数据传输,原理画图所示。

注:以上的说明主动和被动,是相对于的FTP server端而判断,如果server去连接client开放的端口,说明是主动的,相反,如果client去连接server开放的端口,则是被动。

三、部署ftp服务

3.1 配置ftp服务

[root@localhost ~]rpm  -q   vsftpd   ###查看服务是否安装
未安装软件包 vsftpd 
[root@localhost ~]# yum install vsftpd    ###未安装用yum安装
因为ftp的端口为20.21 高危端口所以需要关闭防火墙,以防服务被屏蔽
[root@localhost ~]# systemctl stop firewalld   ### 关闭防火墙
[root@localhost ~]# systemctl disable firewalld  ###设置开机自动关闭
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@localhost ~]# setenforce 0    ###临时增强安全功能(防火墙关闭时服务器处于裸奔状态,需要临时增强防护)
[root@localhost ~]# systemctl status firewalld  ###查看防火墙状态

在这里插入图片描述

 [root@localhost ~]# systemctl start vsftpd   ###启动ftp服务
 [root@localhost ~]# systemctl enable vsftpd   ###设置开机自启
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to     /usr/lib/systemd/system/vsftpd.service.
[root@localhost ~]# systemctl status vsftpd  ###查看此时ftp服务状态

在这里插入图片描述
至此ftp服务已在服务端配置完成

3.2 设置用户固定登录路径

[root@localhost vsftpd]# useradd zhangsan
[root@localhost vsftpd]# useradd lisi    ####创建用户
[root@localhost vsftpd]# useradd wangwu
[root@localhost vsftpd]# passwd zhangsan
[root@localhost vsftpd]# passwd lisi     ###为用户添加密码
[root@localhost vsftpd]# passwd wangwu
[root@localhost vsftpd]# tail -4 /etc/passwd   ###查看账户设置
zho:x:1004:1004::/home/zho:/bin/bash
zhangsan:x:1005:1005::/home/zhangsan:/bin/bash
lisi:x:1006:1006::/home/lisi:/bin/bash
wangwu:x:1007:1007::/home/wangwu:/bin/bash

[root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf   ###进入编辑限制用户远程登录到固定路径
102 chroot_list_enable=YES
104 chroot_list_file=/etc/vsftpd/chroot_list    ###两行取消“#”注解
local_root=/usr/local/html  ###指定用户登录的目录且 不能cd到其他目录
[root@localhost vsftpd]# mkdir /usr/local/html   ###创建用户指定登录路径
[root@localhost vsftpd]# ls /usr/local    ###查看是否创建
apache  bin  etc  games  html  include  lib  lib64  libexec  sbin  share  src
[root@localhost vsftpd]# vim /etc/vsftpd/chroot_list   ###填写被限制登录路径的用户

在这里插入图片描述
此时远程登录主机,并使用lisi账号,发现用户在/etc/local/html尝试切换位置,发现请求被拒绝。设置固定位置成功
在这里插入图片描述

3.3 配置用户白名单

[root@localhost vsftpd]# vim /etc/vsftpd/user_list   ###进入编辑白名单,在行尾加上lisi
[root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf  ###进入编辑启用白名单
userlist_enable=YES
userlist_deny=NO
[root@localhost vsftpd]# systemctl restart vsftpd    ###重启服务

在这里插入图片描述
验证:此时远程登录zhangsan ,wangwu 皆登录失败,只有lisi用户可以登录,所以黑白名单设置成功

3.4 匿名用户访问

设置匿名用户访问的ftp服务(最大权限)
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
[root@localhost ~]# chmod -R 777 /var/ftp/pub/

vim /etc/vsftpd/vsftpd.conf

anonymous_enable=YES           #开启匿名用户访问。默认开启
write_enable=YES               #开放服务器的写权限(若要上传必须开启)。默认已开启
anon_umask=022                 #设置匿名用户所上传数据的权限掩码(反掩码)
anon_upload_enable=YES         #允许匿名用户上传文件。默认已注释,需取消注释
anon_mkdir_write_enable=YES    #允许匿名用户创建(上传)目录。默认已注释,需取消注释
anon_other_write_enbale=YES    #允许删除、重命名、覆盖等操作。需添加

chmod -R 777 /var/ftp/pub/ #为匿名访问ftp的根目录下的pub子目录设置最大权限
以便匿名用户上传数据

systemctl restart vsftpd #重启服务
在这里插入图片描述

在windows系统打开开始菜单,输入cmd命令打开命令提示符

ftp 192.168.223.9                #建立ftp连接
匿名访问时,用户名为ftp,密码为空,直接回车即可完成登录

ftp> pwd                         #匿名访问ftp的根目录为Linux系统的/var/ftp/目录
ftp> ls                          #查看当前目录  
ftp> cd pub                      #切换到pub目录
ftp> get 文件名                  #下载文件到当前windows本地目录
ftp> put 文件名                  #上传文件到ftp目录
ftp> quit                        #退出

详细命令

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@localhost ~]# setenforce 0
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
[root@localhost ~]# chmod -R 777 /var/ftp/pub/
[root@localhost ~]# systemctl restart vsftpd
[root@localhost ~]# ll /var/ftp/
总用量 0
drwxrwxrwx. 2 root root 6 10月 31 2018 pub
[root@localhost ~]# cd /var/ftp/pub
[root@localhost pub]#  touch 22.txt
[root@localhost pub]# ls
22.txt
[root@localhost pub]# ls
19.txt  22.txt

在这里插入图片描述
在这里插入图片描述

总结:

ftp的相关操作与原理是我们必须知道与掌握的,因为我们会经常远程操作

举报

相关推荐

0 条评论