linux FTP文本传输

目录

一、文本传输协议

二、连接方式

三、程序安装

四、黑名单和白名单

五、实验

  1.实验一:匿名用户下载与上传

  2.实验二:关闭匿名用户登录,允许普通用户登录在家目录上传和下载

  3.实验三:禁止用户切换目录,只能在家目录操作

  4.实验四:黑名单限制test1登录

     5.实验五:白名单限制

  6.实验六:root登录

  

 

 

 

 

 

 

 

 

 

 

 

 

一、文本传输协议

   ftp特点:1.网络控制文件的双向传输

       2.是一个应用程序

       3.有不同操作系统ftp

       4.都遵守同一种协议

       5.传输协议tcp

       6.通信端口20 和21(20是建立数据连接,传输文件数据,21是控制连接,传输ftp控制命令)

 

二、连接方式

  1.主动模式:服务器主动对客户端发起连接,客户端与服务器的21端口连接,需要传输数据时,客户端会选择一个未使用的端口,告知服务器通过此端口传输数据,服务器通过连接将连接请求发给客户端,确定建立连接。

  2.被动模式:客户端主动对服务器发起连接,客户端与服务器的21端口连接,需要传输数据时,服务器现在在一个未使用的端口,告诉服务器通过此端口传输数据,客户端通过连接将连接请求发给客户端,确定建立连接。

  

  主动模式和被动模式区别:

    生产中一般采用被动模式,这样可以更好的跨过防火墙的限制。

  

  红色时主动模式,蓝色时被动模式

 

 

三、程序安装

  vsftpd安装

 

四、黑名单和白名单

  黑名单:凡是在名单上都不可以登录

  白名单:只有在名单上才可以登录(安全性较高)

  最后权限文件:ftpusers,里面用户不可登录(系统用户)

 

  

五、实验

  1.实验一:匿名用户下载与上传

   默认备份文件

  进入配置文件夹,备份一份vsftpd.conf

     进入配置文件进行修改

     允许匿名用户上传文件。默认已注释,需取消注释

    允许匿名用户创建(上传)目录。默认已注释,需取消注释

    允许删除、重命名、覆盖等操作。需添加

 

     重启服务

    关闭防火墙,关闭安全机制

   增加匿名文件pub权限

   增加一个文件便于上传和下载

   下载txt

   查看test.txt文件

 

   上传text1.txt

  先创建一个text1.txt文件

 

 

   

   接收成功,查看文件

  2.实验二:关闭匿名用户登录,允许普通用户登录在家目录上传和下载

  设置用户密码

   将文件权限设置为只能在宿主目录操作

   可以看到

  在其他目录是不能上传和下载,只有在/home/test1家目录里才可以操作

   

  3.实验三:禁止用户切换目录,只能在家目录操作

  将用户禁锢在家目录

  允许写权限

   重启服务

   可以看到test1用户想切换到/opt目录无法切换

  但是可以在家目录查看

   

  4.实验四:黑名单限制test1登录

  打开黑名单

   vim /etc/vsftpd/vsftpd.conf 

   查看黑名单用户名

   确定没有test1,说明test1可以登录

   test1确实可以登录

   5.实验五:白名单限制

    vim /etc/vsftpd/vsftpd.conf

   确定有test1,说明test1可以登录,没有test2不可登录

   切换黑白名单要重启服务vsftp

   可以看到test1可以登录,test2不可登录

   6.root可以登录(默认不能登录)

  进入ftbusers删除root,user_list里也加入root(现在是白名单)

 

 可以看到可以登录

 

本文转载于网络 如有侵权请联系删除

相关文章

  • Java8中的Stream流式操作 - 入门篇

    作者:汤圆个人博客:javalover.cc前言之前总是朋友朋友的叫,感觉有套近乎的嫌疑,所以后面还是给大家改个称呼吧因为大家是来看东西的,所以暂且叫做官人吧(灵感来自于民间流传的四大名著之一《金瓶梅》)官人们好啊,我是汤圆,今天给大家带来的是《Java8中的Stream流式操作-入门篇》,希望有所帮助,谢谢文章纯属原创,个人总结难免有差错,如果有,麻烦在评论区回复或后台私信,谢啦简介流式操作也叫做函数式操作,是Java8新出的功能流式操作主要用来处理数据(比如集合),就像泛型也大多用在集合中一样(看来集合这个小东西还是很关键的啊,哪哪都有它)下面我们主要用例子来介绍下,流的基操(建议先看下lambda表达式篇,里面介绍的lambda表达式、函数式接口、方法引用等,下面会用到)先来看下目录目录流是什么老板,上栗子流的操作步骤流的特点流式操作和集合操作的区别正文1.流是什么流是一种以声明性的方式来处理数据的API什么是声明性的方式?就是只声明,不实现,类似抽象方法(多态性)2.老板,上栗子下面我们举个栗子,来看下什么是流式操作,然后针对这个栗子,引出后面的相关概念需求:筛选年龄大于1的猫

  • Java基础 - 入门

    Java基础-【入门】首先来一个Hello,World!publicclassHelloWorld{ publicstaticvoidmain(String[]ages){ //创建快捷键psvm //单行注释 /*多行注释*/ /** *@Description文档注释 */ System.out.println("hello,world"); } }复制三种注释方式//单行注释复制/*多行注释*/复制/**文档注释*/ #注释内可以使用@+参数JavaDoc文档注释复制IDEA更改注释颜色Blockcomment #多行注释复制JavaDoc #文档注释复制Linecomment #单行注释复制标识符关键字abstractassertbooleanbreakbytecasecatchcharclassconstcontinuedefaultdodoubleelseenumextendsfinalfinallyfloatforgotoifimplementsimportinstanceofintinterfacelongnativenewpackag

  • MD5代码工具类

    packagecom.yunerp.base.utils.base; importsun.misc.BASE64Encoder; importjava.security.MessageDigest; importjava.security.NoSuchAlgorithmException; /** *md5工具类 *@authshijing *@date2016-01-0714:33:46 */ publicclassMD5Util{ privatestaticfinalStringhexDigits[]={"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"}; /** *加密 *@

  • jvm源码解析(五)synchronized和ReentrantLock

    一、Synchronized和ReentrantLock是怎么实现的,他们有什么区别synchronized属于独占式悲观锁,通过jvm隐式实现,只允许同一时刻只有一个线程操作资源。java中,每个对象都隐式包含一个monitor(监视器)对象加锁的过程其实就是竞争monitor的过程当线程进入字节码monitorenter指令之后线程将持有monitor对象,执行monitorexit时释放monitor对象当其他线程没有拿到monitor对象时,则需阻塞等待,获取该对象ReentrantLock是Lock的默认实现方式之一是基于AQS(AbstractQueuedSynchronizer,队列同步器)实现的,默认是通过非公平锁实现的内部有一个state的状态字段,用于表示锁是否被占用如果是0则表示锁未被占用,此时线程就可以把state改成1,并成功获得锁而其他未获得锁的线程只能排队等待获取锁的资源区别如下:synchronized是jvm隐式实现的,而ReentrantLock是Java语言提供的API;ReentrantLock可设置成公平锁,而synchronized不行Ree

  • three.js 制作机房(上)

    three.js使用的人太少了,一个博文就几百个人看,之前发js基础哪怕是d3都会有几千的阅读量,看看以后考虑说一说d3了,哈哈。吐槽完毕回归正题。前几天郭先生看到网上有人开发了3D机房,正愁博客没什么写的,于是昨天熬夜也做了一个,今天就把大体的流程告诉萌新们,先说说主要功能模块。墙体、地面、窗户以及门的实现(双击门禁门可开关)。机柜实现(机柜门的开关、机箱的推拉以及开关推拉的条件)。机箱存储占用比率(用颜色表示占用率,并附颜色谱图)。监控摄像视角(包括监控摄像机的模型导入,和四视角监控)。红外防控报警。强弱电线的铺设。以及风向。下面对应这7个功能模块附图。捕获11111.PNG捕获2222222222.PNG捕获3333333.PNG捕获4444444.PNG捕获5555555.PNG捕获6666666.PNG捕获77777777.PNG看图是不是感觉很好呢?不过细分下来每个点都是十分简单的。那么我们就按照模块分析一下。1.墙体、地面、窗户以及门的实现这一块主要就是对于3d空间位置的理解,旋转的使用以及uv的使用。考虑到墙面和窗户代码的重复使用,这里封装一下。封装完以后,改变更加灵活

  • MySQL主从复制详解

    前言:在MySQL中,主从架构应该是最基础、最常用的一种架构了。后续的读写分离、多活高可用架构等大多都依赖于主从复制。主从复制也是我们学习MySQL过程中必不可少的一部分,关于主从复制的文章有很多,笔者也来凑凑热闹,写写这方面的内容吧,同时分享下自己的经验和方法。1.主从复制简介及原理主从复制(也称AB复制)是指一台服务器充当主数据库服务器,另一台或多台服务器充当从数据库服务器,主服务器中的数据自动复制到从服务器之中。对于多级复制,数据库服务器既可充当主机,也可充当从机。MySQL默认采用异步复制方式。主从复制的过程及原理可以总结如下:master服务器将数据的改变记录二进制binlog日志,当master上的数据发生改变时,则将其改变写入二进制日志中。slave服务器会在一定时间间隔内对master二进制日志进行探测其是否发生改变,如果发生改变,则开始一个I/OThread请求master二进制事件。同时主节点为每个I/O线程启动一个dump线程,用于向其发送二进制事件,并保存至从节点本地的中继日志中,从节点将启动SQL线程从中继日志中读取二进制日志,在本地重放,使得其数据和主节点的

  • synchronized 代码块怎么用

    用不用synchronized的区别? synchronized作为悲观锁,锁住了什么? 之前2篇文章我们已经知道「synchronized」的使用方法以及锁的内容(实例对象和Class类对象),这已经涵盖了这个关键字的基本内容了,今天这篇想介绍一下另一种写法,就是「同步代码块」,它实现了更细粒度的同步方式。下面来见分晓。先给大家介绍一下同步代码块怎么写,大体的代码框架是这样:synchronized(xxx){ } 复制xxx可以是this或者Object或者xxx.class,下面我们就根据这3种不同加锁方式进行展开讨论。this表示的是锁住当前对象,和原来使用同步实例方式一样,锁住了当前的对象。publicclassSynchronizedCodeTest{ publicstaticvoidmain(String[]args){ SynchronizedCodeTestsynchronizedCodeTest=newSynchronizedCodeTest(); for(inti=0;i<5;i++){ Threadthread=newThread(()->{ s

  • nginx安装lua-nginx-module模块

    转载注明地址:http://www.cnblogs.com/dongxiao-yang/p/5312285.html本文主要采用手动源码安装的方式将lua-nginx模块编译到nginx源码内部一:系统版本1cat/etc/issueCentOSrelease6.7(Final)Kernel\ronan\m2cat/proc/versionLinuxversion2.6.32-573.el6.x86_64(mockbuild@c6b9.bsys.dev.centos.org)(gccversion4.4.720120313(RedHat4.4.7-16)(GCC))#1SMPThuJul2315:44:03UTC2015二:安装1安装LuaJIT下载地址http://luajit.org/download.html,本次下载的是2.0.0版本安装命令参考http://luajit.org/install.html教程,本文直接修改了Makefile文件里的默认路径PREFIX到/opt/luajit-2.0.0。make&&makeinstall安装完毕。2安装ngin

  • N-Gram

    N-Gram(N元模型)是自然语言处理中一个非常重要的概念,通常在NLP中,人们基于一定的语料库,可以利用N-Gram来评估一个句子是否合理。N-Gram的另外一个作用是用来评估两个字符串之间的差异程度,这是模糊匹配中常用的一种手段。本文将从此开始,进而向读者展示N-Gram在自然语言处理中的各种Powerful的应用基于N-Gram模型定义的字符串距离利用N-Gram模型评估语句是否合理使用N-Gram模型时的数据平滑算法基于N-Gram模型定义的字符串距离在自然语言处理中,最常用也是最基础的一个操作就是“模式匹配”,或者称为“字符串查找”。而模式匹配又分为精确匹配和模糊匹配两种精确匹配,大家并不陌生,比如我们要统计一篇文章中关键词infomation出现的次数,这时所用的方法就是精确匹配。这方面算法也很多,例如KMP算法、BM算法等模糊匹配,它的应用也随处可见。一般的文字处理软件(Word等)都会提供拼写检查的功能,当你输一个错误的单词,例如informtaion,系统会提示你要输入的词是否其实是information。将一个可能拼错的单词映射到一个推荐的正确拼写上,采用的技术就是

  • 快速学习-ElasticSearch介绍

    1ElasticSearch介绍1.1介绍官方网址:https://www.elastic.co/cn/products/elasticsearch Github:https://github.com/elastic/elasticsearch总结: 1、elasticsearch是一个基于Lucene的高扩展的分布式搜索服务器,支持开箱即用。 2、elasticsearch隐藏了Lucene的复杂性,对外提供Restful接口来操作索引、搜索。突出优点: 1.扩展性好,可部署上百台服务器集群,处理PB级数据。 2.近实时的去索引数据、搜索数据。es和solr选择哪个? 1.如果你公司现在用的solr可以满足需求就不要换了。 2.如果你公司准备进行全文检索项目的开发,建议优先考虑elasticsearch,因为像Github这样大规模的搜索都在用它。1.2原理与应用1.2.1索引结构下图是ElasticSearch的索引结构,下边黑色部分是物理结构,上边黄色部分是逻辑结构,逻辑结构也是为了更好的去描述ElasticSearch的工作原理及去使用物理结构中的索引文件。 逻辑结构部分是一个

  • python3对于抓取租房房屋信息的进一

    #-*-coding:utf-8-*- #File:7链家抓取--抓取经纪人信息.py #Author:HuXianyong #Date:2018-08-3015:41 fromurllibimportrequest fromtimeimportsleep fromlxmlimportetree ''' 在开始之前我们应该先查看下我们每次打开下一页链家网页的时候他的url上面有什么变化 我们每每点击下一页的时候他的url也对应的加上了page+n 还有就是referer也变化了,变成了我们的上一页 因此我们就需要对着这个变化来对url和referer做处理才能实现多页爬取数据 别的网页也应是有规律的 我们就用这个规律来做就好了 我们就只需要改变url和referer就好,其他的和单页抓取数据一样的 这里增加了地域的房屋,我们通过观察几页的url上面的改变,url都是由 链家域名+地域+页数来组成的,我们因此拼接出url ''' #我这里定义这个函数是抓取但也数据的,上个函数的循环把要抓取的页数传递到这里来 #我就抓取

  • 语音识别大牛莫名被JHU开除后,怒拒Facebook,转向中国公司与高校

    机器之心报道机器之心编辑部「我的计划是准备为一家中国公司工作,说不定也会在一家中国大学兼职当教授,」语音识别著名学者,前约翰霍普金斯大学教授DanielPovey在拒绝了Facebook之后更新了自己的去向。「几乎可以肯定是一家中国公司」,而且就在西雅图。作为语音识别领域的大牛,DanielPovey教授此前一直在负责霍普金斯语言语音处理中心的工作。他曾主导开发了语音识别工具库Kaldi,该工具库支持多种语音识别的模型的训练和预测,很多国内外语音技术公司的研发测试都是从Kaldi起步的。在5月约翰霍普金斯大学的学生抗议事件发生后,Povey教授因反对学生抗议而被认为是「种族歧视」,后遭学校开除——当时他试图强行进入被抗议者占领的大楼,拯救过热的服务器。而在Povey无奈准备进入业界,加入Facebook时,他又遇到了麻烦:「我不再会为Facebook工作了,我原本将在8月19日成为这家公司的全职员工,然而他们在15日告诉我,这事无法成行了。严格来说,他们没有撤销offer,我可以成为Facebook的一名外包员工,在六周的时间内等待他们完成调查。」DanPovey在自己的个人主页上撰文

  • Ubuntu下Python版的GDAL安装以及使用

    这里使用ubuntugis提供的gdal进行安装。 首先更新一下ubuntugis的源:sudoadd-apt-repositoryppa:ubuntugis&&sudoapt-getupdate复制或者sudoadd-apt-repositoryppa:ubuntugis/ubuntugis-unstable&&sudoapt-getupdate复制这里科普一下PPA(摘自百度百科): PersonalPackageArchives(个人软件包档案)是UbuntuLaunchpad网站提供的一项服务,允许个人用户上传软件源代码,通过Launchpad进行编译并发布为2进制软件包,作为apt/新立得源供其他用户下载和更新。在Launchpad网站上的每一个用户和团队都可以拥有一个或多个PPA。然后安装C++版本的GDAL:sudoapt-getinstallgdal-bin复制然后安装GDAL的PythonWrapper包:sudopipinstallgdal复制在Ubuntu下使用Eclipse+PyDev进行开发。 参见一个小程序:fromosgeo

  • 忘记密码咋办?本地密码检索工具 – LaZagne Project

    简介 LaZagneproject是一款用于检索大量存储在本地计算机上密码的开源应用程序。每款软件他们保存密码的方法或许不尽相同(明文,API,算法,数据库等等),我开发这款工具的目的是为了寻找计算机中最常用软件的密码。截至目前,该工具支持Windows上的22款软件,Linux/Unix-LikeOS上的12款软件。 使用方法:启用所有模块 cmd:laZagne.exeall启用特殊模块 cmd:laZagne.exe example:laZagne.exebrowsers help:laZagne.exe-h仅启动一个特殊软件脚本 cmd:laZagne.exe example:laZagne.exebrowsers-f help:laZagne.exebrowsers-h将所有的密码写入文件(-w选项)cmd:laZagne.exeall-w注意:WI-FI密码/Windows密码需要启动管理员权限(UAC验证/sudo) 支持软件(*)有些软件可能存在使用插件等方式保存密码:Chrome,Owncloud,Evolution,KMailIE浏览器历史记录 IE浏览器密码(从I

  • 腾讯云密钥管理系统获取主密钥列表详情api接口

    1.接口描述接口请求域名:kms.tencentcloudapi.com。 根据指定Offset和Limit获取主密钥列表详情。 默认接口请求频率限制:100次/秒。 APIExplorer提供了在线调用、签名验证、SDK代码生成和快速检索接口等能力。您可查看每次调用的请求内容和返回结果以及自动生成SDK调用示例。 2.输入参数以下请求参数列表仅列出了接口请求参数和部分公共参数,完整公共参数列表见公共请求参数。 参数名称 必选 类型 描述 Action 是 String 公共参数,本接口取值:ListKeyDetail。 Version 是 String 公共参数,本接口取值:2019-01-18。 Region 是 String 公共参数,详见产品支持的地域列表。 Offset 否 Integer 含义跟SQL查询的Offset一致,表示本次获取从按一定顺序排列数组的第Offset个元素开始,缺省为0 Limit 否 Integer 含义跟SQL查询的Limit一致,表示本次最多获取Limit个元素。缺省值为10,最大值为200 R

  • webkit内核的H5页面字体放大

    解决方法: -webkit-text-size-adjust:none; 出现场景: 布局导致的问题,当div宽度大于手机屏幕本身时,会放大字体,适应更宽的文档内容。  

  • 售后系统构建和商品状态重构经验与总结

    耗时近两个月才完成售后系统的构建附带上对商品状态的完全重构。之前由于商品状态上有售后状态的问题,导致重构难度极大。好几次我都因而觉得找不到这套东西的突破口而抓狂。但是能完成这个项目对于我来说也意义重大,做任何事情都会要先踩坑后来才会了解哪些地方有坑。做重构和设计新系统并行这件事情本身就需要极大的耐心,这也是让我感触最深的一点。没有仔细的思考边界条件,没有耐心的进行解耦就不会有被重构系统的新生。   上面莫名其妙就先鸡汤了一波,可能是被这种项目折磨得太惨的怨念爆发。。。。下面就分两部分对我在整个项目进行推进的时候遇到的难题进行一一分析和总结: 重构部分: 1. 重构系统的话,一定要考虑到以前系统的传参逻辑。 这个感受来自于,由于以前的系统已经在线上跑了很多年了,你必须要考虑到以前传递的那些参数是不是现在还是有用的不能闭着眼睛随便进行删除。   2.重构系统的时候,在查找旧函数是否已经删除完或者在系统需要并行的时候,是不是每个需要并行的地方都有处理到有两个方法。或者要么在以前的通用入口函数中加入新的逻辑,这样不容易遗漏。还有一个方法,一步到位,在每个旧系

  • 【Leetcode 二叉树】 对称二叉树(101)

    题目 给定一个二叉树,检查它是否是镜像对称的。 例如,二叉树 [1,2,2,3,4,4,3]是对称的。 1 /\ 22 /\/\ 3443 复制 但是下面这个 [1,2,2,null,3,null,3]则不是镜像对称的: 1 /\ 22 \\ 33 复制 进阶:你可以运用递归和迭代两种方法解决这个问题吗? 解答 分析:先序、中序、后序遍历的结果不能用来比较是否对称。应该用(头-左-右)和(头-右-左)的遍历顺序比较。(头-左-右)就是先序遍历,(头-右-左)不是先序、中序、后序。 递归,对称的条件:先序遍历(头-左-右)和(头-右-左)遍历过程一致。 用Null判断树的结尾。 #Definitionforabinarytreenode. #classTreeNode: #def__init__(self,x): #self.val=x #self.left=None #self.right=None #比较两种遍历结果是否相等1:头--左--右2:头--右--左 classSolution: defisSymmetric(self,root): ifnotroo

  • (25+4/25+4)复健-KMP/EKMP/manache/Trie

    (29/29)3.23已完成  1.KMP intNext[maxn]; voidprekmp(char*x,intlen){ intpre=-1,suf=0; Next[0]=-1; while(suf<len){ while(pre!=-1&&x[suf]!=x[pre])pre=Next[pre]; Next[++suf]=++pre; } } intkmp(char*x,char*y){ intlenx=strlen(x); intleny=strlen(y); intpre=0,suf=0,ans=0; prekmp(x,lenx); while(suf<leny){ while(pre!=-1&&y[suf]!=x[pre])pre=Next[pre]; pre++;suf++; if(pre>=lenx){ pre=Next[pre]; ans++; } } returnans; }复制 模板   模板写法及变式(待更新)   基本形 其中,next数组的0号位为缺省值-1,其余位为

  • MFC网络编程

    一、概念1.同步方式与异步方式同步方式:发送方不等接收方响应,便接着发送下一个数据包的通信方式异步方式:发送方发出数据,等收到接收方发回的响应后,才发送下一个数据包的通信方式2.阻塞与非阻塞方式阻塞套接字:执行此套接字的网络调用时,直到成功才返回,否则一直阻塞在此网络调用上。例如,调用Receive函数读取网络缓冲区中的数据,如果没有数据到达,将一直挂在Receive函数调用上,直到读到一些数据,此函数调用才返回。非阻塞套接字:执行此套接字的网络调用时,不管是否执行成功,都立即返回。例如,调用Receive函数读取网络缓冲区中的数据,不管是否读到数据都立即返回,而不会一直挂在此函数上。在实际Windows网络通信软件开发中,异步非阻塞套接字是用得最多的。(C/S)就是异步非阻塞模式。CAsyncSocket就是一个异步类,它封装了异步非阻塞Socket的基本功能,而CAsyncSocke的派生类CSocket则提供了阻塞的工作方式。二、Socket事件在实际应用中,程序员一般不直接使用CAsyncSocket类,而是自己定义它的派生类,主要原因就是需要捕获Socket激活的事件,如So

  • 0523 Scrum 项目6.0

    团队名称:√3  团队目标:全力完成这次的项目 团队口号:我要改变世界,改变自己!!! 演讲稿:我们的产品 鸡汤精选 是为了解决当下社会出现的太多的负能量使得人们的内心十分的痛苦,他们需要强大的正能量来抚慰他们灰暗的心灵,但是现有的方案并没有很好地解决这些需求,我们有独特的办法数以万记得鸡汤文,肯定有你愿意喝的, 它能给用户带来好处是使读者可以感受到满满的正能量,变成一个阳光的暖男,远远超过竞争对手心灵鸡汤.  同时,我们有高效率的复制粘贴方法,能很快地让大部分用户知道我们的产品,并进一步传播。  一,Scrum项目6.0 首页设计初步完成但是需要优化界面,只能简单的输出信息和在首页进行登录。界面极其简单。 鸡汤版面设计有困难,问题在于用何种形式来管理用户的数据上传,但是经过小组间的讨论确定设计方向改变,主要设计重新开始,预计进度减慢,需要负责其他界面设计的队员从旁协助,临时组成结对小组希望可以跟上团队的步伐。但由于这是小组的整体协定,团队重心将在这个版块倾斜。 段子版块进展顺利,现在只需要往数据库添加相应的信息,

相关推荐

推荐阅读