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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值