Linux中的ftp

简介: Linux中的ftp

引言:

FTP 是因特网网络上历史最悠久的网络工具,从 1971 年由 A KBHUSHAN 提出第一个 FTP 的RFC(RFC114) 至今近半个世纪来,FTP 凭借其独特的优势一直都是因特网中最重要、最广泛的服务之一。


一、FTP概述

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


21端口:用于传输指令


22端口:用于传输数据


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


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


Standard模式(主动模式)


FTP客户端首先和FTP Server的TCP

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


Passive模式(被动模式)


在建立控制通道的时候和standard模式类似,当客户端通过这个通道发送PASV命令的时候,FTP

server打开一个位于1024和5000之间的随机端口并且通知客户端在这个端口上传送数据的请求,然后FTP server将通过这个端口进行数据的传送,这个时候FTp server不再需要建立一个新的和客户端之间的连接


二、FTP的作用及工作原理

1.FTP的作用和模式以及通信方式

FTP (File Transfer Protocol:文件传输协议)作用: Internet 上用来远程传送文件的协议。


vsftp全称(very secure FTP)

vsftp模式:c/s模式


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


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


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


2.FTP的工作原理

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


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


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


2.1主动模式

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


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


2.2被动模式


首先客户端的高位端口向服务器的21端口建立FTP连接请求(连接请求包括:认证,用户,密码,连接模式,命令PORT端口);

FTP服务器响应ACK确认,服务器的21号端口和客户端的高位端口建立ftp会话连接,并告诉客户端已开放20号端口,等你来连接;

客户端用自己的一个高位端口连接服务器响应的一个高位端口;

服务器给客户端发送ACK确认,开始数据传输


三、搭建和配置FTP 服务

环境:准备两台虚拟机,其中一台Linux系统做服务器,一台Windows做客户机。并且能互通


3.1安装前准备工作,关闭防火墙

因为ftp服务的端口为21,20是高危端口,所以必须关闭防火墙防止服务操作被屏蔽


systemctl stop firewalld

setenforce 0



3.2查看信息,安装软件包vsftpd

配置ftp服务


[root@localhost ~]# rpm -q vsftpd //查看是否安装了ftp服务
未安装软件包 vsftpd
yum info vsftpd 查看信息
yum install -y vsftpd #yum源一键安装





3.3开启FTP服务,切换目录并做备份

[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服务状态



3.4设置用户固定登录路径

3.4.1创建用户

[root@localhost ~]# useradd zhangsan
[root@localhost ~]# passwd zhangsan
[root@localhost ~]# useradd lisi
[root@localhost ~]# passwd lisi
[root@localhost ~]# useradd wangwu
[root@localhost ~]# passwd wangwu //创建用户并设置密码


3.4.2查看用户账号

[root@localhost ~]# tail -4 /etc/passwd //查看账号
apache❌48:48:Apache:/usr/share/httpd:/sbin/nologin
zhangsan❌1001:1001::/home/zhangsan:/bin/bash
wangwu❌1002:1002::/home/wangwu:/bin/bash
lisi❌1003:1003::/home/lisi:/bin/bash


3.4.3设置固定路径

[root@localhost ~]# 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 ~]# mkdir /usr/local/html //创建用户指定登陆的路径
[root@localhost ~]# ls /usr/local//看看是否创建成功
bin etc games html include lib lib64 libexec sbin share src
[root@localhost ~]# vim /etc/vsftpd/chroot_list //将想要限制的用户填入



3.4.4配置用户白名单

[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.5设置匿名用户访问的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


相关文章
|
7月前
|
存储 安全 Shell
⭐⭐【Shell 命令集合 文件传输 】Linux ftp工具 使用指南
⭐⭐【Shell 命令集合 文件传输 】Linux ftp工具 使用指南
210 0
|
7月前
|
存储 Shell Linux
【Shell 命令集合 文件传输 FTP客户端工具】Linux ncftp 命令使用指南
【Shell 命令集合 文件传输 FTP客户端工具】Linux ncftp 命令使用指南
155 0
|
7月前
|
安全 算法 网络协议
【Linux】文件服务FTP(File Transfer Protocol)
【Linux】文件服务FTP(File Transfer Protocol)
118 0
|
3月前
|
网络协议 安全 Linux
如何配置Linux端的ftp?
如何配置Linux端的ftp?
163 64
|
4月前
|
JavaScript Linux 应用服务中间件
【Azure 应用服务】FTP 部署 Vue 生成的静态文件至 Linux App Service 后,访问App Service URL依旧显示Azure默认页面问题
【Azure 应用服务】FTP 部署 Vue 生成的静态文件至 Linux App Service 后,访问App Service URL依旧显示Azure默认页面问题
|
4月前
|
安全 Ubuntu Linux
在Linux中,如何进行FTP服务器配置?
在Linux中,如何进行FTP服务器配置?
|
4月前
|
网络协议 Linux 网络安全
在Linux中,我们都知道FTP协议有两种工作模式,它们的大概的⼀个工作流程是怎样的?
在Linux中,我们都知道FTP协议有两种工作模式,它们的大概的⼀个工作流程是怎样的?
|
4月前
|
Linux 网络安全 数据安全/隐私保护
在Linux中,FTP 的主动模式和被动模式是什么?有何区别?
在Linux中,FTP 的主动模式和被动模式是什么?有何区别?
|
7月前
|
Web App开发 安全 Unix
Linux 配置FTP服务器 + vsftpd服务安装配置 (Good篇)
Linux 配置FTP服务器 + vsftpd服务安装配置 (Good篇)
211 1
|
6月前
|
Ubuntu Linux 数据库
ubuntu linux 搭建ftp虚拟目录
ubuntu linux 搭建ftp虚拟目录
64 0