1.FTP简介
1.1FTP:File Transfer Protocol 文件传输协议
FTP是用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式。它属于网络传输协议的应用层。文件传送(file transfer)和文件访问(file access)之间的区别在于:前者由FTP提供,后者由如NFS等应用系统提供。
在FTP的使用当中,用户经常遇到两个概念:"下载"(Download)和"上传"(Upload)。
"下载"文件就是从远程主机拷贝文件至自己的计算机上;"上传"文件就是将文件从自己的计算机中拷贝至远程主机上。用Internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件,由于FTP的文件传输是明文方式,具有一定危险性,所以就诞生了一种更加安全的传输方式vsftp,下面主要介绍vsftp的特性及相关配置。
2.VSFTP特点
2.1VSFTP是一个比FTP更安全的软件具有以下特点:
01 vsftp一般以普通用户运行,降低了进程的权限,提高了安全性
02 任何需要执行较高权限的指令都需要上层程序的许可
03 ftp的命令都被整合到了vsftp中,不需要系统额外提供命令
04 用于chroot功能,可以改变用户的根目录,限制用户只能在自己的家目录
05 vsftpd 是一个基于GPL发布的FTP服务器软件。其中的vs是“ Very Secure”的缩写,由此名称缩写可以看出,本
服务器的初衷就是服务的安全性。
06 vsftpd是RedHat Linux默认使用的ftp服务端软件。
07 vsftpd不再依赖于xinetd服务
08 vsftpd可同时允许匿名( anonymous )与本地用户(local)访问,还可以支持虚拟用户。
3.VSFTP连接类型
控制连接:TCP 21,用于发送FTP命令信息
数据连接:TCP 20,用于上传、下载数据
4.Vsftp工作模式
4.1FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式
主动模式:服务端从20端口主动向客户端发起连接
被动模式:服务端在指定范围内某个端口被动等待客户端连接
主动模式端口分配:控制端口 21 传输数据端口 20
被动模式端口分配:控制端口 21 传输数据端口 随机
5. FTP的PORT(主动模式) 和 FTP的PASV(被动模式)
5.1PORT(主动模式)
PORT中文称为主动模式,工作的原理: FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,客户端随机开放一个端口(1024以上), 发送 PORT命令到FTP服务器,告诉服务器客户端采用主动模式并开放端口;FTP服务器收到PORT主动模式命令和端口号后,通过服务器的20端口和客户端 开放的端口连接,发送数据,原理如下图:
如上图所示,在主动模式下,FTP客户端从任意端口5150(端口号>1023)发起一个FTP请求,并携带自己监听的端口号5151(发送的端口号+1=监听端口号);随后服务器返回确认,然后从服务器本地的20端口主动发起连接请求到客户端的监听端口5151,最后客户端返回确认。
这种模式缺点在于服务器带客户端的FTP连接很容易被传输过程中的路由器、防火墙所影响或拦截。
5.2PASV(被动模式)
PASV是Passive的缩写,中文成为被动模式,工作原理:FTP 客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,发送PASV命令到FTP服务器, 服务器在本地随机开放一个端口(1024以上),然后把开放的端口告诉客户端, 客户端再连接到服务器开放的端口进行数据传输,原理如下图:
为了主动模式所面临的服务器到客户端的连接会被拦截阻塞的问题,FTP发展出了被动模式。在被动模式中,命令连接和数据连接都由客户端来发起,这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙拦截的问题。
如上图所示,客户端用随机命令端口5150向服务器的21命令端口发送一个PASV请求,然后服务器返回数据端口3267,告诉客户端我在哪个端口监听数据连接。然后客户端向服务器的监听端口3268发起数据连接,最后服务器回复确认ok。
6.VSFTP传输模式
1 文本模式:ASCII模式,以文本序列传输数据
2 二进制模式:Binary模式,以二进制序列传输数据
7.FTP用户的类型
1 匿名用户:anonymous或ftp
2 本地用户:帐号名称、密码等信息保存在passwd/shadow文件中
3 虚拟用户:使用独立的帐号/密码数据文
8.环境准备
8.1关闭SElinux
setenforce 0 临时关闭selinux
vim /etc/selinux/config 永久关闭selinux
SELINUX=disabled
8.2关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
9.安装并启动FTP服务
9.1 查看系统是否安装vsftp
rpm -qa | grep vsftpd
执行命令没有反馈就是没有安装
9.2 使用yum命令安装vsftpd
yum install -y vsftpd
9.3 启动vsftpd
systemctl start vsftpd
9.4 查看21端口是否存在
netstat -nltp|grep 21
9.5 宿主机浏览器访问 ftp://10.0.0.201
FTP默认的存储目录 /var/ftp/pub 默认不允许匿名用户上传
10.创建FTP用户
10.1 创建一个ftp用户
useradd zxcvbnm
10.2 为ftp用户设置密码
echo "zxcvbnm" | passwd zxcvbnm --stdin
10.3 限制该用户只能访问FTP,不能直接登录服务器(系统)
usermod -s /sbin/nologin zxcvbnm
11.创建FTP文件存储路径
11.1 创建FTP文件存储路径
mkdir /var/www -p 创建主目录,不可上传文件
mkdir /var/www/html 文件存储目录
11.2 设置访问权限
chmod a-w /var/www && chmod 777 -R /var/www/html
12.修改系统用户的存储目录
vim /etc/vsftpd/vsftpd.conf
local_root=/var/www/ 针对系统用户的存储目录
anon_root=/var/www/ 针对匿名用户的存储目录
13.配置FTP权限
13.1 vsftpd的配置目录:/etc/vsftpd
vsftpd.conf 主要配置文件(注意备份)
ftpusers 配置禁止访问 FTP 服务器的用户列表
user_list 配置用户访问控制
建议备份vsftpd.conf文件: cp vsftpd.conf vsftpd.conf.bak
绝对路径: cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
13.2 关闭匿名访问和切换根目录权限
vim vsftpd.conf
anonymous_enable=NO 禁用匿名用户
chroot_local_user=YES 禁止切换根目录 删除此行
13.3 重启FTP服务
systemctl restart vsftpd
重启之后再用浏览器登陆ftp,此时需要输入用户名和密码
14.vsftp为不同用户设置不同的ftp的根目录
需求:
要求ftp登录后的根目录是/var/www/,但是又不能影响其他用户的登录路径,因为有些程序是直
接在根目录进行操作的,而没有目录切换的过程。
操作过程
注释掉配置文件中的存储目录
#local_root=/var/www/
#anon_root=/var/www/
创建多用户访问不同的根目录,这两行已经不生效。所以注释不注释都可以
14.1 创建第二个FTP用户
useradd zxcvbnm1
14.2 添加密码
echo "zxcvbnm1" | passwd lzxcvbnm1 --stdin
14.3 限制该用户只能访问FTP,不能直接登录服务器(系统)
usermod -s /sbin/nologin zxcvbnm1
14.4 vsftpd配置
配置各自用户访问根目录
cd /etc/vsftpd/
mkdir userconfig
cd userconfig
用户配置目录 user_config_dir=/etc/vsftpd/userconfig
vim /etc/vsftpd/vsftpd.conf
在userconfig目录下为不同用户配置不同的根目录:
mkdir /var/www/html/lidao -p
vim /etc/vsftpd/userconfig/zxcvbnm
local_root=/var/www/html
mkdir /var/www/hedao/ -p
vim /etc/vsftpd/userconfig/zxcvbnm1
local_root=/var/www/hedao
14.5 重启服务
systemctl restart vsftpd
14.6 创建测试文件,进行测试
mkdir /var/www/html/laonanhai -p
mkdir /var/www/hedao/lizhengya -p
用zxcvbnm用户测试一下
zxcvbnm用户对应的根目录是/var/www/html
用zxcvbnm1用户测试一下
zxcvbnm1对应的根目录是hedao
15.VSFTP权限管理
ll /var/www/html/ -d
因为所有者和所属组和其他人都是读写执行权限,所以可以正常上传66.txt文件
ll /var/www/html/laonanhai -d
因为laonanhai这个目录其他用户没有写的权限,所以zxcvbnm用户登录的FTP服务器,也没有写的权限,所以不能上传文件
给老男孩目录提权
chmod 775 /var/www/html/laonanhai
ll /var/www/html/laonanhai -d
让laonanhai有写的权限
usermod -a -G root zxcvbnm
id laonanhai
让zxcvbnm属于zxcvbnm组,也属于root组
重启vsftp 重启后,从电脑访问ftp 拖拽文档放入就可以了
systemctl restart vsftpd
16.FTP客户端
FTP图形化客户端 Xftp falshfxp 资源管理器 浏览器 等等。。。
访问方式: ftp://自己FTP服务器的ip地址
FTP命令行客户端 Xshell SecureCRT 等等。。。
访问方式: ftp 自己FTP服务器的ip地址
17.vsftpd.conf配置文件
vsftpd.conf 里面有很多的配置项,这里只列出一部分常用的配置项
下面是配置的选项及说明
17.1 系统用户的配置
local_enable=YES # 是否允许本地用户登录
write_enable=YES # 是否允许本地用户的写权限(是否允许上传)
listen=YES # 是否开启监听
listen_port=2121 # 修改连接端口
pam_service_name=vsftpd # 服务名称
local_umask=022 # 默认的umask码(本地用户的掩码信息)
diremssage_enable=YES # 是否显示目录说明文件
connect_from_prot_20=YES # 是否确定端口传输来自20
xferlog_ftd_format=YES # 是否使用标准的ftp xferlog模式
17.2 匿名登录设置(匿名用户的常用配置)
anonymous_enable=NO # 是否允许匿名登录
anno_upload_enable=YES #是否允许匿名用户上传权限
anno_mkdir_write_enable=YES #是否允许匿名用户可创建目录及其文件
anno_other_write_ebable=YES #匿名用户是否除了写权限是否拥有删除和修改的权限
anno_world_readable_only=YES #匿名用户是否拥有只读权限
no_anno_password=YES #匿名用户是否跳过密码检测
anno_umask=077 #匿名用户创建文件的掩码权限
17.3 限制目录
chroot_local_user=yes # 限制所有用户都在家目录(禁锢所有ftp用户在其家目录下)
chroot_list_enable=YES # 调用限制在家目录的用户名单(是否将系统用户限制在自己的
home目录下)
chroot_list_file=/etc/vsftpd/chroot_list # 限制在家目录的用户名单所在路径(列表不受限制的用户)
17.4 日志设置
xferlog_file=/var/log/vsftpd.log # 日志文件路径设置
xferlog_enable=YES # 是否记录ftp传输过程
use_localtime=YES
默认情况下,vsftpd 是用GMT做为它的时间的,所以和操作系统的时间不一致,加入这个命令来同步vsftpd与操作系统的时间
作者:星辰追路人
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
- centos7中搭建ftp服务
博客搬家: centos7中搭建ftp服务 最近想和同学共享一些文件资源,于是在实验室服务器上搭建个ftp服务,本博客记录一下配置的流程.过程基本是参照别人的方法来做的,博客也是在别人博客基础上修改的 ...
- CentOS7.5 上使用 bundle 文件安装 MySQL8.0 MySQL5.0
CentOS7.5 上使用 bundle 文件安装 MySQL8.0 MySQL5.0 CentOS7.5 环境 [root@instance-fjii60o3 ~]# rpm -qi centos- ...
- http,ftp服务的安装
首先,要配置云源(在我上一篇博客中有云源配置的详细过程) 一.http服务的安装 1.安装 http yum install -y httpd 2.启动http服务 systemctl sta ...
- ftp服务的安装
ftp服务的安装 1.环境准备 2.安装服务 3.配置文件 3.1.匿名访问 把以下三个匿名上传写入开启 启动并查看服务状态: Linux客户端访问: Tips: 220表示服务正常,可以登陆:230 ...
- RedHat 7.0 下 FTP 服务的安装,启动,配置,以及虚拟用户的建立
(注意! 区分shell命令和往配置文件里加的代码不同) 一:ftp服务的安装,启动和启用. 1:vim /etc/sysconfig/selinux 改为disabled后重启 ...
- Ubuntu学习总结-02 Ubuntu下的FTP服务的安装和设置
一 安装vsftpd 在安装前vsftpd,先更新apt-get下载的数据源输入如下命令: sudo apt-get update 然后安装vsftpd sudo apt-get install vs ...
- CentOS7.4搭建ftp服务
1.使用yum安装vsftpd yum install vsftpd -y 2.安装完成后,启动 FTP 服务: service vsftpd start 3.配置ftp权限 目前 FTP 服务登陆允 ...
- Linux(Centos7) 实例搭建 FTP 服务
本文以 CentOS 7.2 64位系统为例,使用 vsftpd 作为 FTP 服务端,FileZilla 作为客户端.指导您如何在 Linux 云服务器上搭建 FTP 服务. 操作步骤 安装 vsf ...
- centos7.4 开启ftp服务
1.安装vsftpd yum install -y ftp vsftpd 2.配置/etc/vsftpd/vsftpd.conf 修改项如下: #不允许匿名访问 anonymous_enable=NO ...
随机推荐
- CUDA软件架构—网格(Grid)、线程块(Block)和线程(Thread)的组织关系以及线程索引的计算公式
网格(Grid).线程块(Block)和线程(Thread)的组织关系 CUDA的软件架构由网格(Grid).线程块(Block)和线程(Thread)组成,相当于把GPU上的计算单元分为若干(2~3 ...
- SQL2008错误:当 MUST_CHANGE 为 ON (开)时,不能将 CHECK_POLICY 和 CHECK_EXPIRATION 选项设为 OFF (关)。
假设出现这样的情况,第一个选择是: 在数据库用户管理中去掉了"强制password过期"! 假设把"强制实施password策略"的勾也去掉了,出现例如以下错误 ...
- DDD实战6 单元测试
1.在Products解决方案文件夹下面新建一个项目 一个单元测试项目 Product.Tests.
- UITextField设置leftView的Insets
Insets就是css中的padding 我们给UITextField设置了leftView,目的是在文本输入框左側显示一个图标.可是在ios7里,这个图标会紧紧地挨着TextField的左边框,非常 ...
- 用 Expression Blend 创建酷炫的 Button
原文:用 Expression Blend 创建酷炫的 Button 原文:Creating "Cool" Buttons with Expression Blend Author ...
- android4.4系统解决“ERRORcouldn't find native method”方法
android4.4系统解决"ERRORcouldn't find native method"方法 今天笔者在移植一个tv模块从android4.2到android4.4系统的设 ...
- Cocos2d-x3.1下实现相似iOS页面滑动指示圆点
原文地址:http://blog.csdn.net/qqmcy/article/details/37612457 代码下载:http://download.csdn.net/detail/qqmcy/ ...
- Oracle 如何删除掉一个用户下的所有对象
create or replace procedure drop_all as cursor cur_obj is select uo.OBJECT_NAME, uo.OBJECT_TYPE from ...
- 图像处理与计算机视觉的 topics
光学图像(optical image): the apparent reproduction of an object, formed by a lens or mirror system from ...
- if-then和if-then-else声明
1.使用if-then声明 结构化命令,主要类型为if-then声明.if-then例如,下面的语句格式: if command then commands fi 假设你在使用其它编程语言的if-th ...